Share via


Azure İlkesi deseni: efektler

Azure İlkesi, hizmetin uyumlu olmayan kaynaklara nasıl tepki olduğunu belirleyen birçok etkiye sahiptir. Bazı efektler basittir ve ilke tanımında ek özellik gerektirmezken, diğerleri birkaç özellik gerektirir.

Örnek 1: Basit efekt

Bu ilke tanımı, tagName parametresinde tanımlanan etiketin değerlendirilen kaynakta mevcut olup olmadığını denetler. Etiket henüz yoksa, tagValue parametresindeki değeriyle etiketi eklemek için değiştirme efekti tetiklenir.

{
    "properties": {
        "displayName": "Add a tag to resource groups",
        "policyType": "BuiltIn",
        "mode": "All",
        "description": "Adds the specified tag and value when any resource group missing this tag is created or updated. Existing resource groups can be remediated by triggering a remediation task. If the tag exists with a different value it will not be changed.",
        "metadata": {
            "version": "1.0.0",
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            },
            "tagValue": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Value",
                    "description": "Value of the tag, such as 'production'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
                    },
                    {
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "exists": "false"
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "add",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[parameters('tagValue')]"
                    }]
                }
            }
        }
    }
}

Örnek 1: Açıklama

"effect": "modify",
"details": {
    "roleDefinitionIds": [
        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [{
        "operation": "add",
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "value": "[parameters('tagValue')]"
    }]
}

Değişiklik etkisi, roleDefinitionIds ve işlemleri tanımlayan policyRule.then.details bloğunu gerektirir. Bu parametreler Azure İlkesi etiketi eklemek ve kaynağı düzeltmek için hangi rollerin gerektiğini ve hangi değiştirme işleminin kullanılacağını bildirir. Bu örnekte, etiketi ve değerini ayarlamak için ekleme işlemi ve parametreleri kullanılır.

Örnek 2: Karmaşık etki

Bu ilke tanımı, yayımcı ve tür parametrelerinde tanımlanan bir uzantının mevcut olmaması için her sanal makineyi denetler. Tanımlanan parametrelerle eşleşen bir örneğin var olup olmadığını görmek üzere sanal makineyle ilgili bir kaynağı denetlemek için auditIfNotExists kullanır. Bu örnek uzantı türünü denetler.

{
    "type": "Microsoft.Authorization/policyDefinitions",
    "name": "audit-vm-extension",
    "properties": {
        "displayName": "Audit if extension does not exist",
        "description": "This policy audits if a required extension doesn't exist.",
        "parameters": {
            "publisher": {
                "type": "String",
                "metadata": {
                    "description": "The publisher of the extension",
                    "displayName": "Extension Publisher"
                }
            },
            "type": {
                "type": "String",
                "metadata": {
                    "description": "The type of the extension",
                    "displayName": "Extension Type"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Compute/virtualMachines"
                    },
                    {
                        "field": "Microsoft.Compute/imagePublisher",
                        "in": [
                            "MicrosoftWindowsServer"
                        ]
                    },
                    {
                        "field": "Microsoft.Compute/imageOffer",
                        "in": [
                            "WindowsServer"
                        ]
                    }
                ]
            },
            "then": {
                "effect": "auditIfNotExists",
                "details": {
                    "type": "Microsoft.Compute/virtualMachines/extensions",
                    "existenceCondition": {
                        "allOf": [{
                                "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                                "equals": "[parameters('publisher')]"
                            },
                            {
                                "field": "Microsoft.Compute/virtualMachines/extensions/type",
                                "equals": "[parameters('type')]"
                            }
                        ]
                    }
                }
            }
        }
    }
}

Örnek 2: Açıklama

"details": {
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "existenceCondition": {
        "allOf": [{
                "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                "equals": "[parameters('publisher')]"
            },
            {
                "field": "Microsoft.Compute/virtualMachines/extensions/type",
                "equals": "[parameters('type')]"
            }
        ]
    }
}

auditIfNotExists etkisi, hem tür hem de aranacak existenceCondition öğesini tanımlamak için policyRule.then.details bloğunu gerektirir. existenceCondition, eşleşen bir ilgili kaynağın mevcut olup olmadığını belirlemek için mantıksal işleçler gibi ilke dili öğelerini kullanır. Bu örnekte, her diğer ad için denetlenen değerler parametrelerde tanımlanmıştır.

Sonraki adımlar