Bloqueie os seus recursos para proteger a sua infraestrutura

Como administrador, pode bloquear uma subscrição, grupo de recursos ou recurso Azure para protegê-los de supressões e modificações acidentais do utilizador. O bloqueio substitui quaisquer permissões do utilizador.

Pode configurar fechaduras que impeçam as supressões ou modificações. No portal, estas fechaduras são chamadas de Delete and Read-only. Na linha de comando, estas fechaduras são chamadas CanNotDelete e ReadOnly.

  • CanNotDelete significa que os utilizadores autorizados podem ler e modificar um recurso, mas não podem eliminá-lo.
  • ReadOnly significa que os utilizadores autorizados podem ler um recurso, mas não podem eliminá-lo ou atualizá-lo. A aplicação deste bloqueio é semelhante a restringir todos os utilizadores autorizados às permissões que a função Reader fornece.

Ao contrário do controlo de acesso baseado em funções (RBAC), você usa bloqueios de gestão para aplicar uma restrição em todos os utilizadores e funções. Para saber sobre a definição de permissões para utilizadores e funções, consulte o 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 o mesmo cadeado dos pais. O bloqueio mais restritivo na herança tem precedência.

Os recursos de extensão herdam fechaduras do recurso a que são aplicados. Por exemplo, Microsoft.Insights/diagnosticSettings é um tipo de recurso de extensão. Se aplicar uma definição de diagnóstico a uma bolha de armazenamento e bloquear a conta de armazenamento, não poderá eliminar a definição de diagnóstico. Esta herança faz sentido porque o ID completo do recurso da definição de diagnóstico é:

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

Que corresponde ao âmbito do ID de recurso do recurso que está bloqueado:

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

Se tiver um bloqueio de exclusão de um recurso e tentar eliminar o seu grupo de recursos, a função bloqueia toda a operação de eliminação. Mesmo que o grupo de recursos ou outros recursos do grupo de recursos estejam desbloqueados, a eliminação não acontece. Nunca se tem uma supressão parcial.

Quando cancela uma subscrição do Azure:

  • Um bloqueio de recursos não bloqueia o cancelamento da subscrição.
  • O Azure preserva os seus recursos desativando-os em vez de os apagar imediatamente.
  • O Azure só apaga os seus recursos permanentemente após um período de espera.

Compreender o âmbito dos bloqueios

Nota

Os bloqueios aplicam-se apenas às operações do avião Azure e não às operações de data plane.

As operações do avião de controlo Azure vão para https://management.azure.com. As operações de avião de dados Azure vão para a sua instância de serviço, tais como https://myaccount.blob.core.windows.net/. Consulte o avião de controlo Azure e o plano de dados. Para descobrir quais as operações que utilizam o URL do plano de controlo, consulte a API AZure REST.

A distinção significa que os bloqueios protegem um recurso de alterações, mas não restringem a forma como um recurso desempenha as suas funções. Um bloqueio ReadOnly, por exemplo, num servidor Base de Dados SQL lógico, protege-o de supressões ou modificações. Permite-lhe criar, atualizar ou eliminar dados na base de dados do servidor. As operações de plano de dados permitem transações de dados. Estes pedidos não vão para https://management.azure.com.

Considerações antes de aplicar as suas fechaduras

A aplicação de fechaduras pode levar a resultados inesperados. Algumas operações, que não parecem modificar um recurso, requerem ações bloqueadas. Os bloqueios impedem o método POST de enviar dados para a API Azure Resource Manager (ARM). Alguns exemplos comuns de operações bloqueadas são:

  • Um bloqueio apenas de leitura numa conta de armazenamento impede os utilizadores de listar as chaves da conta. Um pedido DEM trata da operação Azure Storage List Keys para proteger o acesso às chaves da conta. As chaves da conta fornecem acesso total 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 precisam usar credenciais Azure AD 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 apenas de leitura numa conta de armazenamento protege as atribuições de RBAC procuradas por uma conta de armazenamento ou um contentor de dados (recipiente blob ou fila).

  • Um bloqueio não pode excluir uma conta de armazenamento não protege os dados da conta da eliminação ou modificação. Só protege a conta de armazenamento da supressão. 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 controlo do avião, o bloqueio protege esses recursos.

    Se um pedido utilizar ações de ficheiro - Eliminar, por exemplo, que é uma operação de avião de controlo, a eliminação falha. Se o pedido utilizar o Delete Share, que é uma operação de data plane, a eliminação terá sucesso. Recomendamos que utilize uma operação de avião de controlo.

  • Um bloqueio apenas de leitura numa conta de armazenamento não impede que os seus dados sejam eliminados ou modificações. Também não protege a sua bolha, fila, mesa ou dados de ficheiros.

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

  • Um bloqueio de leitura num grupo de recursos que contenha um plano de Serviço de Aplicaçõesimpede-o de se expandir ou sair do plano.

  • Um bloqueio apenas de leitura num grupo de recursos que contenha uma máquina virtual impede todos os utilizadores de iniciar ou reiniciar uma máquina virtual. Estas operações requerem um pedido de método POST.

  • 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 método POST.

  • Um bloqueio não pode eliminar um grupo de recursos impede que o Azure Resource Manager de eliminar automaticamente as implementações na história. Se chegar a 800 destacamentos na história, as suas implementações falham.

  • Um bloqueio não pode eliminar o grupo de recursos criado pelo serviço Azure Backup 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 pode eliminar um grupo de recursos que contém espaços de trabalho de aprendizagem de máquinas Azure impede que a autoscalagem dos clusters computacionais Azure Machine Learning funcionem corretamente. Com a fechadura, a autoscalagem não pode remover os nós não usados. A sua solução consome mais recursos do que o necessário para a carga de trabalho.

  • Um bloqueio apenas de leitura num espaço de trabalho do Log Analytics impede que o User and Entity Behavior Analytics (UEBA) seja ativado.

  • Um bloqueio não pode eliminar um espaço de trabalho do Log Analytics não impede operações de purga de dados, remove o papel de purga de dados do utilizador.

  • 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 só de leitura num Gateway de Aplicação impede-o de obter a saúde de backend da porta de aplicação. Essa operação usa um método POST, que bloqueia apenas a leitura.

  • Um bloqueio apenas de leitura num cluster Azure Kubernetes Service (AKS) limita a forma como pode aceder aos recursos do cluster através do portal. Uma fechadura só de leitura impede-o de utilizar a secção de recursos kubernetes do cluster AKS na portal do Azure para escolher um recurso de cluster. Estas operações requerem um pedido de autenticação do método POST.

  • Um bloqueio não pode eliminar uma máquina virtual protegida por Site Recovery impede que determinadas ligações de recursos relacionadas com Site Recovery sejam removidas corretamente quando remove a proteção ou desativa a replicação. Se pretender voltar a proteger o VM mais tarde, tem de remover a fechadura antes de desativar a proteção. Caso falhe a remoção do cadeado, tem de seguir certos passos para limpar as ligações velhas antes de poder voltar a proteger o VM. Para obter mais informações, consulte a replicação de Troubleshoot Azure VM.

Quem pode criar ou apagar fechaduras

Para criar ou eliminar bloqueios de gestão, precisa de ter acesso ou Microsoft.Authorization/locks/* açõesMicrosoft.Authorization/*. Apenas o Proprietário e o Administrador de Acesso ao Utilizador podem criar e eliminar bloqueios de gestão. Pode criar um papel personalizado com as permissões necessárias.

Aplicações e fechaduras geridas

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 deles é um grupo de recursos desbloqueado que contém uma visão geral do serviço. O outro é um grupo de recursos bloqueado que contém a infraestrutura de serviço.

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 uma aplicação do sistema é proprietária.

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

Para aplicações geridas, escolha 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. Só pode eliminá-lo indiretamente.

Mostrar grupo gerido

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

Apagar serviço

Fechaduras de configuração

Portal

No painel de navegação esquerdo, o nome da função de bloqueio de subscrição é Fechaduras de Recursos, enquanto o nome da função de bloqueio do grupo de recursos é Locks.

  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

Quando se utiliza um modelo ARM ou um ficheiro Bicep para implantar uma fechadura, é bom entender como o âmbito de implementação e o âmbito de bloqueio funcionam em conjunto. Para aplicar um bloqueio no âmbito de implantação, como bloquear um grupo de recursos ou uma subscrição, deixe a propriedade de âmbito desaparada. Ao bloquear um recurso, dentro do âmbito de implantação, desaprote a propriedade de âmbito no bloqueio.

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 de bloqueio corresponde ao âmbito de implementação. Implemente este modelo 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, use 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, use 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 criar e apagar 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 da fechadura pode ser o que quiser chamá-lo. Para a versão API, use 2016-09-01.

No pedido, inclua um objeto JSON que especifica as propriedades do bloqueio.

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

Passos seguintes