Verrouiller vos ressources pour protéger votre infrastructure

Si vous êtes administrateur, vous pouvez verrouiller un abonnement, un groupe de ressources ou une ressource Azure pour les protéger contre les suppressions et modifications accidentelles de la part des utilisateurs. Le verrou remplace toutes les autorisations que les utilisateurs ont.

Vous pouvez définir des verrous qui empêchent les suppressions ou les modifications. Dans le portail, ces verrous sont appelés Suppression et Lecture seule. Dans la ligne de commande, ces verrous sont appelés CanNotDelete et ReadOnly.

  • CanNotDelete signifie que les utilisateurs autorisés peuvent lire et modifier une ressource, mais qu’ils ne peuvent pas la supprimer.
  • ReadOnly signifie que les utilisateurs autorisés peuvent lire une ressource, mais pas la supprimer ni la mettre à jour. Appliquer ce verrou revient à limiter à tous les utilisateurs autorisés les autorisations fournies par le rôle Lecteur.

Contrairement au contrôle d’accès en fonction du rôle (RBAC), vous utilisez des verrous de gestion pour appliquer une restriction à tous les utilisateurs et rôles. Pour en savoir plus sur la définition des autorisations pour les utilisateurs et les rôles, consultez Azure RBAC.

Héritage de verrou

Lorsque vous appliquez un verrou à une étendue parente, toutes les ressources de cette étendue héritent du même verrou. Même les ressources que vous ajoutez par la suite héritent du même verrou parent. Le verrou le plus restrictif de l’héritage est prioritaire.

Les ressources d’extension héritent des verrous de la ressource auxquelles elles sont appliquées. Par exemple, Microsoft.Insights/diagnosticSettings est un type de ressource d’extension. Si vous appliquez un paramètre de diagnostic à un objet blob de stockage et que vous verrouillez le compte de stockage, vous ne pouvez pas supprimer le paramètre de diagnostic. Cet héritage est logique, car l’ID de ressource complet du paramètre de diagnostic est :

/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}/blobServices/default/providers/microsoft.insights/diagnosticSettings/{setting-name}"

Qui correspond à l’étendue de l’ID de ressource de la ressource verrouillée :

/subscriptions/{sub-id}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-name}

Si vous avez un verrou Suppression sur une ressource et que vous tentez de supprimer son groupe de ressources, la fonctionnalité bloque complètement l’opération de suppression. Même si le groupe de ressources ou d’autres ressources dans le groupe de ressources ne sont pas verrouillés, la suppression n’est pas possible. Vous n’avez jamais de suppression partielle.

Quand vous annulez un abonnement Azure :

  • Un verrou de ressource ne bloque pas l’annulation de l’abonnement.
  • Azure conserve vos ressources en les désactivant au lieu de les supprimer immédiatement.
  • Azure supprime vos ressources définitivement seulement après un certain délai d’attente.

Comprendre l’étendue des verrous

Notes

Les verrous s’appliquent uniquement aux opérations de plan de contrôle Azure ; ils ne s’appliquent pas aux opérations de plan de données.

Les opérations de plan de contrôle Azure sont envoyées à https://management.azure.com. Les opérations de plan de données Azure sont envoyées à votre instance de service, par exemple https://myaccount.blob.core.windows.net/. Consultez Plan de contrôle et plan de données Azure. Pour découvrir quelles opérations utilisent l’URL du plan de contrôle, consultez l’API REST Azure.

La distinction est que les verrous protègent une ressource contre les modifications, mais qu’ils ne limitent pas la façon dont une ressource effectue ses fonctions. Un verrou ReadOnly mis, par exemple, sur un serveur logique SQL Database, protège celui-ci contre les suppressions et les modifications. Vous êtes autorisé à créer, mettre à jour ou supprimer des données dans la base de données du serveur. Les opérations de plan de données autorisent les transactions de données. Ces requêtes ne sont pas envoyées à https://management.azure.com.

Points à prendre en considération avant d’appliquer des verrous

L’application de verrous peut entraîner des résultats inattendus. Certaines opérations, qui ne semblent pas a priori modifier une ressource, nécessitent des actions bloquées. Les verrous empêchent la méthode POST d’envoyer des données à l’API Azure Resource Manager (ARM). Voici quelques exemples courants d’opérations bloquées :

  • Un verrou en lecture seule appliqué à un compte de stockage empêche les utilisateurs de répertorier les clés du compte. Une requête POST gère l’opération List Keys de Stockage Azure pour protéger l’accès aux clés de compte. Les clés de compte fournissent un accès complet aux données dans le compte de stockage. Lorsqu'un verrou en lecture seule est configuré pour un compte de stockage, les utilisateurs qui ne disposent pas des clés de compte doivent utiliser des informations d'identification Azure AD pour accéder aux données de blob ou de file d'attente. Un verrou en lecture seule empêche également l’attribution de rôles Azure RBAC étendus au compte de stockage ou à un conteneur de données (conteneur de blobs ou file d’attente).

  • Un verrou en lecture seule sur un compte de stockage protège les attributions RBAC étendues pour un compte de stockage ou un conteneur de données (conteneur d’objets blob ou file d’attente).

  • Un verrou CanNotDelete sur un compte de stockage ne protège pas les données de compte contre la suppression ou la modification. Il protège uniquement le compte de stockage contre la suppression. Si une requête utilise des opérations de plan de données, le verrou sur le compte de stockage ne protège pas les données BLOB, de file d’attente, de table ou de fichier dans ce compte de stockage. Si la requête utilise des opérations de plan de contrôle, le verrou protège toutefois ces ressources.

    Si une requête utilise, par exemple, Partages de fichiers - Supprimer, qui est une opération de plan de contrôle, la suppression est refusée. Si la requête utilise Supprimer le partage, qui est une opération de plan de données, la suppression réussit. Nous vous recommandons d’utiliser une opération de plan de contrôle.

  • Un verrou en lecture seule sur un compte de stockage ne protège pas contre la suppression ou la modification des données du compte. Il ne protège pas non plus les données d’objet blob, de file d’attente, de table ou de fichier du compte.

  • Un verrou en lecture seule sur une ressource App Service empêche l’Explorateur de serveurs Visual Studio d’afficher les fichiers de la ressource, car cette interaction requiert un accès en écriture.

  • Un verrou en lecture seule sur un groupe de ressources qui contient un plan App Service empêche tout scale-up ou scale-out du plan.

  • Un verrou en lecture seule appliqué à un groupe de ressources contenant une machine virtuelle empêche tous les utilisateurs de démarrer ou de redémarrer une machine virtuelle. Ces opérations nécessitent une requête de méthode POST.

  • Un verrouillage en lecture seule sur un groupe de ressources contenant un compte Automation empêche le démarrage de tous les runbooks. Ces opérations nécessitent une requête de méthode POST.

  • Un verrou cannot-delete (suppression impossible) sur un groupe de ressources empêche Azure Resource Manager de supprimer automatiquement les déploiements dans l’historique. Si vous atteignez 800 déploiements dans l’historique, vos déploiements échouent.

  • Un verrou cannot-delete (suppression impossible) sur un groupe de ressources créé par le service Sauvegarde Azure, fera échouer les sauvegardes. Le service prend en charge un maximum de 18 points de restauration. Lorsqu’il est verrouillé, le service de sauvegarde ne peut pas nettoyer les points de restauration. Pour plus d’informations, consultez le Forum aux questions – Sauvegarde de machines virtuelles Azure.

  • Un verrou de suppression impossible sur un groupe de ressources qui contient des espaces de travail Azure Machine Learning empêche la mise à l’échelle automatique des clusters de calcul Azure Machine Learning de fonctionner correctement. Avec le verrou, la mise à l’échelle automatique ne peut pas supprimer les nœuds inutilisés. Votre solution consomme plus de ressources que nécessaire pour la charge de travail.

  • Un verrouillage en lecture seule sur un espace de travail Log Analytics empêche l’activation d’UEBA (User and Entity Behavior Analytics).

  • Un verrou d’impossibilité de supprimer sur un espace de travail Log Analytics n’empêche pas les opérations de purge de données, supprimez le rôle purge de données de l’utilisateur à la place.

  • Un verrou en lecture seule sur un abonnement empêche Azure Advisor de fonctionner correctement. Advisor ne peut pas stocker les résultats de ses requêtes.

  • Un verrou en lecture seule sur une passerelle applicative vous empêche d’obtenir l’intégrité du backend de la passerelle applicative. Cette opération utilise une méthode POST, qui est bloquée par un verrou en lecture seule.

  • Un verrou en lecture seule sur un cluster Azure Kubernetes Service (AKS) limite la façon dont vous pouvez accéder aux ressources de cluster via le portail. Un verrou en lecture seule vous empêche d’utiliser la section des ressources Kubernetes du cluster AKS dans le Portail Azure pour choisir une ressource de cluster. Ces opérations nécessitent une requête de méthode POST pour l’authentification.

  • Un verrou de suppression impossible sur une machine virtuelle protégée par Site Recovery empêche certaines liaisons de ressources liées à Site Recovery d’être supprimées correctement quand vous enlevez la protection ou désactivez la réplication. Si vous envisagez de reprotéger la machine virtuelle, vous devez supprimer le verrou avant de désactiver la protection. Si vous ne parvenez pas à supprimer le verrou, vous devez suivre certaines étapes pour nettoyer les liens obsolètes avant de pouvoir reprotéger la machine virtuelle. Pour plus d’informations, consultez Résoudre les problèmes de réplication des machines virtuelles Azure.

Utilisateurs autorisés à créer ou à supprimer des verrous

Pour créer ou supprimer des verrous de gestion, vous avez besoin d’accéder à des actions Microsoft.Authorization/* ou Microsoft.Authorization/locks/*. Seuls les rôles prédéfinis Propriétaire et Administrateur de l’accès utilisateur peuvent créer et supprimer des verrous de gestion. Vous pouvez créer un rôle personnalisé avec les autorisations nécessaires.

Applications managées et verrous

Certains services Azure, tels qu’Azure Databricks, utilisent des applications managées pour implémenter le service. Dans ce cas, le service crée deux groupes de ressources. L’un est un groupe de ressources déverrouillé qui contient une vue d’ensemble du service. L’autre est un groupe de ressources verrouillé qui contient l’infrastructure du service.

Si vous essayez de supprimer le groupe de ressources contenant l’infrastructure, vous obtenez une erreur, qui indique que le groupe de ressources est verrouillé. Si vous tentez de supprimer ce verrou, vous obtenez une erreur, qui indique que le verrou ne peut pas être supprimé, car il est détenu par une application système.

Au lieu de cela, supprimez le service, ce qui supprime également le groupe de ressources contenant l’infrastructure.

Pour les applications managées, choisissez le service que vous avez déployé.

Sélectionner un service

Notez que le service inclut un lien vers un groupe de ressources managé. Ce groupe de ressources contient l’infrastructure et est verrouillé. Vous pouvez le supprimer uniquement de manière indirecte.

Afficher un groupe managé

Pour supprimer tous les éléments associés au service, y compris le groupe de ressources contenant l’infrastructure (qui est donc verrouillé),choisissez l’option Supprimer pour le service.

Suppression du service

Configurer des verrous

Portail

Dans le volet de navigation de gauche, le nom de la fonctionnalité de verrouillage d’abonnement est Verrous de ressources, et le nom de la fonctionnalité de verrouillage de groupe de ressources est Verrous.

  1. Dans le panneau Paramètres de la ressource, du groupe de ressources ou de l’abonnement que vous voulez verrouiller, sélectionnez Verrous.

    Sélectionnez le verrou.

  2. Pour ajouter un verrou, sélectionnez Ajouter. Si vous souhaitez créer un verrou au niveau du parent, sélectionnez le parent. La ressource actuellement sélectionnée hérite du verrou du parent. Vous pouvez par exemple verrouiller le groupe de ressources afin d’appliquer un verrou à toutes ses ressources.

    Ajoutez un verrou.

  3. Choisissez un nom et un niveau de verrouillage pour le verrou. Si vous le souhaitez, vous pouvez ajouter des notes décrivant le verrou.

    Définissez le verrou.

  4. Pour supprimer le verrou, sélectionnez le bouton Supprimer.

    Supprimez le verrou.

Modèle

Lorsque vous utilisez un modèle ARM ou un fichier Bicep pour déployer un verrou, il est utile de comprendre comment l’étendue du déploiement et l’étendue du verrou interagissent. Pour appliquer un verrou au niveau de l’étendue du déploiement, par exemple pour verrouiller un groupe de ressources ou un abonnement, laissez la propriété d’étendue non définie. Si vous verrouillez une ressource, dans l’étendue du déploiement, définissez la propriété d’étendue sur le verrou.

Le modèle suivant applique un verrou au groupe de ressources sur lequel il est déployé. Notez qu’il n’existe pas de propriété d’étendue sur la ressource de verrou, car l’étendue du verrou correspond à celle du déploiement. Déployez ce modèle au niveau du groupe de ressources.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "rgLock",
      "properties": {
        "level": "CanNotDelete",
        "notes": "Resource group should not be deleted."
      }
    }
  ]
}

Pour créer un groupe de ressources et le verrouiller, déployez le modèle suivant au niveau de l’abonnement.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "rgName": {
      "type": "string"
    },
    "rgLocation": {
      "type": "string"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('rgName')]",
      "location": "[parameters('rgLocation')]",
      "properties": {}
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "lockDeployment",
      "resourceGroup": "[parameters('rgName')]",
      "dependsOn": [
        "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Authorization/locks",
              "apiVersion": "2016-09-01",
              "name": "rgLock",
              "properties": {
                "level": "CanNotDelete",
                "notes": "Resource group and its resources should not be deleted."
              }
            }
          ],
          "outputs": {}
        }
      }
    }
  ],
  "outputs": {}
}

Lorsque vous appliquez un verrou à une ressource au sein du groupe de ressources, ajoutez la propriété d’étendue. Définissez l’étendue sur le nom de la ressource à verrouiller.

L’exemple suivant représente un modèle créant un plan App Service, un site web et un verrou sur le site web. L’étendue du verrou est définie sur le site web.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "siteName": "[concat('ExampleSite', uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2020-12-01",
      "name": "[parameters('hostingPlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "tier": "Free",
        "name": "f1",
        "capacity": 0
      },
      "properties": {
        "targetWorkerCount": 1
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2020-12-01",
      "name": "[variables('siteName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      ],
      "properties": {
        "serverFarmId": "[parameters('hostingPlanName')]"
      }
    },
    {
      "type": "Microsoft.Authorization/locks",
      "apiVersion": "2016-09-01",
      "name": "siteLock",
      "scope": "[concat('Microsoft.Web/sites/', variables('siteName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', variables('siteName'))]"
      ],
      "properties": {
        "level": "CanNotDelete",
        "notes": "Site should not be deleted."
      }
    }
  ]
}

Azure PowerShell

Vous pouvez verrouiller des ressources déployées avec Azure PowerShell en utilisant la commande New-AzResourceLock.

Pour verrouiller une ressource, indiquez le nom de la ressource, son type de ressource et son nom de groupe de ressources.

New-AzResourceLock -LockLevel CanNotDelete -LockName LockSite -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Pour verrouiller un groupe de ressources : indiquez le nom du groupe de ressources.

New-AzResourceLock -LockName LockGroup -LockLevel CanNotDelete -ResourceGroupName exampleresourcegroup

Pour obtenir des informations sur un verrou, utilisez Get-AzResourceLock. Pour obtenir tous les verrous de votre abonnement, utilisez :

Get-AzResourceLock

Pour obtenir tous les verrous d’une ressource, utilisez :

Get-AzResourceLock -ResourceName examplesite -ResourceType Microsoft.Web/sites -ResourceGroupName exampleresourcegroup

Pour obtenir tous les verrous d’un groupe de ressources, utilisez :

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Pour supprimer un verrou pour une ressource, utilisez :

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup -ResourceName examplesite -ResourceType Microsoft.Web/sites).LockId
Remove-AzResourceLock -LockId $lockId

Pour supprimer un verrou pour un groupe de ressources, utilisez :

$lockId = (Get-AzResourceLock -ResourceGroupName exampleresourcegroup).LockId
Remove-AzResourceLock -LockId $lockId

Azure CLI

Verrouillez les ressources déployées avec Azure CLI à l’aide de la commande az lock create.

Pour verrouiller une ressource, indiquez le nom de la ressource, son type de ressource et son nom de groupe de ressources.

az lock create --name LockSite --lock-type CanNotDelete --resource-group exampleresourcegroup --resource-name examplesite --resource-type Microsoft.Web/sites

Pour verrouiller un groupe de ressources : indiquez le nom du groupe de ressources.

az lock create --name LockGroup --lock-type CanNotDelete --resource-group exampleresourcegroup

Pour obtenir des informations sur un verrou, utilisez la commande az lock list. Pour obtenir tous les verrous de votre abonnement, utilisez :

az lock list

Pour obtenir tous les verrous d’une ressource, utilisez :

az lock list --resource-group exampleresourcegroup --resource-name examplesite --namespace Microsoft.Web --resource-type sites --parent ""

Pour obtenir tous les verrous d’un groupe de ressources, utilisez :

az lock list --resource-group exampleresourcegroup

Pour supprimer un verrou pour une ressource, utilisez :

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup --resource-type Microsoft.Web/sites --resource-name examplesite --output tsv --query id)
az lock delete --ids $lockid

Pour supprimer un verrou pour un groupe de ressources, utilisez :

lockid=$(az lock show --name LockSite --resource-group exampleresourcegroup  --output tsv --query id)
az lock delete --ids $lockid

API REST

Vous pouvez verrouiller des ressources déployées à l’aide de l’ API REST pour les verrous de gestion. L’API REST vous permet de créer et de supprimer des verrous, et de récupérer des informations relatives aux verrous existants.

Pour créer un verrou, exécutez :

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/locks/{lock-name}?api-version={api-version}

Le verrou peut être appliqué à un abonnement, à un groupe de ressources ou à une ressource. Le nom du verrou peut être personnalisé. Pour la version de l’API, utilisez 2016-09-01.

Dans la requête, incluez un objet JSON qui spécifie les propriétés du verrou.

{
  "properties": {
  "level": "CanNotDelete",
  "notes": "Optional text notes."
  }
}

Étapes suivantes