Bir önceki yazımızda Resource Group için gerekli ResourceId bilgisini öğrenmiştik. Bu işlemi Portal üzerinden yapmak için aşağıdaki detaylardan yararlanabilirsiniz.
Resource Id değerini farklı yöntemler ile bulduktan sonra artık oluşturduğumuz policy atama işlemine geçebiliriz. Atama işlemini gerçekleştirecek cmdlet "New-AzureRmPolicyAssignment" olarak karşımıza çıkmaktadır. Bu cmdlet bir takım parametreler alır ve bunların detayları aşağıdaki gibidir.
- -Name : Atanacak policy için bir Assignment adı verilir.
- -PolicyDefinition: Tanımlanan policyler bu parametre içerisine gönderilir. Böylece Assignment gerçekleşir, kısaca her Assignment yapıldığında bir Policy tanımlamasının parametre içerisine gönderilmesi gerekiyor.
- -Scope : Bu parametre ile kapsam detayı belirtilir.( Resource Group, Subscription, Resource ) Öğrenilen ResourceId kısmı bu parametre içerisine gönderilir. // ResourceId şeklinde gönderilmelidir.
Policy atamasını sağlayacak cmdlet kullanımına geçelim.
Yukarıda çalıştırılan Powershell cmdlet detaylarını açıkladım. Fakat kısaca yine üzerinden geçecek olur isek, bir önceki yazımızda JSON template içerisinden oluşturduğumuz Policy tanımlamasını "Get-AzreRMPolicyDefinition" cmdlet ile çağırıp "regionPolicy" adında bir değişkene atadım. "New-AzureRMPolicyAssignment" cmdlet içinde bulunan "PolicyDefinition" parametresine "$regionPolicy" olarak gönderdim ve Powershell Console üzerinde başarılı bir şekilde atamanın gerçekleştiğini görebilirsiniz.
Bildiğiniz gibi bizim JSON Template içinde "West ve North Europe" datacenter dışında kaynak oluşturulursa "deny" verilmesini belirtmiştik. Bununla ilgili Policy oluşturduk ve Assignment sürecinide tamamladık, artık çalışıp çalışmadığını kontrol edelim.Çok basit bir şekilde "Storage Account" oluşturuyorum. Bunun adını "regionpolicy" olarak belirleyip Region olarak "Central US" seçmiş bulunmaktayım.
"Create" butonuna tıklayarak, Storage Account oluşturma işlemini başlattık. Oluşturduğumuz Resource Group bizim Policy ataması yaptığımız olduğunu dikkat etmeyi unutmaylaım.
Yukarıda görüldüğü gibi yazmış olduğumuz Policy başarılı olduğunu görmekteyiz. Aldığımız hatalara bakıldığı zaman Policy tanımlaması yüzünden ilgili kaynak oluşturulamadığını ve hangi Policy üzerinden geldiğini açıklamış gözüküyor. Herşey istediğimiz gibi fakat bu sizin delegasyon yaptığınız kullanıcının ekranına yansıyan hatadır. Daha sonra biz bunu görüntülemek isteyebiliriz. Bu süreci kim, ne zaman ve neden hata almış gibi denetleme yapma şansımız var. Bunun için yardımınıza "Policy Audit Events" grubuna dahil olan Powershell cmdletler koşuyor olucak.
Policy Audit Events
Eğer kuralını uyguladıktan sonra, politikaların kimlere uygulandığını ve ne sebepte kaynaklandığını görebilirsiniz. Bu verileri almak için PowerShell veya Azure CLI kullanmanız gerekiyor. Powershell ile yapmak istediğimiz zaman yardımınıza "Get-AzureRmLog" adında cmdlet yetişiyor olacak. Bu cmdlet size Azure Resource Manager içerisine düşen log detaylarını getirmektedir.
Yukarıda kullandığımız cmdlet içerisinde bir filter işlemi gerçekleştirdik. "OperetaionName" değeri eğer ""Microsoft.Authorization/policies/deny/action"" eşit olanları getirmesini istedik. Bu sayede sadece işlem yapan kişilerde "deny" durumu oluşan log detaylarını ekranda görmemizi sağladı. İsterseniz bunu tüm audit loglar gelsin şeklinde değiştirme şansına sahipsiniz. Yapmanız gereken sadece OperationName karşına girdiğimiz değeri şu şekilde ""Microsoft.Authorization/policies/audit/action" değiştirmeniz olacaktır. Bununla beraber Azure Resource Manager içerisinde tüm policy ile gelen tüm logları audit etmenizi sağlayacaktır.