Etki Azure İlkesi anlama

Azure İlkesi'ndeki her ilke tanımı tek bir etkiye sahiptir. Bu etki, ilke kuralı eşleşmek üzere değerlendir geldiğinde ne olacağını belirler. Etkileri yeni bir kaynak, güncelleştirilmiş bir kaynak veya mevcut bir kaynak içinse farklı davranır.

Bu etkiler şu anda bir ilke tanımında de desteklemektedir:

Aşağıdaki etkiler kullanım dışıdır:

Önemli

EnforceOPAConstraint veya EnforceRegoPolicy etkilerinin yerine, Kaynak Sağlayıcısı moduyla denetimi ve reddetmeyi Microsoft.Kubernetes.Data kullanın. Yerleşik ilke tanımları güncelleştirildi. Bu yerleşik ilke tanımlarının mevcut ilke atamaları değiştirildiğinde, etki parametresi güncelleştirilmiş allowedValues listesinde bir değere değiştirilmelidir.

Değerlendirme sırası

Kaynak oluşturma veya güncelleştirme istekleri ilk olarak kaynak Azure İlkesi değerlendirilir. Azure İlkesi kaynak için geçerli olan tüm atamaların listesini oluşturur ve ardından kaynağı her tanımda değerlendirir. Bir Resource Manager modundaAzure İlkesi isteği uygun Kaynak Sağlayıcısına teslim etmek için birkaç etkiyi işlemektedir. Bu düzen, kaynak, kaynak sağlayıcısının tasarım idare denetimlerini karşılamaması durumda Kaynak Sağlayıcısı tarafından gereksiz Azure İlkesi. Kaynak Sağlayıcısı moduyla,Kaynak Sağlayıcısı değerlendirmeyi ve sonucu yönetir ve sonuçları geri rapor Azure İlkesi.

  • İlke kuralının değerlendirilmesi gerekip gerekip gerek olmadığını belirlemek için önce devre dışı bırakılır.
  • Ekleme ve Değiştirme daha sonra değerlendirilir. yapılan bir değişiklik, isteği değiştirene kadar denetim veya reddetme etkisinin tetiklenemini önleyebilir. Bu etkiler yalnızca tek bir Resource Manager kullanılabilir.
  • Reddet daha sonra değerlendirilir. Denetimden önce reddetme değerlendirerek, is önüne geçemeyen bir kaynağın çift günlüğe kaydetmesi önlenebilir.
  • Denetim en son değerlendirilir.

Kaynak Sağlayıcısı bir Resource Manager modu isteğinde başarı kodu döndürdikten sonra AuditIfNotExists ve DeployIfNotExists ek uyumluluk günlüğü veya eylem gerekip gerekip gerek olmadığını belirlemek için değerlendirir.

Ayrıca, PATCH yalnızca ilgili alanları tags değiştiren istekler, ilke değerlendirmesini ilgili alanları inceleyen koşulları içeren tags ilkelerle kısıtlar.

Ekle

Ekleme, oluşturma veya güncelleştirme sırasında istenen kaynağa ek alanlar eklemek için kullanılır. Depolama kaynağı için izin verilen IP'leri belirtme yaygın bir örnektir.

Önemli

Ekleme, etiket olmayan özelliklerle kullanılmak üzere tasarlanmıştır. Ekleme bir oluşturma veya güncelleştirme isteği sırasında kaynağa etiket ekleyene kadar, bunun yerine etiketler için Değiştir etkisinin kullanılması önerilir.

Ekleme değerlendirmesi

Ekleme, kaynak oluşturma veya güncelleştirme sırasında istek bir Kaynak Sağlayıcısı tarafından işlenmeden önce değerlendirilir. İlke kuralının if koşulu karşı olduğunda ekleme alanları kaynağa eklenir. Ekleme etkisi özgün istekte farklı bir değerle bir değeri geçersiz kılarsa reddetme etkisi olarak davranır ve isteği reddeder. Var olan bir diziye yeni bir değer eklemek için diğer [*] adın sürümünü kullanın.

Ekleme etkisini kullanan bir ilke tanımı değerlendirme döngüsünün bir parçası olarak çalıştır olduğunda, zaten mevcut olan kaynaklarda değişiklik yapmaz. Bunun yerine, if koşuluna uygun herhangi bir kaynağı uyumlu değil olarak işaretler.

Ekleme özellikleri

Ekleme etkisi yalnızca gerekli olan bir ayrıntılar dizisine sahiptir. Ayrıntılar bir dizi olduğu için tek bir alan/değer çifti veya birden çok değer olabilir. Kabul edilebilir alanların listesi için tanım yapısına bakın.

Ekleme örnekleri

Örnek 1: Bir depolama hesabında IP kurallarını ayarlamak için dizi değerine sahip olmayan bir diğer ad kullanan tek [*] alan/değer çifti. Diğer ad olmayan [*] bir dizi olduğunda, etki değeri dizinin tamamına ekler. Dizi zaten varsa, çakışmadan bir reddetme olayı oluşur.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
        "value": [{
            "action": "Allow",
            "value": "134.5.0.0/21"
        }]
    }]
}

Örnek 2: Bir depolama hesabında IP kurallarını ayarlamak için dizi değerine sahip bir diğer ad kullanan tek [*] alan/değer çifti. Diğer ad [*] kullanılarak, etki değeri önceden var olabilecek bir diziye ekler. Dizi henüz yoksa oluşturulur.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]",
        "value": {
            "value": "40.40.40.40",
            "action": "Allow"
        }
    }]
}

Denetim

Denetim, uyumlu olmayan bir kaynağı değerlendirirken etkinlik günlüğünde bir uyarı olayı oluşturmak için kullanılır, ancak isteği durdurmaz.

Denetim değerlendirmesi

Denetim, kaynak oluşturma veya güncelleştirme Azure İlkesi tarafından denetlenen son etkidir. Kaynak Resource Manager için Azure İlkesi Sağlayıcı'ya gönderir. Bir kaynak için oluşturma veya güncelleştirme isteğini değerlendirirken, Azure İlkesi günlüğüne bir işlem ekler ve Microsoft.Authorization/policies/audit/action kaynağı uyumlu değil olarak işaretler. Standart uyumluluk değerlendirme döngüsü sırasında yalnızca kaynakta uyumluluk durumu güncelleştirilir.

Denetim özellikleri

Bir Resource Manager modunda, denetim etkisinin ilke tanımının o zaman koşulunda kullanmak için ek bir özelliği yoktur.

Bir Kaynak Sağlayıcısı modu Microsoft.Kubernetes.Data için denetim etkisi, ayrıntıların aşağıdaki ek alt özelliklerine sahiptir.

  • constraintTemplate (gerekli)
    • Yeni Kısıtlamaları tanımlayan CustomResourceDefinition (CRD) Kısıtlama şablonu. Şablon Rego mantığını, Kısıtlama şemasını ve bu şemadan değerler aracılığıyla geçirilen Kısıtlama parametrelerini Azure İlkesi.
  • kısıtlama (gerekli)
    • Kısıtlama şablonunun CRD uygulaması. olarak değerler aracılığıyla geçirilen parametreleri {{ .Values.<valuename> }} kullanır. Aşağıdaki örnek 2'de bu değerler ve {{ .Values.excludedNamespaces }} {{ .Values.allowedContainerImagesRegex }} değerleridir.
  • değerler (isteğe bağlı)
    • Kısıtlamaya geçilmesi gereken parametreleri ve değerleri tanımlar. Her değerin Kısıtlama şablonu CRD'sinde mevcut olması gerekir.

Denetim örneği

Örnek 1: Veri modlarında denetim Resource Manager kullanma.

"then": {
    "effect": "audit"
}

Örnek 2: Kaynak Sağlayıcısı modu için denetim etkisini Microsoft.Kubernetes.Data kullanma. Ayrıntılardaki ek bilgiler, izin verilen kapsayıcı görüntülerini sınırlamak için Kubernetes'te kullanmak üzere Kısıtlama şablonunu ve CRD'leri tanımlar.

"then": {
    "effect": "audit",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/constraint.yaml",
        "values": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]",
            "excludedNamespaces": "[parameters('excludedNamespaces')]"
        }
    }
}

AuditIfNotExists

AuditIfNotExists, if koşuluyla eşleşen ancak o koşulun ayrıntılarında belirtilen özelliklere sahip olan kaynakla ilgili kaynakların denetimini sağlar.

AuditIfNotExists değerlendirmesi

AuditIfNotExists, Kaynak Sağlayıcısı bir kaynak oluşturma veya güncelleştirme isteğini işledikten ve bir başarı durum kodu döndürülene kadar çalışır. Denetim, ilgili kaynak yoksa veya ExistenceCondition tarafından tanımlanan kaynaklar true olarak değerlendirilmezse gerçekleşir. Yeni ve güncelleştirilmiş kaynaklar Azure İlkesi etkinlik günlüğüne bir işlem Microsoft.Authorization/policies/audit/action ekler ve kaynağı uyumlu değil olarak işaretler. Tetiklendiğinde, if koşuluna uygun olan kaynak, uyumlu değil olarak işaretlenen kaynaktır.

AuditIfNotExists özellikleri

AuditIfNotExists etkilerinin details özelliği, eşleşmesi gereken ilgili kaynakları tanımlayan tüm alt özelliklere sahiptir.

  • Tür (gerekli)
    • Eşleşmesi gereken ilgili kaynağın türünü belirtir.
    • details.type if koşulu kaynağının altında bir kaynak türü ise, ilke değerlendirilen kaynak kapsamında bu tür kaynakları sorgular. Aksi takdirde, ilke değerlendirilen kaynakla aynı kaynak grubu içinde sorgular.
  • Ad (isteğe bağlı)
    • Eşleşmesi için kaynağın tam adını belirtir ve ilkenin belirtilen türe sahip tüm kaynaklar yerine belirli bir kaynağı getirmesini sağlar.
    • if.field.type ve then.details.type için koşul değerleri eşleşirse, Ad gerekli hale gelir ve bir alt kaynak için , veya olması [field('name')] [field('fullName')] gerekir. Ancak bunun yerine bir denetim etkisi dikkate alınmalıdır.
  • ResourceGroupName (isteğe bağlı)
    • İlgili kaynağın eşleştirmesinin farklı bir kaynak grubundan gelmesini sağlar.
    • Tür , IF koşulu kaynağı altında olacak bir kaynak ise uygulanmaz.
    • Varsayılan değer IF koşulu kaynağının kaynak grubudur.
  • Mevcut Tencescope (isteğe bağlı)
    • İzin verilen değerler, abonelik ve ResourceGroup.
    • İle eşleşecek ilgili kaynağı nereden getirecek yerin kapsamını ayarlar.
    • Tür , IF koşulu kaynağı altında olacak bir kaynak ise uygulanmaz.
    • ResourceGroup Için, resourcegroupname içinde belirtilen IF koşulu kaynağının kaynak grubu veya kaynak grubu ile sınırlı olur.
    • Abonelik için, ilgili kaynak için tüm aboneliği sorgular.
    • Varsayılan kaynak grubu.
  • EvaluationDelay (isteğe bağlı)
    • İlgili kaynakların varlığını ne zaman değerlendirileceğini belirtir. Gecikme yalnızca create veya Update kaynak isteği sonucu olan değerlendirmeler için kullanılır.
    • İzin verilen değerler AfterProvisioning , AfterProvisioningSuccess AfterProvisioningFailure veya 0 ile 360 dakika arasında bir ISO 8601 süresi.
    • Aftersağlama değerleri, Ilke kuralının If koşulunda değerlendirilen kaynağın sağlama sonucunu inceler. AfterProvisioning sonuçtan bağımsız olarak sağlama tamamlandıktan sonra çalışır. Sağlama 6 saatten uzun sürerse, Aftersağlama değerlendirme gecikmeleri belirlenirken hata olarak değerlendirilir.
    • Varsayılan değer PT10M (10 dakika).
    • Uzun değerlendirme gecikmesi belirtmek, kaynağın kayıtlı uyumluluk durumunun bir sonraki değerlendirme tetikleyicisinekadar güncelleştirilmesine neden olabilir.
  • ExistenceCondition (isteğe bağlı)
    • Belirtilmemişse, türdeki ilgili kaynaklar etkiyi karşılar ve denetimi tetiklemez.
    • , IF koşulunun ilke kuralıyla aynı dili kullanır, ancak ilgili her kaynağa ayrı ayrı değerlendirilir.
    • Eşleşen ilgili herhangi bir kaynak true olarak değerlendirilirse, efekt karşılanır ve denetimi tetiklemez.
    • IF koşulunda değerlerle denklik denetlemek için [Field ()] kullanabilirsiniz.
    • Örneğin, üst kaynağın ( IF koşulunda) eşleşen ilgili kaynakla aynı kaynak konumunda olduğunu doğrulamak için kullanılabilir.

Auditınotexists örneği

Örnek: kötü amaçlı yazılımdan koruma uzantısının mevcut olup olmadığını belirlemesi için sanal makineleri değerlendirir ve ne zaman yoksa denetler.

{
    "if": {
        "field": "type",
        "equals": "Microsoft.Compute/virtualMachines"
    },
    "then": {
        "effect": "auditIfNotExists",
        "details": {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "existenceCondition": {
                "allOf": [{
                        "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                        "equals": "Microsoft.Azure.Security"
                    },
                    {
                        "field": "Microsoft.Compute/virtualMachines/extensions/type",
                        "equals": "IaaSAntimalware"
                    }
                ]
            }
        }
    }
}

Reddet

Reddetme, bir ilke tanımı aracılığıyla tanımlı standartlarla eşleşmeyen bir kaynak isteğini engellemek için kullanılır ve istekte başarısız olur.

Değerlendirmeyi Reddet

Eşleşen bir kaynağı Kaynak Yöneticisi modunda oluştururken veya güncelleştirirken reddetme, isteği kaynak sağlayıcısına gönderilmeden önce engeller. İstek bir olarak döndürülür 403 (Forbidden) . Portalda, ilke ataması tarafından engellenmiş olan dağıtımda durum olarak yasak görüntülenir. Kaynak sağlayıcısı, kaynak sağlayıcısı modunda kaynak değerlendirmesini yönetir.

Mevcut kaynakların değerlendirmesi sırasında, bir reddetme ilke tanımıyla eşleşen kaynaklar uyumlu değil olarak işaretlenir.

Reddetme özellikleri

Kaynak Yöneticisi modu için, reddetme efekti, ilke tanımının daha sonra koşulundaki ek özelliklere sahip olmaz.

Kaynak sağlayıcısı modu için Microsoft.Kubernetes.Data , reddetme efekti aşağıdaki ek özellikler alt özelliklerine sahiptir.

  • constraintTemplate (gerekli)
    • Yeni kısıtlamaları tanımlayan CustomResourceDefinition (CRD) kısıtlama şablonu. Şablon rego mantığını, kısıtlama şemasını ve Azure Ilkesinden değerler aracılığıyla geçirilen kısıtlama parametrelerini tanımlar.
  • kısıtlama (zorunlu)
    • Kısıtlama şablonunun CRD uygulama. Değerler aracılığıyla geçirilen parametreleri kullanır {{ .Values.<valuename> }} . Aşağıdaki örnek 2 ' de, bu değerler {{ .Values.excludedNamespaces }} ve ' dir {{ .Values.allowedContainerImagesRegex }} .
  • değerler (isteğe bağlı)
    • Kısıtlamaya geçirilecek parametreleri ve değerleri tanımlar. Her değer, CRD kısıtlama şablonunda bulunmalıdır.

Reddetme örneği

Örnek 1: Kaynak Yöneticisi modları için reddetme efektini kullanma.

"then": {
    "effect": "deny"
}

Örnek 2: bir kaynak sağlayıcısı modu için reddetme efektini kullanma Microsoft.Kubernetes.Data . Ayrıntıların içindeki ek bilgiler, izin verilen kapsayıcı görüntülerini sınırlamak Için Kubernetes 'Te kullanılacak kısıtlama ŞABLONUNU ve CRD 'yi tanımlar.

"then": {
    "effect": "deny",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/constraint.yaml",
        "values": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]",
            "excludedNamespaces": "[parameters('excludedNamespaces')]"
        }
    }
}

DeployIfNotExists

Bir DeployIfNotExists öğesine benzer şekilde, bir DeployIfNotExists ilke tanımı, koşul karşılandığında bir şablon dağıtımı yürütür.

Not

Iç içe şablonlar Deployifnotexists ile desteklenir, ancak bağlantılı şablonlar Şu anda desteklenmiyor.

DeployIfNotExists değerlendirmesi

Bir kaynak sağlayıcı bir oluşturma veya güncelleştirme aboneliğini veya kaynak isteğini işlediğinde ve başarı durum kodu döndürmediğinde, DeployIfNotExists yapılandırılabilir bir gecikmeden sonra çalışır. İlişkili kaynaklar yoksa veya ExistenceCondition tarafından tanımlanan kaynaklar true olarak değerlendirilmiyorsa, şablon dağıtımı oluşur. Dağıtımın süresi, şablona dahil edilen kaynakların karmaşıklığına bağlıdır.

Bir değerlendirme çevrimi sırasında, kaynaklarla eşleşen bir DeployIfNotExists etkisi olan ilke tanımları uyumlu değil olarak işaretlenir, ancak bu kaynakta hiçbir işlem yapılmaz. Mevcut uyumlu olmayan kaynaklar bir Düzeltme göreviyledüzeltilebilir.

DeployIfNotExists özellikleri

DeployIfNotExists efektinin Details özelliği, eşleştirilecek ilgili kaynakları ve yürütülecek şablon dağıtımını tanımlayan tüm alt özellikleri içerir.

  • Tür (gerekli)

    • Eşleştirilecek ilgili kaynağın türünü belirtir.
    • , IF koşulu kaynağı altında bir kaynağı getirmeye çalışırken başlar ve sonra, IF koşulu kaynağıyla aynı kaynak grubu içinde sorgular.
  • Ad (isteğe bağlı)

    • Eşleştirilecek kaynağın tam adını belirtir ve ilkenin belirtilen türdeki tüm kaynaklar yerine belirli bir kaynağı almasına neden olur.
    • IF. Field. Type ve then. details. Type ile ilgili koşul değerleri ne zaman eşleşiyorsa, ad gerekli olur ve [field('name')] ya da [field('fullName')] bir alt kaynak için olmalıdır.
  • Resourcegroupname (isteğe bağlı)

    • İlgili kaynağın eşleştirmesinin farklı bir kaynak grubundan gelmesini sağlar.
    • Tür , IF koşulu kaynağı altında olacak bir kaynak ise uygulanmaz.
    • Varsayılan değer IF koşulu kaynağının kaynak grubudur.
    • Bir şablon dağıtımı yürütülürse, bu değerin kaynak grubunda dağıtılır.
  • Mevcut Tencescope (isteğe bağlı)

    • İzin verilen değerler, abonelik ve ResourceGroup.
    • İle eşleşecek ilgili kaynağı nereden getirecek yerin kapsamını ayarlar.
    • Tür , IF koşulu kaynağı altında olacak bir kaynak ise uygulanmaz.
    • ResourceGroup Için, resourcegroupname içinde belirtilen IF koşulu kaynağının kaynak grubu veya kaynak grubu ile sınırlı olur.
    • Abonelik için, ilgili kaynak için tüm aboneliği sorgular.
    • Varsayılan kaynak grubu.
  • EvaluationDelay (isteğe bağlı)

    • İlgili kaynakların varlığını ne zaman değerlendirileceğini belirtir. Gecikme yalnızca create veya Update kaynak isteği sonucu olan değerlendirmeler için kullanılır.
    • İzin verilen değerler AfterProvisioning , AfterProvisioningSuccess AfterProvisioningFailure veya 0 ile 360 dakika arasında bir ISO 8601 süresi.
    • Aftersağlama değerleri, Ilke kuralının If koşulunda değerlendirilen kaynağın sağlama sonucunu inceler. AfterProvisioning sonuçtan bağımsız olarak sağlama tamamlandıktan sonra çalışır. Sağlama 6 saatten uzun sürerse, Aftersağlama değerlendirme gecikmeleri belirlenirken hata olarak değerlendirilir.
    • Varsayılan değer PT10M (10 dakika).
    • Uzun değerlendirme gecikmesi belirtmek, kaynağın kayıtlı uyumluluk durumunun bir sonraki değerlendirme tetikleyicisinekadar güncelleştirilmesine neden olabilir.
  • ExistenceCondition (isteğe bağlı)

    • Belirtilmemişse, türü ilgili herhangi bir kaynak etkiyi karşılar ve dağıtımı tetiklemez.
    • , IF koşulunun ilke kuralıyla aynı dili kullanır, ancak ilgili her kaynağa ayrı ayrı değerlendirilir.
    • Eşleşen ilgili herhangi bir kaynak true olarak değerlendirilirse, efekt karşılanır ve dağıtımı tetiklemez.
    • IF koşulunda değerlerle denklik denetlemek için [Field ()] kullanabilirsiniz.
    • Örneğin, üst kaynağın ( IF koşulunda) eşleşen ilgili kaynakla aynı kaynak konumunda olduğunu doğrulamak için kullanılabilir.
  • Roledefinitionıds (gerekli)

    • Bu özellik, abonelik tarafından erişilebilen rol tabanlı erişim denetimi rol KIMLIĞIYLE eşleşen bir dize dizisi içermelidir. Daha fazla bilgi için bkz. Düzeltme-ilke tanımını yapılandırma.
  • Deploymentscope (isteğe bağlı)

    • İzin verilen değerler Subscription ve ResourceGroup değerleridir.
    • Tetiklenen dağıtım türünü ayarlar. Abonelik, abonelik düzeyinde dağıtımı gösterir. ResourceGroup, bir kaynak grubuna dağıtımı gösterir.
    • Abonelik düzeyinde dağıtımlar kullanırken Dağıtım'da bir konum özelliği belirtilmelidir.
    • ResourceGroup varsayılandır.
  • Dağıtım (gerekli)

    • Bu özellik, PUT API'ye geçirilene kadar tam şablon dağıtımını Microsoft.Resources/deployments içermesi gerekir. Daha fazla bilgi için bkz. Dağıtımlar REST API.

    Not

    Deployment özelliği içindeki tüm işlevler, ilke değil şablonun bileşenleri olarak değerlendirilir. Özel durum, ilkeden şablona değer aktaran parameters özelliğidir. Bu bölümdeki bir şablon parametre adı altındaki değer, bu değeri geçirme işlemini gerçekleştirmek için kullanılır (DeployIfNotExists örneğinde fullDbName bölümüne bakın).

DeployIfNotExists örneği

Örnek: transparentDataEncryption SQL Server olup olmadığını belirlemek için veritabanlarını değerlendirir. Yoksa, etkinleştirilen bir dağıtım yürütülür.

"if": {
    "field": "type",
    "equals": "Microsoft.Sql/servers/databases"
},
"then": {
    "effect": "DeployIfNotExists",
    "details": {
        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
        "name": "current",
        "evaluationDelay": "AfterProvisioning",
        "roleDefinitionIds": [
            "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
            "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
        ],
        "existenceCondition": {
            "field": "Microsoft.Sql/transparentDataEncryption.status",
            "equals": "Enabled"
        },
        "deployment": {
            "properties": {
                "mode": "incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                        "fullDbName": {
                            "type": "string"
                        }
                    },
                    "resources": [{
                        "name": "[concat(parameters('fullDbName'), '/current')]",
                        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
                        "apiVersion": "2014-04-01",
                        "properties": {
                            "status": "Enabled"
                        }
                    }]
                },
                "parameters": {
                    "fullDbName": {
                        "value": "[field('fullName')]"
                    }
                }
            }
        }
    }
}

Devre dışı

Bu etki, test durumları veya ilke tanımının etkiyi parametreli hale geldiğinde yararlıdır. Bu esneklik, ilkenin tüm atamalarını devre dışı bırakmak yerine tek bir atamayı devre dışı bırakmayı mümkün hale sağlar.

Devre dışı etkisine alternatif olarak ilke ataması üzerinde ayarlanmış enforcementMode vardır. enforcementMode Devre Dışı olduğunda kaynaklar hala değerlendirilir. Etkinlik günlükleri ve ilke etkisi gibi günlükler oluşmaz. Daha fazla bilgi için bkz. ilke ataması - zorlama modu.

EnforceOPAConstraint

Bu etki, ilke tanımı moduyla Microsoft.Kubernetes.Data kullanılır. OPA Constraint Framework ile tanımlanan Gatekeeper v3 erişim denetim kurallarını Azure'daki Kubernetes kümelere (OPA) açmak için kullanılır.

Önemli

EnforceOPAConstraint etkisine sahip sınırlı önizleme ilkesi tanımları ve ilgili Kubernetes Service kategorisi kullanım dışıdır. Bunun yerine, Kaynak Sağlayıcısı moduyla denetim ve reddetme etkilerini Microsoft.Kubernetes.Data kullanın.

EnforceOPAConstraint değerlendirmesi

Open Policy Agent erişim denetleyicisi, kümede yeni istekleri gerçek zamanlı olarak değerlendirir. Her 15 dakikada bir kümenin tam taraması tamamlanır ve sonuçlar kümeye Azure İlkesi.

EnforceOPAConstraint özellikleri

EnforceOPAConstraint etkisinin details özelliği, Gatekeeper v3 erişim denetimi kuralını açıklayan alt özelliklere sahiptir.

  • constraintTemplate (gerekli)
    • Yeni Kısıtlamaları tanımlayan CustomResourceDefinition (CRD) Kısıtlama şablonu. Şablon rego mantığını, Kısıtlama şemasını ve bu şemadan değerler aracılığıyla geçirilen Kısıtlama parametrelerini Azure İlkesi.
  • kısıtlama (gerekli)
    • Kısıtlama şablonunun CRD uygulaması. değerleriyle geçirilen parametreleri olarak {{ .Values.<valuename> }} kullanır. Aşağıdaki örnekte bu değerler ve {{ .Values.cpuLimit }} {{ .Values.memoryLimit }} değerleridir.
  • değerler (isteğe bağlı)
    • Kısıtlamaya geçilmesi gereken parametreleri ve değerleri tanımlar. Her değerin Kısıtlama şablonu CRD'sinde mevcut olması gerekir.

EnforceOPAConstraint örneği

Örnek: Kubernetes'te kapsayıcı CPU ve bellek kaynak sınırlarını ayarlamak için Gatekeeper v3 erişim denetimi kuralı.

"if": {
    "allOf": [
        {
            "field": "type",
            "in": [
                "Microsoft.ContainerService/managedClusters",
                "AKS Engine"
            ]
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "enforceOPAConstraint",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/constraint.yaml",
        "values": {
            "cpuLimit": "[parameters('cpuLimit')]",
            "memoryLimit": "[parameters('memoryLimit')]"
        }
    }
}

EnforceRegoPolicy

Bu etki, ilke tanımı moduyla Microsoft.ContainerService.Data kullanılır. Rego ile tanımlanan Gatekeeper v2 erişim denetimi kurallarını Azure Kubernetes Service üzerinde Open Policy Agent'a (OPA) Azure Kubernetes Service.

Önemli

EnforceRegoPolicy etkisine sahip sınırlı önizleme ilkesi tanımları ve ilgili Kubernetes Service kategorisi kullanım dışıdır. Bunun yerine, Kaynak Sağlayıcısı moduyla denetim ve reddetme etkilerini Microsoft.Kubernetes.Data kullanın.

EnforceRegoPolicy değerlendirmesi

Open Policy Agent erişim denetleyicisi, kümede yeni istekleri gerçek zamanlı olarak değerlendirir. Her 15 dakikada bir kümenin tam taraması tamamlanır ve sonuçlar kümeye Azure İlkesi.

EnforceRegoPolicy özellikleri

EnforceRegoPolicy etkisinin details özelliği, Gatekeeper v2 erişim denetimi kuralını açıklayan alt özelliklere sahiptir.

  • policyId (gerekli)
    • Rego erişim denetimi kuralına parametre olarak geçirilen benzersiz bir ad.
  • ilke (gerekli)
    • Rego erişim denetimi kuralının URI'lerini belirtir.
  • policyParameters (isteğe bağlı)
    • Rego ilkesine geçilen tüm parametreleri ve değerleri tanımlar.

EnforceRegoPolicy örneği

Örnek: AKS'de yalnızca belirtilen kapsayıcı görüntülerine izin vermek için Gatekeeper v2 erişim denetimi kuralı.

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.ContainerService/managedClusters"
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "EnforceRegoPolicy",
    "details": {
        "policyId": "ContainerAllowedImages",
        "policy": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/KubernetesService/container-allowed-images/limited-preview/gatekeeperpolicy.rego",
        "policyParameters": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]"
        }
    }
}

Değiştir

Oluşturma veya güncelleştirme sırasında abonelik veya kaynağa özellik veya etiket eklemek, güncelleştirmek veya kaldırmak için Modify kullanılır. CostCenter gibi kaynaklara etiket güncelleştirmek yaygın bir örnektir. Mevcut uyumlu olmayan kaynaklar bir düzeltme göreviyle düzeltebilirsiniz. Tek bir Değişiklik kuralında herhangi bir sayıda işlem olabilir.

Modify tarafından aşağıdaki işlemler de desteklemektedir:

  • Kaynak etiketlerini ekleyin, değiştirin veya kaldırın. Etiketler için, hedef kaynak bir kaynak mode grubu olmadığı sürece Bir Değiştir ilkesi Dizinli olarak ayarlanmış olması gerekir.
  • Sanal makinelerin ve sanal makine ölçek kümelerinin yönetilen kimlik türü ( identity.type ) değerini ekleyin veya değiştirin.
  • Belirli diğer adların (önizleme) değerlerini ekleyin veya değiştirin.
    • Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } komutunu kullanma içinde Azure PowerShell 4.6.0 veya daha yüksek bir değere sahip olur.

Önemli

Etiketleri yönetiyorsanız Değiştir olarak Ekle yerine Değiştir'in kullanılması ek işlem türleri ve mevcut kaynakları düzeltme olanağı sağlar. Ancak yönetilen kimlik oluşturamadıysanız veya Değiştir henüz kaynak özelliği için diğer adı desteklenmiyorsa Ekle önerilir.

Değerlendirmeyi değiştirme

Kaynak oluşturma veya güncelleştirme sırasında istek bir Kaynak Sağlayıcısı tarafından işlenmeden önce değerlendirmeleri değiştirme. İlke kuralının if koşulu karşı olduğunda, Modify işlemleri istek içeriğine uygulanır. Her Modify işlemi, ne zaman uygulanıyor olduğunu belirleyen bir koşul belirterek. False olarak değerlendirilen koşullarla işlemler atlanır.

Bir diğer ad belirtilirse, Modify işlemi istek içeriğini kaynak sağlayıcısının reddetmesini sağlayacak şekilde değiştirmez emin olmak için aşağıdaki ek denetimler gerçekleştirilir:

  • Diğer adın eşle olduğu özellik, isteğin API sürümünde 'Değiştirilebilir' olarak işaretlenir.
  • Modify işleminde belirteç türü, isteğin API sürümündeki özelliğin beklenen belirteç türüyle eştir.

Bu denetimlerden biri başarısız olursa, ilke değerlendirmesi belirtilen conflictEffect'e geri döner.

Önemli

Eşlenen özelliğin 'Değiştirilebilir' olmayan API sürümlerini kullanarak isteklerin başarısız olduğunu önlemek için diğer adlar içeren tanımları değiştirme özelliğinin denetim çakışması etkisini kullanması önerilir. Aynı diğer ad API sürümleri arasında farklı davranırsa, koşullu değiştirme işlemleri her API sürümü için kullanılan değiştirme işlemi belirlemek için kullanılabilir.

Modify etkisini kullanan bir ilke tanımı, değerlendirme döngüsünün bir parçası olarak çalıştır olduğunda, zaten mevcut olan kaynaklarda değişiklik yapmaz. Bunun yerine, if koşuluna uygun herhangi bir kaynağı uyumlu değil olarak işaretler.

Özellikleri değiştirme

Modify etkisinin details özelliği, düzeltme için gereken izinleri ve etiket değerlerini eklemek, güncelleştirmek veya kaldırmak için kullanılan işlemleri tanımlayan tüm alt özelliklere sahiptir.

  • roleDefinitionIds (gerekli)
  • conflictEffect (isteğe bağlı)
    • Birden fazla ilke tanımı aynı özelliği değiştirirse veya Modify işlemi belirtilen diğer ad üzerinde çalışmazsa, hangi ilke tanımının "kazanır" olduğunu belirler.
      • Yeni veya güncelleştirilmiş kaynaklar için reddetmeye sahip ilke tanımı önceliklidir. Denetimli ilke tanımları tüm işlemleri atlar. Birden fazla ilke tanımı reddetmeye sahipse, istek çakışma olarak reddedilir. Tüm ilke tanımlarının denetimi varsa, çakışan ilke tanımlarının işlemlerinin hiçbiri işlenmez.
      • Mevcut kaynaklar için, birden fazla ilke tanımı reddederse, uyumluluk durumu Çakışma olur. Bir veya daha az ilke tanımı reddederse, her atama uyumlu olmayan bir uyumluluk durumu döndürür.
    • Kullanılabilir değerler: Denetim, reddetme, devre dışı.
    • Varsayılan değer reddedildi.
  • işlemler (gerekli)
    • Eşleşen kaynaklarda tamamlanacak tüm etiket işlemlerinin dizisi.
    • Özellikler:
      • işlem (gerekli)
        • Eşleşen bir kaynakta hangi eylemin yapılacağını tanımlar. Seçenekler şunlardır: Addorreplace, Add, Remove. Ekleme efektine benzer şekilde davranır.
      • alan (gerekli)
        • Eklenecek, değiştirilecek veya kaldırılacak etiket. Etiket adları diğer alanlariçin aynı adlandırma kuralına uymalıdır.
      • değer (isteğe bağlı)
        • Etiketi ayarlanacak değer.
        • Işlem addorreplace veya Add ise bu özellik gereklidir.
      • koşul (isteğe bağlı)
        • Doğru veya yanlış olarak değerlendirilen ilke işlevleriyle bir Azure ilke dili ifadesi içeren bir dize.
        • Aşağıdaki Ilke işlevlerini desteklemez: field() , resourceGroup() , subscription() .

İşlemleri değiştirme

Operations özelliği dizisi, birkaç etiketi tek bir ilke tanımından farklı şekillerde değiştirmeyi mümkün kılar. Her işlem, işlem, alan ve değer özelliklerinden oluşur. İşlem düzeltme görevinin etiketlere ne yaptığını belirler, alan hangi etiketin değiştirilmekte olduğunu belirler ve değer bu etiketin yeni ayarını tanımlar. Aşağıdaki örnekte aşağıdaki etiket değişiklikleri yapılır:

  • environmentEtiketi, farklı bir değerle zaten mevcut olsa bile "test" olarak ayarlar.
  • Etiketi kaldırır TempResource .
  • Etiketi, Dept ilke atamasında yapılandırılan deptname ilke parametresi olarak ayarlar.
"details": {
    ...
    "operations": [
        {
            "operation": "addOrReplace",
            "field": "tags['environment']",
            "value": "Test"
        },
        {
            "operation": "Remove",
            "field": "tags['TempResource']",
        },
        {
            "operation": "addOrReplace",
            "field": "tags['Dept']",
            "value": "[parameters('DeptName')]"
        }
    ]
}

Operation özelliği aşağıdaki seçeneklere sahiptir:

İşlem Açıklama
addOrReplace Özellik veya etiket farklı bir değerle zaten var olsa bile, tanımlı özelliği veya etiketi ve değeri kaynağa ekler.
Ekle Kaynağa tanımlı özelliği veya etiketi ve değeri ekler.
Kaldır Kaynaktaki tanımlı özelliği veya etiketi kaldırır.

Örnekleri Değiştir

Örnek 1: etiketi ekleyin environment ve var olan environment etiketleri "test" ile değiştirin:

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "operations": [
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "Test"
            }
        ]
    }
}

Örnek 2: etiketi kaldırın env ve environment etiketi ekleyin ya da varolan environment etiketleri parametreli bir değerle değiştirin:

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "conflictEffect": "deny",
        "operations": [
            {
                "operation": "Remove",
                "field": "tags['env']"
            },
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "[parameters('tagValue')]"
            }
        ]
    }
}

Örnek 3: bir depolama hesabının blob ortak erişimine izin vermediğinden, değiştirme işleminin yalnızca API sürümü daha büyük veya ' 2019-04-01 ' değerine eşit olan istekler değerlendirilirken uygulanmasını sağlayın:

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
        ],
        "conflictEffect": "audit",
        "operations": [
            {
                "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
                "operation": "addOrReplace",
                "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
                "value": false
            }
        ]
    }
}

İlke tanımlarını katmanlama

Bir kaynak, birkaç atamadan etkilenebilir. Bu atamalar aynı kapsamda veya farklı kapsamlardadır olabilir. Bu atamaların her biri de tanımlı farklı bir etkiye sahip olabilir. Her ilke için koşul ve efekt bağımsız olarak değerlendirilir. Örneğin:

  • İlke 1
    • Kaynak konumunu ' westus ' olarak kısıtlar
    • A aboneliğine atandı
    • Reddetme etkisi
  • İlke 2
    • Kaynak konumunu ' eastus ' olarak kısıtlar
    • A aboneliği içindeki kaynak grubu B 'ye atandı
    • Denetim etkisi

Bu kurulum aşağıdaki sonuca neden olur:

  • ' Eastus ' içindeki kaynak grubu B 'de bulunan herhangi bir kaynak, ilke 2 ile uyumlu ve ilke 1 ile uyumlu değil
  • Kaynak grubu B 'de ' eastus ' içinde olmayan herhangi bir kaynak, ilke 2 ile uyumlu değil ve ' westus ' içinde değilse ilke 1 ile uyumlu değil
  • ' Westus ' içinde olmayan abonelikte bulunan yeni kaynaklar ilke 1 tarafından reddedildi
  • A aboneliği ve ' westus ' içindeki kaynak grubu B 'deki tüm yeni kaynaklar, ilke 2 ' de oluşturulur ve uyumlu değildir

İlke 1 ve ilke 2 ' nin reddetme etkisi varsa, durum şu şekilde değişir:

  • Kaynak grubu B 'de ' eastus ' içinde olmayan herhangi bir kaynak, ilke 2 ile uyumlu değil
  • Kaynak grubu B 'de ' westus ' içinde olmayan herhangi bir kaynak, ilke 1 ile uyumlu değil
  • ' Westus ' içinde olmayan abonelikte bulunan yeni kaynaklar ilke 1 tarafından reddedildi
  • A aboneliğinin B kaynak grubundaki tüm yeni kaynaklar reddedildi

Her atama tek tek değerlendirilir. Bu nedenle, bir kaynağın kapsamdaki farklılıklar arasından bir boşluk ile bir kaynak için bir fırsat yoktur. Katman ilkesi tanımlarının net sonucu, en çok kısıtlayıcı olarak kabul edilir. Örnek olarak, hem ilke 1 hem de 2 bir reddetme efektine sahipse, çakışan ve çakışan ilke tanımları tarafından bir kaynak engellenir. Hala hedef kapsamda oluşturulacak kaynak gerekiyorsa, doğru ilke atamalarının doğru kapsamları etkilediğini doğrulamak için her atamadaki dışlamaları gözden geçirin.

Sonraki adımlar