Obtención de datos de cumplimiento de los recursos de Azure
Una de las ventajas más grandes de Azure Policy es la información y los controles que proporciona sobre los recursos de una suscripción o grupo de administración de suscripciones. Este control puede usarse para evitar que los recursos se creen en una ubicación incorrecta, forzar un uso común y coherente de las etiquetas, o auditar los recursos existentes para ver si las opciones y configuraciones son apropiadas. En todos los casos, los datos se generan en Azure Policy para que pueda conocer el estado de cumplimiento de su entorno.
Antes de revisar los datos de cumplimiento, es importante comprender los estados de cumplimiento en Azure Policy.
Hay varias maneras de acceder a la información de cumplimiento generada por la directiva y las asignaciones de iniciativa:
- Mediante Azure Portal
- Mediante scripting de línea de comandos
- Mediante la visualización de registros de Azure Monitor
- Mediante las consultas de Azure Resource Graph
Antes de pasar a los métodos que informan sobre el cumplimiento, veamos cuándo se actualiza la información de cumplimiento y la frecuencia y eventos que desencadenan un ciclo de evaluación.
Desencadenadores de evaluación
Los resultados de un ciclo de evaluación completo están disponibles en el proveedor de recursos Microsoft.PolicyInsights
por medio de las operaciones PolicyStates
y PolicyEvents
. Para más información sobre las operaciones de la API REST Azure Policy Insights, consulte Azure Policy Insights.
Las evaluaciones de directivas asignadas e iniciativas se producen como resultado de varios eventos:
Una directiva o iniciativa se asigna recientemente a un ámbito. La asignación tarda unos cinco minutos en aplicarse al ámbito definido y, luego, comienza el ciclo de evaluación de los recursos aplicables con respecto a la directiva o iniciativa recién asignadas. En función de los efectos usados, los recursos se marcan como compatibles, no compatibles, exentos o desconocidos. Una directiva o iniciativa grande evaluada en un ámbito amplio de recursos puede tardar bastante tiempo, por lo que no hay una predicción de cuándo se completará el ciclo de evaluación. Una vez completado, los resultados de cumplimiento actualizados están disponibles en el portal y en los SDK.
Una directiva o iniciativa que ya está asignada a un ámbito se actualiza. El ciclo de evaluación y control de tiempo en este escenario es el mismo que para una nueva asignación a un ámbito.
Un recurso se implementa o actualiza en un ámbito con una asignación mediante Azure Resource Manager, la API REST o un SDK compatible. En este escenario, el evento de efecto (anexar, auditar, denegar, implementar) y la información de estado de cumplimiento para el recurso individual están disponibles en el portal y en los SDK unos 15 minutos más tarde. Este evento no causa una evaluación de otros recursos.
Una suscripción (tipo de recurso
Microsoft.Resources/subscriptions
) se crea o mueve dentro de una jerarquía de grupos de administración con una definición de directiva asignada que tiene como destino el tipo de recurso de suscripción. La evaluación de los efectos admitidos de la suscripción (audit, auditIfNotExist, deployIfNotExists, modify), el registro y cualquier acción de corrección tarda aproximadamente 30 minutos.Se crea, actualiza o elimina una directiva de exención. En este escenario, se evalúa el ámbito de exención definido en la asignación correspondiente.
Ciclo de evaluación de cumplimiento estándar. Una vez cada 24 horas, las asignaciones se vuelven a evaluar automáticamente. Una directiva o iniciativa grande de muchos recursos puede tardar bastante tiempo, por lo que no hay una predicción de cuándo se completará el ciclo de evaluación. Una vez completado, los resultados de cumplimiento actualizados están disponibles en el portal y en los SDK.
Un recurso administrado actualiza el proveedor de recursos Configuración de la máquina con los detalles de cumplimiento.
Examen a petición
Nota
Por naturaleza, Azure Policy exime a todos los recursos del proveedor de recursos (RP) Microsoft.Resources
de la evaluación de directivas con la excepción de las suscripciones y los grupos de recursos, que sí se pueden evaluar.
Examen de evaluación a petición
Un examen de evaluación de una suscripción o un grupo de recursos se puede iniciar con la CLI de Azure, Azure PowerShell, una llamada a la API de REST o mediante la acción de GitHub del examen de cumplimiento de Azure Policy. Este examen es un proceso asincrónico.
Nota
No todos los proveedores de recursos de Azure admiten exámenes de evaluación a petición. Por ejemplo, actualmente Azure Virtual Network Manager (AVNM) no admite desencadenadores manuales ni el ciclo de evaluación de cumplimiento de directivas estándar (exámenes diarios).
Detección de evaluaciones a petición: acción de GitHub
Use la acción de Azure Policy de análisis de cumplimiento para desencadenar un análisis de evaluación a petición desde el flujo de trabajo de GitHub en uno o varios recursos, grupos de recursos o suscripciones, y para canalizar el flujo de trabajo en función del estado de cumplimiento de los recursos. También puede configurar el flujo de trabajo para que se ejecute a una hora programada, y así poder obtener el estado de cumplimiento más reciente en un momento adecuado. Opcionalmente, Acciones de GitHub puede generar un informe sobre el estado de cumplimiento de los recursos examinados para analizarlos más en profundidad o archivarlos.
En el ejemplo siguiente se ejecuta el examen de cumplimiento de una suscripción.
on:
schedule:
- cron: '0 8 * * *' # runs every morning 8am
jobs:
assess-policy-compliance:
runs-on: ubuntu-latest
steps:
- name: Login to Azure
uses: azure/login@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Para obtener más información y ejemplos del flujo de trabajo, consulte las Acciones de GitHub para el repositorio de exámenes de cumplimiento de Azure Policy.
Análisis de evaluación a petición: CLI de Azure
El examen de cumplimiento se inicia con el comando az policy state trigger-scan.
De forma predeterminada, az policy state trigger-scan
inicia una evaluación de todos los recursos de la suscripción actual. Para iniciar una evaluación en un grupo de recursos específico, use el parámetro resource-group
. En el ejemplo siguiente se inicia un examen de cumplimiento de la suscripción actual para el grupo de recursos MyRG:
az policy state trigger-scan --resource-group "MyRG"
Puede optar por no esperar a que se complete el proceso asincrónico antes de continuar con el parámetro no-wait
.
Análisis de evaluación a petición: Azure PowerShell
El examen de cumplimiento se inicia con el cmdlet Start-AzPolicyComplianceScan.
De forma predeterminada, Start-AzPolicyComplianceScan
inicia una evaluación de todos los recursos de la suscripción actual. Para iniciar una evaluación en un grupo de recursos específico, use el parámetro ResourceGroupName
. En el ejemplo siguiente se inicia un examen de cumplimiento de la suscripción actual para el grupo de recursos MyRG:
Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'
Puede hacer que PowerShell espere a que se complete la llamada asincrónica antes de proporcionar la salida de resultados o hacer que se ejecute en segundo plano como un trabajo. Para usar un trabajo de PowerShell para ejecutar el examen de cumplimiento en segundo plano, use el parámetro AsJob
y establezca el valor en un objeto, como $job
en este ejemplo:
$job = Start-AzPolicyComplianceScan -AsJob
Para comprobar el estado del trabajo, compruebe el objeto $job
. El trabajo es del tipo Microsoft.Azure.Commands.Common.AzureLongRunningJob
. Use Get-Member
en el objeto $job
para ver las propiedades y los métodos disponibles.
Mientras se ejecuta el examen de cumplimiento, la comprobación del objeto $job
genera resultados como los siguientes:
$job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Long Running O... AzureLongRunni... Running True localhost Start-AzPolicyCompliance...
Cuando se completa el examen de cumplimiento, la propiedad State
cambia a Completado.
Examen de evaluación a petición: REST
En cuanto proceso asincrónico, el punto de conexión de REST que inicia el examen no espera a que esté completo para responder. En su lugar, proporciona un URI para consultar el estado de la evaluación solicitada.
En cada identificador URI de la API REST, hay variables usadas que se deben reemplazar por sus propios valores:
{YourRG}
: reemplácelo por el nombre del grupo de recursos{subscriptionId}
: reemplácelo por el identificador de suscripción
El examen admite la evaluación de recursos de una suscripción o de un grupo de recursos. Inicie un examen para el ámbito con un comando POST de API REST mediante las siguientes estructuras de URI:
Subscription
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
Resource group
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
La llamada devuelve un estado 202 - Aceptado. En el encabezado de la respuesta se incluye una propiedad location
con el formato siguiente:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01
{ResourceContainerGUID}
se genera estáticamente para el ámbito solicitado. Si un ámbito ya está ejecutando un examen a petición, no se iniciará un nuevo examen. En su lugar, se proporciona a la nueva solicitud el mismo URI de {ResourceContainerGUID}
de location
para el estado. Un comando GET de API REST en el URI location
devolverá una respuesta 202 - Aceptado mientras la evaluación esté en curso. Una vez completado el examen de evaluación, devuelve un estado de 200 OK. El cuerpo de un examen completo es una respuesta JSON con el estado:
{
"status": "Succeeded"
}
Examen de evaluación a petición: Visual Studio Code
La extensión de Azure Policy para Visual Studio Code puede ejecutar un examen de evaluación para un recurso específico. Este examen es un proceso sincrónico, a diferencia de los métodos de Azure PowerShell y REST. Para obtener más información y conocer los pasos, consulte Evaluación a petición con la extensión VS Code.
Portal
Azure Portal presenta de forma gráfica la visualización y el reconocimiento del estado de cumplimiento de normas en su entorno. En la página Directiva, la opción Información general proporciona detalles sobre el cumplimiento de directivas e iniciativas por parte de los ámbitos disponibles. Junto con el recuento y el estado de cumplimiento por asignación, contiene un gráfico que muestra el cumplimiento durante los últimos siete días. La página Cumplimiento contiene gran parte de esta misma información (excepto el gráfico), pero ofrece más opciones de filtrado y ordenación.
Dado que una directiva o iniciativa se puede asignar a distintos ámbitos, la tabla incluye el ámbito de cada asignación y el tipo de definición que se asignó. También se proporciona el número de directivas y recursos no compatibles para cada asignación. Al seleccionar una directiva o una iniciativa de la tabla, se proporciona más información sobre el cumplimiento de esa asignación en particular.
La lista de recursos de la pestaña Compatibilidad de recursos muestra el estado de evaluación de los recursos existentes para la asignación actual. El valor predeterminado de la pestaña es No compatible, pero se puede filtrar. Los eventos (anexar, auditar, denegar, implementar, modificar) que desencadena la solicitud para crear un recurso se muestran en la pestaña Eventos.
En cuanto a los recursos del modo de proveedor de recursos, en la pestaña Resource compliance (Compatibilidad de recursos), si selecciona el recurso o hace clic con el botón derecho en la fila y selecciona View compliance details (Ver detalles de cumplimiento), se abren los detalles de cumplimiento de los componentes. Esta página también ofrece pestañas para ver las directivas que se asignan a este recurso, eventos, eventos de componentes e historial de cambios.
De vuelta a la página de cumplimiento de recursos, seleccione y mantenga pulsada (o haga clic con el botón derecho) la fila del evento sobre el que quiere recopilar información más detallada y seleccione Show activity logs (Mostrar los registros de actividad). Se abre la página de registro de actividad y se filtra previamente para mostrar detalles de la asignación y los eventos. El registro de actividad proporciona contexto e información sobre esos eventos.
Nota
Los resultados de cumplimiento se pueden exportar desde el portal mediante consultas de Azure Resource Graph.
Línea de comandos
La misma información que está disponible en el portal se puede recuperar mediante la API REST (incluso con ARMClient), Azure PowerShell y la CLI de Azure. Para detalles completos sobre la API REST, consulte la referencia de Azure Policy. Las páginas de referencia de la API REST tienen un botón verde Probarlo en cada operación que le permite probarla directamente en el navegador.
Use ARMClient o una herramienta similar para tratar la autenticación en Azure para los ejemplos de la API REST.
Resumen de resultados
Con la API REST, el resumen se puede realizar por contenedor, definición o asignación. Este es un ejemplo de resumen en el nivel de suscripción mediante Resumen de la suscripción de Azure Policy Insights:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
La salida resume la suscripción. En la salida del ejemplo siguiente, el cumplimiento resumido se encuentra en value.results.nonCompliantResources
y value.results.nonCompliantPolicies
. Esta solicitud proporciona más detalles, incluida cada asignación que compone los números no compatibles y la información de definición de cada asignación. Cada objeto de directiva de la jerarquía proporciona un elemento queryResultsUri
que puede utilizarse para obtener detalles adicionales en ese nivel.
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
"policySetDefinitionId": "",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyDefinitions": [
{
"policyDefinitionReferenceId": "",
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effect": "deny",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
"nonCompliantResources": 15
}
}
]
}
]
}
]
}
Consulta de recursos
En el ejemplo anterior, value.policyAssignments.policyDefinitions.results.queryResultsUri
proporciona un URI de ejemplo para todos los recursos no compatibles para una definición de directiva específica. En el valor $filter
, ComplianceState es igual (eq) a NonCompliant
, se especifica PolicyAssignmentId
para la definición de directiva y, a continuación, el propio PolicyDefinitionId. La razón para incluir PolicyAssignmentId
en el filtro es que PolicyDefinitionId
podría existir en varias asignaciones de directivas o de iniciativas con diversos ámbitos. Al especificar tanto el PolicyAssignmentId
como el PolicyDefinitionId
, podemos ser explícitos en los resultados que estamos buscando. Anteriormente, para PolicyStates
usamos latest
, que establece automáticamente un período de tiempo de from
y to
de las últimas 24 horas.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'
La siguiente respuesta de ejemplo se ha recortado a un único recurso no compatible para mayor brevedad. La respuesta detallada tiene varios elementos de datos sobre el recurso, la directiva (o iniciativa) y la asignación. Tenga en cuenta que también puede ver qué parámetros de asignación se han pasado a la definición de directiva.
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 15,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"timestamp": "2018-05-19T04:41:09Z",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effectiveParameters": "",
"ComplianceState": "NonCompliant",
"subscriptionId": "{subscriptionId}",
"resourceType": "/Microsoft.Compute/virtualMachines",
"resourceLocation": "westus2",
"resourceGroup": "RG-Tags",
"resourceTags": "tbd",
"policyAssignmentName": "37ce239ae4304622914f0c77",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
"policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
"policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
"policyDefinitionAction": "deny",
"policyDefinitionCategory": "tbd",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionCategory": "",
"policySetDefinitionParameters": "",
"managementGroupIds": "",
"policyDefinitionReferenceId": ""
}
]
}
Ver eventos
Cuando se crea o actualiza un recurso, se genera un resultado de evaluación de directiva. Los resultados se denominan eventos de directiva. Utilice el siguiente URI para ver eventos recientes de directiva asociados a la suscripción.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
Los resultados deben tener una apariencia similar al ejemplo siguiente:
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
"NumAuditEvents": 16
}
]
}
Para más información sobre cómo consultar eventos de directiva, consulte el artículo de referencia sobre los estados de Azure Policy.
Azure CLI
El grupo de comandos de la CLI de Azure para Azure Policy cubre la mayoría de las operaciones que están disponibles en REST o Azure PowerShell. Para obtener la lista completa de los comandos disponibles, consulte la Información general sobre Azure Policy en la CLI de Azure.
Ejemplo: Obtener el resumen de estado para la directiva asignada superior con el mayor número de recursos no compatibles.
az policy state summarize --top 1
La parte superior de la respuesta es similar a la de este ejemplo:
{
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"odataid": null,
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyDefinitions": [
{
"effect": "audit",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"results": {
"nonCompliantPolicies": null,
"nonCompliantResources": 398,
"policyDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"policyGroupDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
"resourceDetails": [
{
"complianceState": "noncompliant",
"count": 398
},
{
"complianceState": "compliant",
"count": 4
}
]
}
}
],
...
Ejemplo: Obtener el registro de estado para el recurso evaluado más recientemente (el valor predeterminado es por marca de tiempo en orden descendente).
az policy state list --top 1
[
{
"complianceReasonCode": "",
"complianceState": "Compliant",
"effectiveParameters": "",
"isCompliant": true,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
"policyAssignmentName": "SecurityCenterBuiltIn",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "auditifnotexists",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "security center",
"policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "",
"resourceId": "/subscriptions/{subscriptionId}",
"resourceLocation": "",
"resourceTags": "tbd",
"resourceType": "Microsoft.Resources/subscriptions",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.903433+00:00"
}
]
Ejemplo: Obtener los detalles de todos los recursos de red virtual no compatibles.
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Ejemplo: Obtener eventos relacionados con recursos de red virtual no compatibles que se produjeron después de una fecha concreta.
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Azure PowerShell
El módulo Azure PowerShell para Azure Policy está disponible en la Galería de PowerShell como Az.PolicyInsights. Con el uso de PowerShellGet, puede instalar el módulo con Install-Module -Name Az.PolicyInsights
(asegúrese de tener instalada la última versión de Azure PowerShell):
# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights
# Import the downloaded module
Import-Module Az.PolicyInsights
# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount
El módulo incluye los siguientes cmdlets:
Get-AzPolicyStateSummary
Get-AzPolicyState
Get-AzPolicyEvent
Get-AzPolicyRemediation
Remove-AzPolicyRemediation
Start-AzPolicyRemediation
Stop-AzPolicyRemediation
Ejemplo: Obtener el resumen de estado para la directiva asignada superior con el mayor número de recursos no compatibles.
PS> Get-AzPolicyStateSummary -Top 1
NonCompliantResources : 15
NonCompliantPolicies : 1
PolicyAssignments : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
oft.authorization/policyassignments/37ce239ae4304622914f0c77}
Ejemplo: Obtener el registro de estado para el recurso evaluado más recientemente (el valor predeterminado es por marca de tiempo en orden descendente).
PS> Get-AzPolicyState -Top 1
Timestamp : 5/22/2018 3:47:34 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/networkInterfaces
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
Ejemplo: Obtener los detalles de todos los recursos de red virtual no compatibles.
PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
Timestamp : 5/22/2018 4:02:20 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
Ejemplo: obtención de eventos relacionados con recursos de red virtual no compatibles que se produjeron después de una fecha concreta, conversión a un objeto CSV y exportación a un archivo.
$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'
La salida del objeto $policyEvents
se parece a la salida siguiente:
Timestamp : 9/19/2020 5:18:53 AM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : eastus
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
TenantId : {tenantId}
PrincipalOid : {principalOid}
El campo PrincipalOid
se puede usar para obtener un usuario específico con el cmdlet de Azure PowerShell Get-AzADUser
. Reemplace {principalOid}
por la respuesta que obtiene del ejemplo anterior.
PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker
Registros de Azure Monitor
Si tiene vinculada a la suscripción un área de trabajo de Log Analytics con el valor AzureActivity
de la solución Activity Log Analytics, también puede ver los resultados referentes a elementos no compatibles de la evaluación de los recursos nuevos y actualizados mediante consultas sencillas de Kusto y la tabla AzureActivity
. Con los detalles de los registros de Azure Monitor, se pueden configurar alertas para comprobar la opción de no compatibilidad.
Azure Resource Graph
Los registros de cumplimiento se almacenan en Azure Resource Graph (ARG). Los datos se pueden exportar desde las consultas de ARG para formar paneles personalizados en función de los ámbitos y las directivas de interés. Revise nuestras consultas de ejemplo para exportar los datos de cumplimiento mediante ARG.
Pasos siguientes
- Puede consultar ejemplos en Ejemplos de Azure Policy.
- Revise la estructura de definición de Azure Policy.
- Vea la Descripción de los efectos de directivas.
- Obtenga información acerca de cómo se pueden crear directivas mediante programación.
- Obtenga información sobre cómo corregir recursos no compatibles.
- En Organización de los recursos con grupos de administración de Azure, obtendrá información sobre lo que es un grupo de administración.