Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo usar Azure Policy para etiquetar los recursos de un grupo de recursos de un clúster de ARO. El proceso implica la creación de una asignación de directiva y un clúster de ARO mediante la CLI de Azure.
Creación de archivos JSON
Con la CLI de Azure, sigue estos pasos para crear tres archivos JSON independientes en el directorio de trabajo actual:
Crea un archivo JSON denominado
rules.json
copiando y pegando el siguiente contenido:{ "if": { "anyOf": [ { "allOf": [ { "value": "[resourceGroup().name]", "equals": "[parameters('resourceGroupName')]" } ] }, { "allOf": [ { "field": "name", "equals": "[parameters('resourceGroupName')]" }, { "field": "type", "equals": "Microsoft.Resources/subscriptions/resourceGroups" } ] } ] }, "then": { "details": { "operations": [ { "condition": "[not(equals(parameters('tag0')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag0')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag0')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag1')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag1')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag1')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag2')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag2')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag2')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag3')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag3')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag3')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag4')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag4')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag4')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag5')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag5')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag5')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag6')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag6')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag6')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag7')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag7')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag7')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag8')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag8')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag8')['tag'][1]]" }, { "condition": "[not(equals(parameters('tag9')['tag'][0], ''))]", "field": "[concat('tags[', parameters('tag9')['tag'][0], ']')]", "operation": "addOrReplace", "value": "[parameters('tag9')['tag'][1]]" } ], "roleDefinitionIds": [ "/providers/Microsoft.Authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f" ] }, "effect": "modify" } }
Crea un archivo JSON denominado
param-defs.json
copiando y pegando el siguiente contenido:{ "tag0": { "type": "Object", "metadata": { "displayName": "tag0" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag1": { "type": "Object", "metadata": { "displayName": "tag1" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag2": { "type": "Object", "metadata": { "displayName": "tag2" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag3": { "type": "Object", "metadata": { "displayName": "tag3" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag4": { "type": "Object", "metadata": { "displayName": "tag4" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag5": { "type": "Object", "metadata": { "displayName": "tag5" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag6": { "type": "Object", "metadata": { "displayName": "tag6" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag7": { "type": "Object", "metadata": { "displayName": "tag7" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag8": { "type": "Object", "metadata": { "displayName": "tag8" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "tag9": { "type": "Object", "metadata": { "displayName": "tag9" }, "defaultValue": { "tag": [ "", "" ] }, "schema": { "type": "object", "properties": { "tag": { "type": "array", "items": { "type": "string" }, "maxItems": 2, "minItems": 2 } } } }, "resourceGroupName": { "type": "String", "metadata": { "displayName": "Resource Group Name", "description": "The name of the resource group whose resources you'd like to require the tag on" } } }
Crea un archivo JSON denominado
param-values.json
copiando, pegando y modificando el siguiente contenido:{ "tag0": { "value": { "tag": [ "<your tag key here>", "<your tag value here>" ] } }, "resourceGroupName": { "value": "<your ARO cluster's managed resource group name here>" } }
Este archivo JSON es el único de los tres archivos que se debe modificar. En el contenido, especifica los valores de las etiquetas que quieres aplicar a los recursos del clúster.
Importante
El contenido del archivo proporcionado anteriormente solo aporta un valor para el parámetro
tag0
. La directiva permite proporcionar hasta 10 etiquetas, por lo que si quieres establecer más de una etiqueta, agrega valores para los parámetros de la etiqueta 1 a la 9. No se admite la aplicación de más de 10 etiquetas a los recursos del grupo de recursos administrado.
Establecimiento de variables de entorno
Abre una sesión de shell y ejecuta los siguientes comandos para establecer las variables de entorno que se usarán en pasos posteriores:
export AZURE_SUBSCRIPTION_ID=<your Azure subscription ID here>
export POLICY_DEFINITION=<your policy definition name here>
export CLUSTER=<your ARO cluster name here>
export MANAGED_RESOURCE_GROUP=<your ARO cluster's managed resource group name here>
export POLICY_ASSIGNMENT="${POLICY_DEFINITION}-${CLUSTER}"
# This will be used to determine the region in which the policy assignment's managed identity is created.
# (See here for more info about the managed identity: https://learn.microsoft.com/en-us/azure/governance/policy/how-to/remediate-resources?tabs=azure-portal#configure-the-managed-identity)
export LOCATION=<the Azure region you want to use here>
Creación de la definición y asignación de directiva
Ejecuta el siguiente comando para crear la asignación de directiva:
az policy definition create -n $POLICY_DEFINITION \ --mode All \ --rules rules.json \ --params param-defs.json
Ejecute el siguiente comando para crear una asignación de directiva:
az policy assignment create -n $POLICY_ASSIGNMENT \ --policy $POLICY_DEFINITION \ --scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}" \ --location $LOCATION \ --mi-system-assigned \ --role "Tag Contributor" \ --identity-scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}" \ --params param-values.json
Creación del clúster de ARO
Sigue las instrucciones para crear un clúster de ARO. Asegúrate de pasar el parámetro --cluster-resource-group $MANAGED_RESOURCE_GROUP
al comando az aro create
al crear el clúster.
Nota:
La directiva no aplica ninguna etiqueta a la red virtual proporcionada por el usuario.
Corrección de las etiquetas mediante Azure Policy
Puedes corregir etiquetas asignadas previamente y agregar nuevas etiquetas mediante una tarea de corrección de Azure Policy.
Nota:
En estas instrucciones se da por hecho que has seguido los pasos anteriores para crear una asignación de directiva y un clúster, y que te encuentras en el directorio que contiene los archivos JSON creados en esos pasos.
Establece algunas variables de entorno que se usarán en pasos posteriores. Puedes omitir este paso si todavía estás en la misma sesión de shell que usaste para crear la asignación de directiva y el clúster:
export POLICY_DEFINITION=<your policy definition name here> export CLUSTER=<your ARO cluster name here> export POLICY_ASSIGNMENT="${POLICY_DEFINITION}-${CLUSTER}"
Abra el archivo
param-values.json
. Modifica los valores de los parámetros existentes y agrega nuevos valores de parámetro como quieras para especificar el nuevo conjunto de etiquetas que debe aplicar la directiva al ejecutar la tarea de corrección. Después, ejecuta el siguiente comando para actualizar los valores de parámetro:az policy assignment update -n $POLICY_ASSIGNMENT --params param-values.json
Desencadena la tarea de corrección:
az policy remediation create --resource-group $MANAGED_RESOURCE_GROUP --name myRemediation --policy-assignment $POLICY_ASSIGNMENT
Permite que el tiempo de la tarea de corrección se ejecute y observa las etiquetas que se actualizan en el grupo de recursos administrado y sus recursos.
Nota:
Las tareas de corrección nunca quitan etiquetas, solo las agregan o actualizan.