Trabajando con Azure Resource Policies desde el CLI

Como ya comenté, Azure Resource Manager incluye la opción de definir políticas a la hora de crear recursos permitiéndonos fijar una serie de condiciones como el nombre que tienen que tener el recurso, la región donde se despliega o las etiquetas que incluye.

En un primer lugar, las políticas estaban soportadas a través de la API REST o Powershell pero no con el Azure CLI. Esto ha sido algo bastante común con anterioridad; sin embargo, la tan deseada paridad entre ambas formas de gestionar los recursos en Azure está haciéndose realidad. Ya es posible trabajar también con las políticas de recursos desde el CLI aunque la documentación no lo incluya. He realizado un pull request con los detalles de cómo hacerlo para que se incluya; sin embargo, mientras tanto podéis irlo probando de la siguiente manera

Crear la definición de la política

El subcomando para gestionar la creación de las políticas es policy definition. En el ejemplo inferior vemos cómo definir una nueva política que bloquee la creación de recursos fuera de los datacenters europeos.

azure policy definition create --name regionPolicyDefinition --description "Policy to allow resource creation only in certain regions" --policy-string '{	
  "if" : {
    "not" : {
      "field" : "location",
      "in" : ["northeurope" , "westeurope"]
	}
  },
  "then" : {
    "effect" : "deny"
  }
}'

Si en lugar de incluir la definición de la política preferís referenciar un fichero .json donde está guardada, el comando es muy similar.

azure policy definition create --name regionPolicyDefinition --description "Policy to allow resource creation only in certain regions" --policy "path-to-policy-json-on-disk"

Asignación de la políticas

Una vez definida la política es necesario que elijamos contra qué queremos aplicarla. En este caso, lo podremos hacer con el subcomando policy assignment

azure policy assignment create --name regionPolicyAssignment --policy-definition-id /subscriptions/########-####-####-####-############/providers/Microsoft.Authorization/policyDefinitions/<policy-name> --scope /subscriptions/########-####-####-####-############/resourceGroups/<resource-group-name>

Es posible obtener el valor del parámetro policy-definition-id a través del propio CLI en el caso de que no lo conozcas de memoria de la siguiente manera:

azure policy definition show <policy-name>

Para eliminar una asignación realizada previamente, es posible realizarlo de forma similar de la siguiente manera:

azure policy assignment remove --name regionPolicyAssignment --ccope /subscriptions/########-####-####-####-############/resourceGroups/<resource-group-name>

De forma general, si necesitas obtener información de la definición o asignación de una política, modificarla o eliminarla es posible hacerlo siempre con los subcomandos get, change o remove respectivamente.

Monitorización de los eventos de auditoría relacionados con políticas

Para finalizar, si queremos revisar los eventos registrados en nuestros logs relacionados con las políticas de recursos que hemos definido es posible realizarlo también a través del CLI. Para trabajar más fácil con la salida en JSON que nos devuelve, es posible que nos interese la utilidad jq.

Para revisar por ejemplo todas las peticiones que han sido denegadas por una de nuestras políticas lo podremos hacer de la siguiente manera:

azure group log show ExampleGroup --json | jq ".[] | select(.operationName.value == \"Microsoft.Authorization/policies/deny/action\")"

Si por el contrario, nos interesan únicamente los eventos que hemos indicado que queden auditados, lo podremos hacer así

azure group log show ExampleGroup --json | jq ".[] | select(.operationName.value == \"Microsoft.Authorization/policies/audit/action\")"

Si queréis saber más sobre las políticas de recursos recordad que en la documentación de Azure tenéis los detalles

Leave a Reply

Your email address will not be published. Required fields are marked *