Aracılığıyla paylaş


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 özellikler 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ğere sahip 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 efekti, roleDefinitionIds ve işlemleri tanımlayan policyRule.then.details bloğunu gerektirir. Bu parametreler Azure İlkesi etiketi eklemek ve kaynağı düzeltmek ve kullanılacak işlemi değiştirmek için hangi rollerin gerekli olduğunu bildirir. Bu örnekte, etiketi ve değerini ayarlamak için ekleme işlemi ve parametreleri kullanılır.

Örnek 2: Karmaşık efekt

Bu ilke tanımı, yayımcı ve tür parametrelerinde tanımlanan bir uzantı mevcut olmadığında her sanal makineyi denetler. Tanımlanan parametrelerle eşleşen bir örneğin var olup olmadığını görmek için 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 için policyRule.then.details bloğunun hem bir türü hem de aranacak existenceCondition öğesini tanımlaması gerekir. 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ımlanır.

Sonraki adımlar