Démarrage rapide : Créer une attribution de stratégie pour identifier des ressources non conformes avec une API REST

La première étape pour comprendre la conformité dans Azure consiste à identifier l’état de vos ressources. Dans ce démarrage rapide, vous créez une attribution de stratégie pour identifier les ressources non conformes à l'aide de l'API REST. La stratégie est attribuée à un groupe de ressources et audite des machines virtuelles qui n’utilisent aucun disque managé. Après avoir créé l’attribution de stratégie, vous identifiez les machines virtuelles non conformes.

Ce guide utilise une API REST pour créer une attribution de stratégie et identifier des ressources non conformes dans votre environnement Azure. Les exemples de cet article utilisent PowerShell et les commandes az rest Azure CLI. Vous pouvez également exécuter les commandes az rest à partir d'un shell Bash comme Git Bash.

Prérequis

  • Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
  • Dernière version de PowerShell ou d'un shell Bash comme Git Bash.
  • La dernière version d’Azure CLI.
  • Visual Studio Code.
  • Un groupe de ressources avec au moins une machine virtuelle qui n’utilise aucun disque managé.

Revoir la syntaxe de l'API REST

Il existe deux éléments pour exécuter les commandes de l'API REST : l'URI de l'API REST et le corps de la requête. Pour plus d'informations, accédez à Affectations de stratégie - Créer.

L'exemple suivant montre la syntaxe URI de l'API REST pour créer une définition de stratégie.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope : Une étendue détermine sur quelles ressources ou groupes de ressources l’attribution de stratégie est appliquée. Cette étendue peut aller d'un groupe d'administration à une ressource individuelle. Remplacez {scope} par l'un des modèles suivants :
    • Groupe d’administration : /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Abonnement : /subscriptions/{subscriptionId}
    • Groupe de ressources : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Ressource : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName : Crée le nom de l'attribution de stratégie pour votre attribution. Le nom est inclus dans la propriété policyAssignmentId de l'affectation de stratégie.

L'exemple suivant est le JSON pour créer un fichier de corps de requête.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName : Nom d’affichage de l’attribution de stratégie.
  • description : Peut être utilisé pour ajouter du contexte sur l’affectation de stratégie.
  • policyDefinitionId : ID de définition de stratégie permettant de créer l’attribution.
  • nonComplianceMessages : Définissez le message à utiliser lorsqu'une ressource est évaluée comme non conforme. Pour plus d’informations, consultez la section sur les messages de non-conformité des affectations.

Connexion à Azure

Depuis une session de terminal Visual Studio Code, connectez-vous à Azure. Si vous avez plusieurs abonnements, exécutez les commandes pour définir le contexte sur votre abonnement. Remplacez <subscriptionID> par l’identifiant de votre abonnement Azure.

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

az login à utiliser même si vous utilisez PowerShell, car les exemples utilisent les commandes Azure CLI az rest.

Créer une affectation de stratégie

Dans cet exemple, vous créez une attribution de stratégie et attribuez les machines virtuelles d'audit qui n'utilisent pas la définition de disques managés.

Un corps de requête est nécessaire pour créer l’affectation. Enregistrez le JSON suivant dans un fichier nommé request-body.json.

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

Pour créer votre attribution de stratégie dans une étendue de groupe de ressources existante, utilisez l'URI d'API REST suivant avec un fichier pour le corps de la demande. Remplacez {subscriptionId} et {resourceGroupName} par vos valeurs. La commande affiche la sortie JSON dans votre shell.

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

Dans PowerShell, le backtick (`) est nécessaire pour échapper au at sign (@) afin de spécifier un nom de fichier. Dans un shell Bash comme Git Bash, omettez le backtick.

Pour plus d'informations, accédez à Affectations de stratégie - Créer.

Identifier des ressources non conformes

L’état de conformité d’une nouvelle attribution de stratégie prend quelques minutes pour devenir actif et fournir des résultats sur l’état de la stratégie. Vous utilisez l'API REST pour afficher les ressources non conformes pour cette attribution de stratégie et la sortie est au format JSON.

Pour identifier les ressources non conformes, exécutez la commande suivante. Remplacez {subscriptionId} et {resourceGroupName} par vos valeurs utilisées lors de la création de l’attribution de stratégie.

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

Les requêtes filter pour les ressources évaluées comme non conformes à la définition de stratégie nommée audit-vm-managed-disks que vous avez créée avec l'attribution de stratégie. Encore une fois, notez que le backtick est utilisé pour échapper au signe dollar ($) dans le filtre. Pour un client Bash, une barre oblique inverse (\) est un caractère d'échappement courant.

Vos résultats doivent ressembler à l’exemple suivant :

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

Pour plus d'informations, accédez à États de stratégie - Répertorier les résultats de requête pour le groupe de ressources.

Nettoyer les ressources

Pour supprimer l’attribution de stratégie, utilisez la commande suivante. Remplacez {subscriptionId} et {resourceGroupName} par vos valeurs utilisées lors de la création de l’attribution de stratégie. La commande affiche la sortie JSON dans votre shell.

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

Vous pouvez vérifier que l'attribution de stratégie a été supprimée avec la commande suivante. Un message s'affiche dans votre shell.

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

Pour plus d'informations, accédez à Affectations de stratégie - Supprimer et Affectations de stratégie - Obtenir.

Étapes suivantes

Dans ce démarrage rapide, vous avez affecté une définition de stratégie pour identifier les ressources non conformes de votre environnement Azure.

Pour en savoir plus sur l’affectation de stratégies qui valident la conformité des ressources, passez au didacticiel.