نمط نهج Azure: العلامات

⁩تعد العلامات⁧⁩ جزءًا مهمًا من إدارة وتنظيم والتحكم في موارد Azure. يتيح Azure Policy تكوين العلامات على مواردك الجديدة والحالية على نطاق واسع باستخدام⁧⁩ تأثير التعديل⁧⁩ ومهام⁧⁩ الإصلاح⁧⁩.

نموذج 1: معلمة العلامات

يستخدم تعريف النهج هذا معلمتين هما، ⁧⁩tagName⁧⁩ و⁧⁩tagValue⁧⁩، لتعيين ما يبحث عنه تعيين النهج على الموارد. يسمح هذا التنسيق باستخدام تعريف النهج لأي عدد من مجموعات اسم العلامة وقيمتها، مع الاحتفاظ بتعريف نهج واحد فقط.

ملاحظة

حيث يشبه نمط تعريف النهج هذا النمط في ⁧⁩نمط: معلمات - نموذج #1⁧⁩، يستخدم هذا النموذج ⁧⁩وضع⁧⁩⁧⁩الكل⁧⁩، ويستهدف مجموعات الموارد.

{
    "properties": {
        "displayName": "Add or replace a tag on resource groups",
        "mode": "All",
        "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
        "metadata": {
            "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'), ']')]",
                        "notEquals": "[parameters('tagValue')]"
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[parameters('tagValue')]"
                    }]
                }
            }
        }
    }
}

نموذج 1: الشرح

"properties": {
    "displayName": "Add or replace a tag on resource groups",
    "mode": "All",
    "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

في هذه العينة، يتم تعيين ⁧⁩الوضع⁧⁩ إلى ⁧⁩الكل⁧⁩؛ لأنه يستهدف مجموعة الموارد. في معظم الحالات، يجب تعيين ⁧⁩الوضع⁧⁩ إلى ⁧⁩مفهرس⁧⁩ عند العمل مع العلامات. لمزيدٍ من المعلومات، راجع ⁧⁩الأوضاع⁧⁩.

"if": {
    "allOf": [{
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[parameters('tagValue')]"
        }
    ]
},

في هذا الجزء من تعريف النهج، ⁧concat⁩ يجمع بين المعلمة ⁧⁩tagName⁧⁩ ذات المعلمة ⁧tags['name']⁩، والتنسيق الذي بدوره يجهز⁧⁩الحقل⁧⁩ لتقييم هذه العلامة ⁧⁩لعلامة المعلمةValue⁧⁩. نظرًا لاستخدام notEquals، إذا كانت tags[tagName]لا تساوي tagValue، فسيتم تشغيل تأثير التعديل.

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[parameters('tagValue')]"
}]

هنا، يتم استخدام نفس التنسيق لاستخدام قيم العلامات ذات المعلمات نت خلال عملية ⁧⁩addOrReplace⁧⁩لإنشاء أو تحديث العلامة إلى القيمة المطلوبة في مجموعة الموارد المقيمة.

نموذج 2: اكتساب قيمة العلامة من مجموعة الموارد

يستخدم تعريف النهج هذا ⁧⁩المعلمة tagName⁧⁩ لتحديد قيمة العلامة التي يجب أن تُكتسب من مجموعة الموارد الأصل.

{
    "properties": {
        "displayName": "Inherit a tag from the resource group",
        "mode": "Indexed",
        "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
        "metadata": {
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
                    },
                    {
                        "value": "[resourceGroup().tags[parameters('tagName')]]",
                        "notEquals": ""
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[resourceGroup().tags[parameters('tagName')]]"
                    }]
                }
            }
        }
    }
}

نموذج 2: الشرح

"properties": {
    "displayName": "Inherit a tag from the resource group",
    "mode": "Indexed",
    "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

في هذه العينة، يتم تعيين ⁧⁩الوضع⁧⁩على⁧⁩مفهرس⁧⁩؛ لأنه لا يستهدف مجموعة موارد، أو اشتراك على الرغم من حصوله على القيمة من مجموعة الموارد. لمزيدٍ من المعلومات، راجع ⁧⁩الأوضاع⁧⁩.

"if": {
    "allOf": [{
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
        },
        {
            "value": "[resourceGroup().tags[parameters('tagName')]]",
            "notEquals": ""
        }
    ]
},

⁩يستخدم policyRule.if⁧⁩⁧concat⁩ مثل نموذج ⁧⁩#1⁧⁩ لتقييم قيمة ⁧⁩tagName⁧⁩'؛ ولكن يستخدم ⁧resourceGroup()⁩ الدالة لمقارنتها بقيمة نفس العلامة على مجموعة الموارد الأصل. تتحقق الجملة الثانية هنا من أن العلامة الموجودة في مجموعة الموارد لها قيمة وليست خالية.

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[resourceGroup().tags[parameters('tagName')]]"
}]

هنا، القيمة التي يتم تعيينها إلى العلامة ⁧⁩tagName⁧⁩ على المورد تستخدم ⁧resourceGroup()⁩ الدالة أيضًا للحصول على القيمة من مجموعة الموارد الأصل. وبهذه الطريقة، يمكنك اكتساب العلامات من مجموعات الموارد الأصل. إذا قمت بالفعل بإنشاء المورد، ولكنك لم تقم بإضافة العلامة، يمكن لتعريف السياسة ⁧⁩ومهمة الإصلاح⁧⁩نفسهما تحديث الموارد الموجودة.

الخطوات التالية