Azure Resource Manager ile artık bildiğiniz gibi Role-Based Access Control, Resource Lock, Resource Tag ve Billing vd yönetimsel ihtiyaçlarımızı karşılamaktadır. Resource Manager Policy, isteğe bağlı olarak yazılan özel politikalar yoluyla erişimini kontrol etmenizi sağlar. Geliştirdiğiniz bu politikalar ile, kurumun kaynaklarını yönetmek için gerekli olan kuralları yazabilir ve kullanıcıların yapabileceği hataları önleyebilirsiniz.
Özellikle organizasyon içerisinde istenmeyen eylemleri veya kaynakları tanımlayan politikalar oluşturmak istenebilir.Tanımladığınız politikaları subscription, resource group veya resource bazında istenilen kapsamda atayabilirsiniz. Bu makalede, size politika oluşturmak için kullanabileceğiniz politika oluşturmak için gerekli dilinin temel yapısını açıklayıp sonra farklı kapsamlarda bu politikaları uygulamak ve bazı örnekler göstereceğim.
Resource Manager ile Policy Management arasındaki farkı iyi anlamak gerekli. Resource Manager hali hazırda bizlere zaten role-base access control yaptırabiliyor. Fakat biz biraz daha yönetimi derinleştirmek istiyoruz. Örnek olarak "Engin" kullanıcısına Azure Subscription içerisinde belirli bir Resource Group için yetki verdiniz. Buraya kadar herşey istediğiniz gibi gidiyor. Eğer biraz daha derinleşmek isterseniz, örnek olarak Resource Group içerisine kaynak yaratsın ama sadece sizin belirlemiş olduğunuz "Azure Datacenter" lokasyonunda veya belirlediğiniz kaynakları örn: " Storage Account, VM , SQL" sadece bu hizmetleri oluşturabilsin deme şansına sahip olabiliyorsunuz. Benzer şekilde, Azure içerisinde bulunan hizmet katalog yapısını kontrol etmek veya kaynaklar için istenen adlandırma kurallarına zorlayabilirsiniz.Örneğin sadece Virtual Machine oluşturabilsin fakat size olarak "D2" şeklinde belirtme şansınız var.
Policy Defination structure
Policy tanımı yaparken JSON söz dizimi kullanılarak oluşturulur. Eylemler ve koşullar yerine getirildiğinde ne yapması gerektiğini söyleyen bir tanımlama veya mantıksal operatorler kullanılır.
Temelde, bir policy aşağıdaki kısımlardan oluşmaktadır.
Condition/Logical operators : Belirlediğiniz koşulları mantıksal operatorler ile manipüle edebilirsiniz. Bunlar "Not"," And"," Or" olarak çağrılır.
Effect: - Bu kısım önemli belirlediğiniz koşul yerine geldiği zaman ne olacağını açıklar. Effect olarak alabilecek değerler aşağıdaki gibidir.
- "Deny" değeri verilir ise yapılacak aksiyon hem audit edilir ve hemde işlem gerçekleşmez.
- "Audit" değerli verilir ise yapılacak aksiyon audit edilir, fakat işlem gerçekleşir.
- "Append" değeri koşul içerisinde yer alan kaynaklara izin verir.
Aşağıdaki örnekte örnek bir JSON Policy Template görebilirsiniz.
Bu örnekte söz dizimi biraz inceleyelim."JsonPolicy" adında bir değişken oluşturulmuş ve JSON içerisine condition ve effect tanımlamaları yapılmış durumdadır.Template içerisinde "North-Europe ve West-Europe" lokasyonlarında yapılacak işlemleri için bir durum belirtilmiş. Bu durum kısmı ise "Effect" alanına "Deny" değeri verilmiş gözüküyor. Özetle eğer bu lokasyonlarda dışında oluşturulacak kaynaklar için işlemler başarsız bir şekilde olacaktır ve audit edilebilme şansımız olacaktır.(Template içinde bulunan "in" kısmına dikkat ediniz!) JSON Template içeriğini Powershell ISE üzerinde geliştirdim. Sebebi ise bir değişken atayıp script içinde ilerleyen kısımlarında kullanabilmek içindir. Visual Studio ile yazmış olsaydınız yada başka bir araç ile JSON file çağırıp değişkene atamanız yeterli olacaktı.
Yukarıda yazmış olduğumuz "Policy" tanımını AzureRM Powershell Modulü içerisinde bulunan "New-AzureRmPolicyDefinition" isimli cmdlet ile gerçekleştirebiliyoruz. Bu cmdlet bir takım parametreler alır ve bunlar aşağıdaki gibidir.
- -Name : Oluşturulmak istenilen policy adıdır.
- -Description : Tanımlanan policy için açıklama girilir ve daha sonra bakıldığında hatırlatma için fikir verebilir.
- -Policy : Bu parametre geliştirdiğiniz JSON template detayını gönderilecek olan kısımdır. Dilenirse yukarıda bulunan resimdeki variable gönderilebilir veya bir path üzerinde bulunan JSON yolu ifade edilebilir.
"New-AzureRMPolicyDefinition" cmdlet'inin resim içerisinde kullanımı bulabilirsiniz. Eğer geliştirdiğiniz Policy tanımlamalarında sıkıntı yok ise başarılı bir şekilde oluşturulacaktır. "Name" parametresine policy adı olarak "regionPolicy" İsimini verdik.
Policy oluşturuldu. Artık bu policy bir kaynak grubuna atamasını gerçekleştirelim. Yazmış olduğumuz politikayı Resource Group içerisinde oluşacak kaynaklar için atamasını yapalım. Atama işlemi için portal üzerinde herhangi bir Resource Group'un bir ResourceId'si bulunmaktadır. Bunu çok kolay bir şekilde Portal arayüzünden görebilirsiniz. Dilerseniz benim gibi aşağıdaki cmdlet yardımıyla Resource Id'si bulabilirsiniz.
"Get-AzureRMResourceGroup" cmdlet sayesinde -Name parametresine "Resource Group" adını göndererek ResourceId değerini döndürdük. Bu değeri policy ilgili Resource atarken kullanıyor olacağız.