Inicio rápido: Creación de una asignación de directivas para identificar los recursos no compatibles mediante JavaScript
El primer paso para entender el cumplimiento en Azure es identificar el estado de sus recursos. En esta guía de inicio rápido, se crea una asignación de directiva para identificar máquinas virtuales que no usan discos administrados. Cuando haya finalizado, podrá identificar máquinas virtuales que no estén conformes.
La biblioteca de JavaScript se usa para administrar los recursos de Azure desde la línea de comandos o en scripts. En esta guía se explica cómo usar la biblioteca JavaScript para crear una asignación de directiva.
Requisitos previos
Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Node.js: se requiere Node.js versión 12 o posterior.
Uso de Azure Cloud Shell
En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.
Para iniciar Azure Cloud Shell:
| Opción | Ejemplo o vínculo |
|---|---|
| Seleccione Pruébelo en la esquina superior derecha de un bloque de código. Solo con seleccionar Pruébelo no se copia automáticamente el código en Cloud Shell. | ![]() |
| Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. | ![]() |
| Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. | ![]() |
Para ejecutar el código de este artículo en Azure Cloud Shell:
Inicie Cloud Shell.
Seleccione el botón Copiar de un bloque de código para copiar el código.
Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.
Seleccione Entrar para ejecutar el código.
Adición de las bibliotecas de Policy
Para que JavaScript pueda trabajar con Azure Policy, se deben agregar las bibliotecas. Estas bibliotecas funcionan siempre que se pueda usar JavaScript, incluido bash en Windows 10.
Configure un nuevo proyecto de Node.js ejecutando el siguiente comando.
npm init -yAgregue una referencia a la biblioteca de yargs.
npm install yargsAgregue una referencia a las bibliotecas de Azure Policy.
# arm-policy is for working with Azure Policy objects such as definitions and assignments npm install @azure/arm-policy # arm-policyinsights is for working with Azure Policy compliance data such as events and states npm install @azure/arm-policyinsightsAgregue una referencia a la biblioteca de autenticación de Azure.
npm install @azure/ms-rest-nodeauthNota
Compruebe en package.json que
@azure/arm-policyes de la versión 3.1.0 o superior,@azure/arm-policyinsightsde la versión 3.2.0 o superior, y@azure/ms-rest-nodeauthde la versión 3.0.5 o superior.
Creación de una asignación de directiva
En este inicio rápido, creará una asignación de directiva y asignará la definición Auditoría de máquinas virtuales que no usan discos administrados (06a78e20-9358-41c9-923c-fb736d382a4d). Esta definición de directiva identifica los recursos que no cumplen las condiciones establecidas en la definición de directiva.
Cree un archivo denominado policyAssignment.js y escriba el siguiente código.
const argv = require("yargs").argv; const authenticator = require("@azure/ms-rest-nodeauth"); const policyObjects = require("@azure/arm-policy"); if (argv.subID && argv.name && argv.displayName && argv.policyDefID && argv.scope && argv.description) { const createAssignment = async () => { const credentials = await authenticator.interactiveLogin(); const client = new policyObjects.PolicyClient(credentials, argv.subID); const assignments = new policyObjects.PolicyAssignments(client); const result = await assignments.create( argv.scope, argv.name, { displayName: argv.displayName, policyDefinitionId: argv.policyDefID, description: argv.description } ); console.log(result); }; createAssignment(); }En el terminal, escriba el siguiente comando:
node policyAssignment.js ` --subID "{subscriptionId}" ` --name "audit-vm-manageddisks" ` --displayName "Audit VMs without managed disks Assignment" ` --policyDefID "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" ` --description "Shows all virtual machines not using managed disks" ` --scope "{scope}"
Los comandos anteriores usan la siguiente información:
- subID: el identificador de la suscripción para el contexto de autenticación. Asegúrese de reemplazar
{subscriptionId}por su suscripción. - name: el nombre único para el objeto de asignación de directiva. En el ejemplo anterior se usa audit-vm-manageddisks.
- displayName: nombre para mostrar de la asignación de directiva. En este caso, usará Auditoría de máquinas virtuales sin discos administrados.
- policyDefID: la ruta de acceso de la definición de directiva, según la opción utilizada para crear la asignación. En este caso, es el identificador de la definición de directiva Auditoría de máquinas virtuales que no usan discos administrados.
- description: una explicación más detallada de lo que hace la directiva o de por qué se asigna a este ámbito.
- scope: un ámbito determina en qué recursos o agrupación de recursos se aplica la asignación de directiva. Podría abarcar desde un grupo de administración a un recurso individual. Asegúrese de reemplazar
{scope}por uno de los siguientes patrones:- Grupo de administración:
/providers/Microsoft.Management/managementGroups/{managementGroup} - Suscripción:
/subscriptions/{subscriptionId} - Grupos de recursos:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} - Recurso:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Grupo de administración:
Ahora ya está listo para identificar los recursos no compatibles a fin de conocer el estado de cumplimiento de su entorno.
Identificación de recursos sin compatibilidad
Ahora que se ha creado la asignación de directiva, puede identificar los recursos que no son compatibles.
Cree un nuevo archivo denominado policyState.js y escriba el código siguiente.
const argv = require("yargs").argv; const authenticator = require("@azure/ms-rest-nodeauth"); const policyInsights = require("@azure/arm-policyinsights"); if (argv.subID && argv.name) { const getStates = async () => { const credentials = await authenticator.interactiveLogin(); const client = new policyInsights.PolicyInsightsClient(credentials); const policyStates = new policyInsights.PolicyStates(client); const result = await policyStates.listQueryResultsForSubscription( "latest", argv.subID, { queryOptions: { filter: "IsCompliant eq false and PolicyAssignmentId eq '" + argv.name + "'", apply: "groupby((ResourceId))" } } ); console.log(result); }; getStates(); }En el terminal, escriba el siguiente comando:
node policyState.js --subID "{subscriptionId}" --name "audit-vm-manageddisks"
Reemplace {subscriptionId} por la suscripción en que desea ver los resultados de cumplimiento de la asignación de directiva denominada "audit-vm-manageddisks" que hemos creado en los pasos anteriores. Para obtener una lista de otros ámbitos y maneras de resumir los datos, consulte los métodos de PolicyStates*.
Los resultados deben tener una apariencia similar al ejemplo siguiente:
{
'additional_properties': {
'@odata.nextLink': None
},
'odatacontext': 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest',
'odatacount': 12,
'value': [{data}]
}
Los resultados coinciden con lo que ve en la pestaña de cumplimiento de recursos de una asignación de directiva en la vista de Azure Portal.
Limpieza de recursos
Elimine la asignación de directiva Audit VMs without managed disks Assignment (Auditar VM sin asignación de discos administrados) a través del portal. La definición de directiva está integrada, por lo que no hay que quitar ninguna definición.
Si desea quitar las bibliotecas instaladas de la aplicación, ejecute el siguiente comando.
npm uninstall @azure/arm-policy @azure/arm-policyinsights @azure/ms-rest-nodeauth yargs
Pasos siguientes
En este inicio rápido, se asigna una definición de directiva para identificar los recursos incompatibles en el entorno de Azure.
Para más información sobre la asignación de definiciones de directivas para asegurarse de la compatibilidad de los nuevos recursos, continúe con el tutorial para:


