Kod olarak Azure İlkesi iş akışları tasarlama

Bulut İdaresi yolculuğunuzda ilerledikçe, Azure portalındaki her ilke atamasını el ile yönetme veya çeşitli SDK'lar aracılığıyla kurumsal ölçekte daha yönetilebilir ve tekrarlanabilir bir şeye geçmek isteyeceksiniz. Buluttaki sistemleri büyük ölçekte yönetmeye yönelik baskın yaklaşımlardan ikisi şunlardır:

  • Kod Olarak Altyapı: Ortamlarınızı tanımlayan içeriği, Azure Resource Manager şablonlarından (ARM şablonları) Azure İlkesi tanımlarına kadar her şeyi kaynak kod olarak ele alma uygulaması.
  • DevOps: Son kullanıcılarımıza sürekli değer sunulmasını sağlamak için kişilerin, süreçlerin ve ürünlerin birleşimi.

Kod olarak Azure İlkesi bu fikirlerin birleşimidir. Temel olarak, ilke tanımlarınızı kaynak denetiminde tutun ve her değişiklik yapıldığında bu değişikliği test edin ve doğrulayın. Ancak bu, İlkelerin Kod Olarak Altyapı veya DevOps ile katılımının kapsamı olmamalıdır.

Doğrulama adımı, uygulama ortamı veya sanal altyapı dağıtma gibi diğer sürekli tümleştirme veya sürekli dağıtım (CI/CD) iş akışlarının da bir bileşeni olmalıdır. Uygulama ve operasyon ekipleri, Azure İlkesi doğrulamayı derleme ve dağıtım sürecinin erken bir bileşeni haline getirerek, değişikliklerinin çok geç olmadan ve üretimde dağıtım yapmaya çalışmalarından çok önce beklendiği gibi davranıp davranmadığını keşfeder.

Tanımlar ve temel bilgiler

Kod iş akışı olarak Azure İlkesi ayrıntılarına girmeden önce, ilke tanımları ve girişim tanımları yazma ve bu tanımların atamalarında muafiyetlerden yararlanma gibi bazı temel kavramları anlamak önemlidir:

Dosya adları, ilke veya girişim tanımlarının ve diğer ilke kaynaklarının belirli bölümlerine karşılık gelir:

Dosya biçimi Dosya içeriği
policy.json İlke tanımının tamamı
policyset.json Girişim tanımının tamamı
policy.parameters.json İlke properties.parameters tanımının bölümü
policyset.parameters.json properties.parameters Girişim tanımının bölümü
policy.rules.json İlke properties.policyRule tanımının bölümü
policyset.definitions.json properties.policyDefinitions Girişim tanımının bölümü
exemptionName.json Belirli bir kaynağı veya kapsamı hedefleyen ilke muafiyeti

Bu dosya biçimlerinin örnekleri Azure İlkesi GitHub Deposunda bulunabilir

İş akışına genel bakış

Kod olarak Azure İlkesi önerilen genel iş akışı şu diyagrama benzer:

Diagram showing Azure Policy as Code workflow boxes from Create to Test to Deploy.

kod iş akışı kutuları olarak Azure İlkesi gösteren diyagram. Oluşturma, ilke ve girişim tanımlarının oluşturulmasını kapsar. Test, zorlama modu devre dışı bırakılmıştır. Uyumluluk durumu için bir ağ geçidi denetimi, atamalara M S I izinleri vererek ve kaynakları düzelterek izlenir. Dağıtım, zorlama modu etkinken atamanın güncelleştirilmesini kapsar.

Kaynak denetimi

Mevcut ilke ve girişim tanımları PowerShell, CLI veya Azure Kaynak Grafı (ARG) sorguları gibi farklı yollarla dışarı aktarılabilir. Bu tanımları depolamak için tercih edilecek kaynak denetimi yönetim ortamı, GitHub veya Azure DevOps gibi birçok seçenekten biri olabilir.

İlke tanımlarını oluşturma ve güncelleştirme

İlke tanımları JSON kullanılarak oluşturulur ve kaynak denetiminde depolanır. Her ilkenin, aynı klasörde depolanması gereken parametreler, kurallar ve ortam parametreleri gibi kendi dosya kümesi vardır. Aşağıdaki yapı, ilke tanımlarınızı kaynak denetiminde tutmanın önerilen bir yoludur.

.
|
|- policies/  ________________________ # Root folder for policy resources
|  |- policy1/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- assign.<name2>.json _________ # Assignment 2 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- policy2/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

Yeni bir ilke eklendiğinde veya mevcut ilke güncelleştirildiğinde, iş akışının Azure'da ilke tanımını otomatik olarak güncelleştirmesi gerekir. Yeni veya güncelleştirilmiş ilke tanımının test edilmesi sonraki bir adımda gelir.

Girişim tanımlarını oluşturma ve güncelleştirme

Girişim tanımları, ilke tanımlarıyla aynı klasörde depolanması gereken JSON dosyaları kullanılarak da oluşturulur. Girişim tanımı, ilke tanımının zaten var olmasını gerektirdiğinden, ilkenin kaynağı kaynak denetiminde güncelleştirilene ve ardından Azure'da güncelleştirilene kadar oluşturulamaz veya güncelleştirilemez. Aşağıdaki yapı, girişim tanımlarınızı kaynak denetiminde tutmanın önerilen bir yoludur:

.
|
|- initiatives/ ______________________ # Root folder for initiatives
|  |- init1/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- assign.<name2>.json _________ # Assignment 2 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- init2/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

İlke tanımlarında olduğu gibi, mevcut bir girişim eklendiğinde veya güncelleştirildiğinde iş akışının Azure'daki girişim tanımını otomatik olarak güncelleştirmesi gerekir. Yeni veya güncelleştirilmiş girişim tanımının test edilmesi sonraki bir adımda gelir.

Dekont

İlkeleri dağıtmak için GitHub iş akışları veya Azure Pipelines gibi merkezi bir dağıtım mekanizması kullanılması önerilir. Bu, ortamınıza yalnızca gözden geçirilmiş ilke kaynaklarının dağıtılmasını ve aşamalı ve merkezi bir dağıtım mekanizmasının kullanılmasını sağlamaya yardımcı olur. İlke kaynaklarına yazma izinleri dağıtımda kullanılan kimlikle kısıtlanabilir.

Güncelleştirilmiş tanımı test edin ve doğrulayın

Otomasyon, yeni oluşturduğunuz veya güncelleştirilen ilke veya girişim tanımlarınızı alıp Azure'da nesneye güncelleştirme yaptıktan sonra, yapılan değişiklikleri test etme zamanı gelmiştir. İlke veya parçası olduğu girişimler, üretimden en uzak ortamdaki kaynaklara atanmalıdır. Bu ortam genellikle Dev'dir.

Dekont

Bu adımda, Azure ortamınızda ilke tanımının tümleştirme testini yapıyoruz. Bu, tanım oluşturma işlemi sırasında gerçekleşmesi gereken ilke tanımının işlevselliğini açıklamaktan ayrıdır.

Kaynak oluşturma ve güncelleştirmelerin engellenmemesi, ancak mevcut kaynakların güncelleştirilmiş ilke tanımına uyumluluk açısından denetlenmesi için atamanın enforcementMode of disabled kullanması gerekir. enforcementMode ile bile atama kapsamının bir kaynak grubu veya özellikle ilkeleri doğrulamak için bir abonelik olması önerilir.

Dekont

Zorlama modu yararlı olsa da, ilke tanımını çeşitli koşullar altında kapsamlı bir şekilde test etmek yerine kullanılamaz. İlke tanımı ile PUT test edilmelidir ve PATCH REST API çağrıları, uyumlu ve uyumlu olmayan kaynaklar ve kaynakta eksik bir özellik gibi uç durumlar.

Atama dağıtıldıktan sonra yeni atamanın uyumluluk verilerini almak için Azure İlkesi SDK'sını, Azure Pipelines Güvenlik ve Uyumluluk Değerlendirmesi görevini veya Azure Kaynak Grafı (ARG) sorgularını (örneklere bakın) kullanın. İlkeleri ve atamaları test etmek için kullanılan ortamın farklı uyumluluk durumlarına sahip kaynakları olmalıdır. Kod için iyi bir birim testi gibi, kaynakların hatalı pozitif veya yanlış negatif olmadan beklendiği gibi değerlendirildiğini test etmek istiyorsunuz. Yalnızca beklediğiniz şeyi test edip doğrularsanız, ilkeden beklenmeyen ve tanımlanamayan bir etki olabilir. Daha fazla bilgi için bkz. Yeni bir Azure İlkesi tanımının etkisini değerlendirme.

Düzeltme görevlerini etkinleştirme

Atamanın doğrulanması beklentileri karşılıyorsa, sonraki adım düzeltmeyi doğrulamaktır. deployIfNotExists veya modify kullanan ilkeler, uyumlu olmayan bir durumdaki kaynakları düzeltmek ve bunları uyumlu hale getirmek için tetiklenen ilişkili bir düzeltme görevine sahip olabilir.

Kaynakları düzeltmenin ilk adımı, ilke atamasına ilke tanımında tanımlanan rol atamasını vermektir. Bu rol ataması, ilke ataması yönetilen kimliğine kaynağı uyumlu hale getirmek için gerekli değişiklikleri yapmak için yeterli haklar verir.

İlke ataması uygun haklara sahip olduktan sonra, uyumlu olmayan olduğu bilinen bir kaynak kümesine karşı bir düzeltme görevi tetiklemesi için İlke SDK'sını kullanın. Devam etmeden önce bu düzeltilmiş görevlere karşı üç test tamamlanmalıdır:

  • Düzeltme görevinin başarıyla tamamlandığını doğrulayın
  • İlke uyumluluk sonuçlarının beklendiği gibi güncelleştirildiğini görmek için ilke değerlendirmesini çalıştırın
  • Özelliklerinin değiştiğini doğrulamak için kaynaklara karşı doğrudan bir ortam birimi testi çalıştırma

Hem güncelleştirilmiş ilke değerlendirme sonuçlarının hem de ortamın test edilmesi, düzeltme görevlerinin bekleneni değiştirdiğini ve ilke tanımının uyumluluk değişikliğini beklendiği gibi gördüğünü doğrudan onaylar.

Zorunlu atamalara güncelleştirme

Tüm doğrulama geçitleri tamamlandıktan sonra, atamayı enforcementMode özelliğini etkin olarak kullanacak şekilde güncelleştirin. Başlangıçta bu değişikliğin üretimden uzak olan aynı ortamda yapılması önerilir. Kaynak oluşturma ve kaynak güncelleştirme sırasında istenen efektlerin uygulandığını doğrulayın. Bu ortam beklendiği gibi çalıştığı doğrulandıktan sonra, ilke üretim kaynaklarına dağıtılana kadar değişikliğin kapsamı sonraki ortamı içerecek şekilde kapsamlandırılmalıdır.

İşlem tümleşik değerlendirmeleri

Kod olarak Azure İlkesi için genel iş akışı, ilkeleri ve girişimleri büyük ölçekte bir ortama geliştirmeye ve dağıtmaya yöneliktir. Ancak ilke değerlendirmesi, Azure'da kaynak dağıtan veya oluşturan herhangi bir iş akışı için uygulama dağıtma veya altyapı oluşturmak için ARM şablonlarını çalıştırma gibi dağıtım sürecinin bir parçası olmalıdır.

Böyle durumlarda, bir test aboneliğine veya kaynak grubuna uygulama veya altyapı dağıtımı yapıldıktan sonra, mevcut tüm ilkelerin ve girişimlerin kapsam denetimi doğrulaması için ilke değerlendirmesi yapılmalıdır. Bu tür bir ortamda enforcementModedevre dışı olarak yapılandırılabilirler ancak bir uygulama veya altyapı dağıtımının ilke tanımlarını erken ihlal etip ihlal etmediğini önceden bilmek yararlı olur. Bu nedenle bu ilke değerlendirmesi bu iş akışlarında bir adım olmalı ve uyumlu olmayan kaynaklar oluşturan başarısız dağıtımlar olmalıdır.

İnceleyin

Bu makale, Kod olarak Azure İlkesi genel iş akışını ve ilke değerlendirmesinin diğer dağıtım iş akışlarının bir parçası olması gereken yeri kapsar. Bu iş akışı, tetikleyicileri temel alan betikli adımları ve otomasyonu destekleyen herhangi bir ortamda kullanılabilir.

Sonraki adımlar