Шаблон политики Azure: группирование определений политикиAzure Policy pattern: group policy definitions

Инициатива — это группа определений политики.An initiative is a group of policy definitions. Группируя связанные определения политики в один объект, можно создать одно назначение, которое было бы несколькими назначениями.By grouping related policy definitions into a single object, you can create a single assignment that would have been multiple assignments.

Пример определения инициативыSample initiative definition

Эта инициатива развертывает два определения политики, каждое из которых принимает параметры tagName и tagValue.This initiative deploys two policy definitions, each of which takes the tagName and tagValue parameters. Сама инициатива имеет два параметра: costCenterValue и productNameValue.The initiative itself has two parameters: costCenterValue and productNameValue. Эти параметры инициативы предоставляются каждому из сгруппированных определений политик.These initiative parameters are each provided to each of the grouped policy definitions. Такая конструкция максимально увеличивает повторное использование существующих определений политики, ограничивая при этом количество заданий, создаваемых для их реализации по мере необходимости.This design maximizes reuse of the existing policy definitions while limiting the number of assignments created to implement them as needed.

{
    "properties": {
        "displayName": "Billing Tags Policy Initiative",
        "description": "Specify cost Center tag and product name tag",
        "parameters": {
            "costCenterValue": {
                "type": "String",
                "metadata": {
                    "displayName": "required value for Cost Center tag"
                }
            },
            "productNameValue": {
                "type": "String",
                "metadata": {
                    "displayName": "required value for product Name tag"
                }
            }
        },
        "policyDefinitions": [{
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            }
        ]
    }
}

ОбъяснениеExplanation

Параметры инициативыInitiative parameters

Инициатива может определять собственные параметры, которые затем передаются в определения групповых политик.An initiative can define it's own parameters that are then passed to the grouped policy definitions. В этом примере как costCenterValue, так и productNameValue определены как параметры инициативы.In this example, both costCenterValue and productNameValue are defined as initiative parameters. Значения предоставляются при назначении инициативы.The values are provided when the initiative is assigned.

"parameters": {
    "costCenterValue": {
        "type": "String",
        "metadata": {
            "displayName": "required value for Cost Center tag"
        }
    },
    "productNameValue": {
        "type": "String",
        "metadata": {
            "displayName": "required value for product Name tag"
        }
    }
},

Включает определения политикIncludes policy definitions

Каждое включаемое определение политики должно предоставлять массивы policyDefinitionId и Параметры, если определение политики принимает параметры.Each included policy definition must provide the policyDefinitionId and a parameters array if the policy definition accepts parameters. В приведенном ниже фрагменте определения включаемой политики принимается два параметра: tagName и tagValue.In the snippet below, the included policy definition takes two parameters: tagName and tagValue. tagName определяется с помощью литерала, но tagValue использует параметр costCenterValue, определенный инициативой.tagName is defined with a literal, but tagValue uses the parameter costCenterValue defined by the initiative. Эта сквозная передача значений улучшает повторное использование.This passthrough of values improves reuse.

{
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
    "parameters": {
        "tagName": {
            "value": "costCenter"
        },
        "tagValue": {
            "value": "[parameters('costCenterValue')]"
        }
    }
},

Дальнейшие действияNext steps