Bloquear recursos para prevenir alterações inesperadas

Como administrador, pode bloquear uma subscrição, um grupo de recursos ou recursos para impedir que outros utilizadores na sua organização eliminem ou modifiquem acidentalmente recursos importantes. O bloqueio substitui quaisquer permissões que o utilizador possa ter.

Pode definir o nível do bloqueio para CanNotDelete ou ReadOnly. No portal, os bloqueios são denominados Eliminar e Só de leitura, respetivamente.

  • CanNotDelete significa que os utilizadores autorizados ainda podem ler e modificar um recurso, mas não podem eliminar o recurso.
  • ReadOnly significa que os utilizadores autorizados podem ler um recurso, mas não podem eliminar ou atualizar o recurso. A aplicação deste bloqueio é semelhante a restringir todos os utilizadores autorizados às permissões concedidas pela função Reader.

Ao contrário do controlo de acesso baseado em funções, pode utilizar a gestão de bloqueios para aplicar uma restrição a todos os utilizadores e a todas as funções. Para saber sobre a definição de permissões para utilizadores e funções, consulte o controlo de acesso baseado em funções Azure (Azure RBAC).

Lock herança

Quando se aplica uma fechadura no âmbito dos pais, todos os recursos dentro desse âmbito herdam a mesma fechadura. Até os recursos que adicionas mais tarde herdam a fechadura do progenitor. O bloqueio mais restritivo na herança tem precedência.

Compreender o âmbito dos bloqueios

Nota

É importante entender que as fechaduras não se aplicam a todo o tipo de operações. As operações do Azure podem ser divididas em duas categorias - plano de controlo e plano de dados. As fechaduras aplicam-se apenas às operações de controlo do avião.

As operações de controlo dos aviões são operações enviadas para https://management.azure.com . As operações de avião de dados são operações enviadas para a sua instância de um serviço, tais como https://myaccount.blob.core.windows.net/ . Para mais informações, consulte o avião de controlo Azure e o plano de dados. Para descobrir que operações utilizam o URL do plano de controlo, consulte a API AZURE REST.

Esta distinção significa que os bloqueios impedem alterações a um recurso, mas não restringem a forma como os recursos desempenham as suas próprias funções. Por exemplo, um bloqueio ReadOnly num servidor lógico Base de Dados SQL impede-o de eliminar ou modificar o servidor. Isso não o impede de criar, atualizar ou eliminar dados nas bases de dados desse servidor. As transações de dados são permitidas porque essas operações não são enviadas para https://management.azure.com.

Na secção seguinte são descritos mais exemplos das diferenças entre operações de controlo e de planos de dados.

Considerações antes de aplicar fechaduras

A aplicação de bloqueios pode levar a resultados inesperados porque algumas operações que não parecem modificar o recurso requerem ações que são bloqueadas pelo bloqueio. Os bloqueios impedirão quaisquer operações que exijam um pedido de CORREIO à API gestora de recursos Azure. Alguns exemplos comuns das operações que são bloqueadas por fechaduras são:

  • Um bloqueio apenas de leitura numa conta de armazenamento impede os utilizadores de listar as chaves da conta. A operação Azure Armazenamento List Keys é gerida através de um pedido de CORREIO para proteger o acesso às chaves da conta, que fornecem acesso completo aos dados na conta de armazenamento. Quando um bloqueio apenas de leitura é configurado para uma conta de armazenamento, os utilizadores que não têm as chaves da conta devem usar credenciais AD AD Azure para aceder a dados de blob ou fila. Um bloqueio só de leitura também impede a atribuição de funções Azure RBAC que são telescópios na conta de armazenamento ou num recipiente de dados (recipiente blob ou fila).

  • Um bloqueio não pode eliminar uma conta de armazenamento não impede que os dados dentro dessa conta sejam eliminados ou modificados. Este tipo de bloqueio apenas protege a própria conta de armazenamento de ser eliminada. Se um pedido utilizar operações de plano de dados,o bloqueio na conta de armazenamento não protege a bolha, a fila, a tabela ou os dados de ficheiro dentro dessa conta de armazenamento. No entanto, se o pedido utilizar operações de controlodo avião, o bloqueio protege esses recursos.

    Por exemplo, se um pedido utilizar ações de ficheiro - Excluir, que é uma operação de avião de controlo, a supressão é negada. Se o pedido utilizar o Delete Share, que é uma operação de data plane, a eliminação tem sucesso. Recomendamos que utilize as operações do avião de controlo.

  • Um bloqueio apenas de leitura numa conta de armazenamento não impede que os dados dentro dessa conta sejam eliminados ou modificados. Este tipo de bloqueio apenas protege a própria conta de armazenamento de ser eliminada ou modificada, e não protege os dados blob, fila, tabela ou ficheiro dentro dessa conta de armazenamento.

  • Um bloqueio apenas de leitura num recurso do Serviço de Aplicações impede Visual Studio Server Explorer de exibir ficheiros para o recurso porque essa interação requer acesso de escrita.

  • Um bloqueio de leitura apenas num grupo de recursos que contenha um plano de Serviço de Aplicações impede-o de aumentar ou de sair do plano.

  • Um bloqueio apenas de leitura num grupo de recursos que contenha uma máquina virtual impede que todos os utilizadores arranquem ou reiniciem a máquina virtual. Estas operações requerem um pedido de CORREIO.

  • Um bloqueio apenas de leitura num grupo de recursos que contenha uma conta de automação impede que todos os livros de execução comecem. Estas operações requerem um pedido de CORREIO.

  • Um bloqueio não pode excluir um grupo de recursos impede o Gestor de Recursos Azure de eliminar automaticamente as implementações na história. Se atingir 800 destacamentos na história, as suas implementações falharão.

  • Um bloqueio não pode eliminar o grupo de recursos criado pelo Azure Backup Service faz com que as cópias de segurança falhem. O serviço suporta um máximo de 18 pontos de restauro. Quando bloqueado, o serviço de cópia de segurança não pode limpar pontos de restauro. Para obter mais informações, consulte Frequentemente perguntas-Back up Azure VMs.

  • Um bloqueio não capaz de eliminar um grupo de recursos impede Azure Machine Learning de autoscalar Azure Machine Learning os clusters de computação para remover os nós não usados.

  • Um bloqueio apenas de leitura numa subscrição impede o Azure Advisor de funcionar corretamente. O consultor não consegue armazenar os resultados das suas consultas.

  • Um bloqueio apenas de leitura num Gateway de aplicação impede-o de obter a saúde de backend do gateway de aplicação. Esta operação utiliza o POST, que está bloqueado pelo bloqueio apenas de leitura.

  • Um bloqueio apenas de leitura num cluster AKS impede todos os utilizadores de acederem a quaisquer recursos de cluster da secção Kubernetes Resources da lâmina do lado esquerdo do cluster AKS no portal Azure. Estas operações requerem um pedido de autenticação DOM.

Quem pode criar ou eliminar fechaduras

Para criar ou eliminar bloqueios de gestão, tem de ter acesso Microsoft.Authorization/* ou Microsoft.Authorization/locks/* ações. Das funções incorporadas, apenas Proprietário e Administrador de Acesso dos Utilizadores têm acesso a essas ações.

Aplicações Geridas e bloqueios

Alguns serviços da Azure, como o Azure Databricks, utilizam aplicações geridas para implementar o serviço. Nesse caso, o serviço cria dois grupos de recursos. Um grupo de recursos contém uma visão geral do serviço e não está bloqueado. O outro grupo de recursos contém a infraestrutura para o serviço e está bloqueado.

Se tentar eliminar o grupo de recursos de infraestrutura, obtém-se um erro indicando que o grupo de recursos está bloqueado. Se tentar apagar o bloqueio do grupo de recursos de infraestrutura, obtém-se um erro afirmando que o bloqueio não pode ser eliminado porque é propriedade de uma aplicação do sistema.

Em vez disso, elimine o serviço, que também elimina o grupo de recursos de infraestrutura.

Para aplicações geridas, selecione o serviço que implementou.

Selecione o serviço

Note que o serviço inclui um link para um Grupo de Recursos Geridos. Este grupo de recursos detém a infraestrutura e está bloqueado. Não pode ser apagado diretamente.

Mostrar grupo gerido

Para eliminar tudo o que for para o serviço, incluindo o grupo de recursos de infraestrutura bloqueado, selecione Delete para o serviço.

Apagar serviço

Fechaduras de configuração

Portal

  1. No painel Definições do recurso, grupo de recursos ou subscrição que quer bloquear, selecione Bloqueios.

    Selecione a fechadura.

  2. Para adicionar um bloqueio, selecione Adicionar. Se quiser criar uma fechadura a nível dos pais, selecione o progenitor. O recurso atualmente selecionado herda a fechadura do progenitor. Por exemplo, pode bloquear o grupo de recursos para aplicar um bloqueio a todos os seus recursos.

    Adicione a fechadura.

  3. Dê ao cadeado um nome e um nível de bloqueio. Opcionalmente, pode adicionar notas para descrever o bloqueio.

    Coloque a fechadura.

  4. Para eliminar o bloqueio, selecione o botão Eliminar.

    Apague o bloqueio.

Modelo

Ao utilizar um modelo de Gestor de Recursos Azure (modelo ARM) ou ficheiro Bicep para implementar uma fechadura, tem de estar ciente do alcance do bloqueio e do âmbito da implantação. Para aplicar um bloqueio no âmbito de implementação, como bloquear um grupo de recursos ou subscrição, não desaprote a propriedade de âmbito. Ao bloquear um recurso dentro do âmbito de implantação, desaprova a propriedade de âmbito.

O modelo a seguir aplica um bloqueio ao grupo de recursos para o qual é implantado. Note que não existe uma propriedade de âmbito no recurso de bloqueio porque o âmbito do bloqueio corresponde ao âmbito de implementação. Este modelo é implantado ao nível do grupo de recursos.

{
  "$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."
      }
    }
  ]
}

Para criar um grupo de recursos e bloqueá-lo, implemente o modelo seguinte ao nível de subscrição.

{
  "$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": {}
}

Ao aplicar um bloqueio a um recurso dentro do grupo de recursos, adicione a propriedade de âmbito. Desaprote o âmbito do nome do recurso a bloquear.

O exemplo a seguir mostra um modelo que cria um plano de serviço de aplicações, um site e um bloqueio no site. O âmbito da fechadura está definido para o site.

{
  "$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

Bloqueia os recursos implantados com Azure PowerShell utilizando o comando New-AzResourceLock.

Para bloquear um recurso, forneça o nome do recurso, o seu tipo de recurso e o seu nome de grupo de recursos.

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

Para bloquear um grupo de recursos, forneça o nome do grupo de recursos.

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

Para obter informações sobre um bloqueio, utilize o Get-AzResourceLock. Para obter todas as fechaduras da sua subscrição, utilize:

Get-AzResourceLock

Para obter todas as fechaduras para um recurso, use:

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

Para obter todas as fechaduras de um grupo de recursos, utilize:

Get-AzResourceLock -ResourceGroupName exampleresourcegroup

Para eliminar um bloqueio para um recurso, utilize:

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

Para eliminar um bloqueio para um grupo de recursos, utilize:

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

CLI do Azure

Bloqueia os recursos implantados com o Azure CLI utilizando o comando de criação de bloqueio az.

Para bloquear um recurso, forneça o nome do recurso, o seu tipo de recurso e o seu nome de grupo de recursos.

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

Para bloquear um grupo de recursos, forneça o nome do grupo de recursos.

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

Para obter informações sobre uma fechadura, utilize a lista de bloqueios az. Para obter todas as fechaduras da sua subscrição, utilize:

az lock list

Para obter todas as fechaduras para um recurso, use:

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

Para obter todas as fechaduras de um grupo de recursos, utilize:

az lock list --resource-group exampleresourcegroup

Para eliminar um bloqueio para um recurso, utilize:

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

Para eliminar um bloqueio para um grupo de recursos, utilize:

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

API REST

Pode bloquear recursos implantados com a API REST para bloqueios de gestão. A API REST permite-lhe criar e eliminar fechaduras e recuperar informações sobre fechaduras existentes.

Para criar uma fechadura, corra:

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

O âmbito pode ser uma subscrição, grupo de recursos ou recurso. O nome do cadeado é o que quiser chamar de fechadura. Para a versão api, utilize 2016-09-01.

No pedido, inclua um objeto JSON que especifica as propriedades para a fechadura.

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

Passos seguintes