Compreender o bloqueio de recursos em Azure BlueprintsUnderstand resource locking in Azure Blueprints

A criação de ambientes consistentes à escala só é verdadeiramente valiosa se houver um mecanismo para manter essa consistência.The creation of consistent environments at scale is only truly valuable if there's a mechanism to maintain that consistency. Este artigo explica como funciona o bloqueio de recursos na Azure Blueprints.This article explains how resource locking works in Azure Blueprints. Para ver um exemplo de bloqueio de recursos e aplicação de atribuições de negação, consulte o tutorial de novos recursos.To see an example of resource locking and application of deny assignments, see the protecting new resources tutorial.

Nota

Os bloqueios de recursos implantados pela Azure Blueprints são aplicados apenas aos recursos utilizados pela atribuição do projeto.Resource locks deployed by Azure Blueprints are only applied to resources deployed by the blueprint assignment. Os recursos existentes, como os de grupos de recursos que já existem, não têm fechaduras adicionadas a eles.Existing resources, such as those in resource groups that already exist, don't have locks added to them.

Modos e estados de bloqueioLocking modes and states

O modo de bloqueio aplica-se à atribuição da planta e tem três opções: Não bloquear, ler apenas, ou não excluir.Locking Mode applies to the blueprint assignment and it has three options: Don't Lock, Read Only, or Do Not Delete. O modo de bloqueio é configurado durante a colocação do artefacto durante uma atribuição de planta.The locking mode is configured during artifact deployment during a blueprint assignment. Um modo de bloqueio diferente pode ser definido atualizando a atribuição da planta.A different locking mode can be set by updating the blueprint assignment. Os modos de bloqueio, no entanto, não podem ser alterados fora das Plantas Azure.Locking modes, however, can't be changed outside of Azure Blueprints.

Os recursos criados por artefactos numa atribuição de plantas têm quatro estados: Não Bloqueados, Ler Apenas, Não Poder Editar / Excluir, ou Não Pode Excluir.Resources created by artifacts in a blueprint assignment have four states: Not Locked, Read Only, Cannot Edit / Delete, or Cannot Delete. Cada tipo de artefacto pode estar no estado não bloqueado.Each artifact type can be in the Not Locked state. Pode utilizar-se a tabela seguinte para determinar o estado de um recurso:The following table can be used to determine the state of a resource:

ModoMode Tipo de recurso de artefactoArtifact Resource Type EstadoState DescriçãoDescription
Não tranqueDon't Lock * Não trancadaNot Locked Os recursos não estão protegidos pela Azure Blueprints.Resources aren't protected by Azure Blueprints. Este estado também é utilizado para recursos adicionados a um artefacto do grupo de recursos Read Only ou Não Eliminar fora de uma atribuição de planta.This state is also used for resources added to a Read Only or Do Not Delete resource group artifact from outside a blueprint assignment.
Só de LeituraRead Only Grupo de recursosResource group Não é possível editar / EliminarCannot Edit / Delete O grupo de recursos é lido apenas e as etiquetas no grupo de recursos não podem ser modificadas.The resource group is read only and tags on the resource group can't be modified. Os recursos não bloqueados podem ser adicionados, movidos, alterados ou eliminados deste grupo de recursos.Not Locked resources can be added, moved, changed, or deleted from this resource group.
Só de LeituraRead Only Grupo de não recursosNon-resource group Só de LeituraRead Only O recurso não pode ser alterado de forma alguma.The resource can't be altered in any way. Sem alterações e não pode ser apagado.No changes and it can't be deleted.
Não apagarDo Not Delete * Não é possível apagarCannot Delete Os recursos podem ser alterados, mas não podem ser apagados.The resources can be altered, but can't be deleted. Os recursos não bloqueados podem ser adicionados, movidos, alterados ou eliminados deste grupo de recursos.Not Locked resources can be added, moved, changed, or deleted from this resource group.

Estados de bloqueio dominantesOverriding locking states

É normalmente possível que alguém com um controlo de acesso baseado em funções Azure (Azure RBAC) na subscrição, como o papel de "Proprietário", possa alterar ou eliminar qualquer recurso.It's typically possible for someone with appropriate Azure role-based access control (Azure RBAC) on the subscription, such as the 'Owner' role, to be allowed to alter or delete any resource. Este acesso não é o caso quando a Azure Blueprints aplica o bloqueio como parte de uma missão implantada.This access isn't the case when Azure Blueprints applies locking as part of a deployed assignment. Se a atribuição tiver sido definida com a opção Ler Apenas ou Não Eliminar, nem mesmo o proprietário da subscrição pode executar a ação bloqueada no recurso protegido.If the assignment was set with the Read Only or Do Not Delete option, not even the subscription owner can perform the blocked action on the protected resource.

Esta medida de segurança protege a consistência da planta definida e do ambiente que foi concebido para criar a partir de eliminação ou alteração acidental ou programática.This security measure protects the consistency of the defined blueprint and the environment it was designed to create from accidental or programmatic deletion or alteration.

Atribuir no grupo de gestãoAssign at management group

A única opção para impedir que os proprietários de subscrições retirem uma atribuição de projeto é atribuir o projeto a um grupo de gestão.The only option to prevent subscription owners from removing a blueprint assignment is to assign the blueprint to a management group. Neste cenário, apenas os proprietários do grupo de gestão têm as permissões necessárias para remover a atribuição do projeto.In this scenario, only Owners of the management group have the permissions needed to remove the blueprint assignment.

Para atribuir o projeto a um grupo de gestão em vez de uma subscrição, a chamada de API REST muda para se parecer com isto:To assign the blueprint to a management group instead of a subscription, the REST API call changes to look like this:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{assignmentMG}/providers/Microsoft.Blueprint/blueprintAssignments/{assignmentName}?api-version=2018-11-01-preview

O grupo de gestão definido deve {assignmentMG} ser dentro da hierarquia do grupo de gestão ou ser o mesmo grupo de gestão onde a definição de projeto é guardada.The management group defined by {assignmentMG} must be either within the management group hierarchy or be the same management group where the blueprint definition is saved.

O corpo de pedido da atribuição de plantas é assim:The request body of the blueprint assignment looks like this:

{
    "identity": {
        "type": "SystemAssigned"
    },
    "location": "eastus",
    "properties": {
        "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
        "blueprintId": "/providers/Microsoft.Management/managementGroups/{blueprintMG}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
        "scope": "/subscriptions/{targetSubscriptionId}",
        "parameters": {
            "storageAccountType": {
                "value": "Standard_LRS"
            },
            "costCenter": {
                "value": "Contoso/Online/Shopping/Production"
            },
            "owners": {
                "value": [
                    "johnDoe@contoso.com",
                    "johnsteam@contoso.com"
                ]
            }
        },
        "resourceGroups": {
            "storageRG": {
                "name": "defaultRG",
                "location": "eastus"
            }
        }
    }
}

A principal diferença neste órgão de pedido e uma delas a ser atribuída a uma subscrição é a properties.scope propriedade.The key difference in this request body and one being assigned to a subscription is the properties.scope property. Esta propriedade requerida deve ser definida para a subscrição a que a atribuição do projeto se aplica.This required property must be set to the subscription that the blueprint assignment applies to. A subscrição deve ser uma criança direta da hierarquia do grupo de gestão onde a atribuição do projeto está armazenada.The subscription must be a direct child of the management group hierarchy where the blueprint assignment is stored.

Nota

Um projeto atribuído ao âmbito do grupo de gestão ainda funciona como uma atribuição de projeto de nível de subscrição.A blueprint assigned to management group scope still operates as a subscription level blueprint assignment. A única diferença é onde a atribuição do projeto é armazenada para impedir que os proprietários de subscrição retirem a atribuição e as fechaduras associadas.The only difference is where the blueprint assignment is stored to prevent subscription owners from removing the assignment and associated locks.

Remoção de estados de bloqueioRemoving locking states

Se for necessário modificar ou eliminar um recurso protegido por uma atribuição, existem duas formas de o fazer.If it becomes necessary to modify or delete a resource protected by an assignment, there are two ways to do so.

  • Atualizar a atribuição da planta para um modo de bloqueio de Don't LockUpdating the blueprint assignment to a locking mode of Don't Lock
  • Eliminar a atribuição de plantasDelete the blueprint assignment

Quando a atribuição é removida, as fechaduras criadas pela Azure Blueprints são removidas.When the assignment is removed, the locks created by Azure Blueprints are removed. No entanto, o recurso é deixado para trás e teria de ser eliminado através de meios normais.However, the resource is left behind and would need to be deleted through normal means.

Como funcionam as fechaduras de plantasHow blueprint locks work

Um RBAC Azure nega que as atribuições neguem que a ação seja aplicada aos recursos de artefactos durante a atribuição de um projeto se a atribuição selecionar a opção Read Only ou Not Delete.An Azure RBAC deny assignments deny action is applied to artifact resources during assignment of a blueprint if the assignment selected the Read Only or Do Not Delete option. A ação de negação é adicionada pela identidade gerida da atribuição do projeto e só pode ser removida dos recursos do artefacto pela mesma identidade gerida.The deny action is added by the managed identity of the blueprint assignment and can only be removed from the artifact resources by the same managed identity. Esta medida de segurança impõe o mecanismo de bloqueio e impede a remoção do bloqueio da planta fora das Plantas Azure.This security measure enforces the locking mechanism and prevents removing the blueprint lock outside Azure Blueprints.

Screenshot da página Access control (I A M) e do separador de atribuições Deny para um grupo de recursos.

As propriedades de atribuição de negação de cada modo são as seguintes:The deny assignment properties of each mode are as follows:

ModoMode Permissões.AçõesPermissions.Actions Permissões.NotActionsPermissions.NotActions Diretores[i]. TipoPrincipals[i].Type Excluir os Príncipes[i]. IDExcludePrincipals[i].Id DoNotApplyToChildScopesDoNotApplyToChildScopes
Só de LeituraRead Only ** _** _ _ * /ler
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
*
_ */read
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
*
SystemDefined (Todos)SystemDefined (Everyone) design de design e definido pelo utilizador emPriciplinas excluídosblueprint assignment and user-defined in excludedPrincipals Grupo de recursos - verdadeiro; Recurso - falsoResource group - true; Resource - false
Não apagarDo Not Delete */eliminar*/delete Microsoft.Autorização/bloqueios/exclusãoMicrosoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/sub-redes/join/actionMicrosoft.Network/virtualNetwork/subnets/join/action
SystemDefined (Todos)SystemDefined (Everyone) design de design e definido pelo utilizador emPriciplinas excluídosblueprint assignment and user-defined in excludedPrincipals Grupo de recursos - verdadeiro; Recurso - falsoResource group - true; Resource - false

Importante

Azure Resource Manager caches detalhes de atribuição de funções por até 30 minutos.Azure Resource Manager caches role assignment details for up to 30 minutes. Como resultado, negar atribuições que negam que as ações sobre recursos de planta possam não estar imediatamente em vigor.As a result, deny assignments deny action's on blueprint resources may not immediately be in full effect. Durante este período de tempo, poderá ser possível eliminar um recurso destinado a ser protegido por fechaduras de plantas.During this period of time, it might be possible to delete a resource intended to be protected by blueprint locks.

Excluir um principal de uma atribuição de negaçãoExclude a principal from a deny assignment

Em alguns cenários de design ou segurança, pode ser necessário excluir um principal da atribuição de negação que a atribuição de projeto cria.In some design or security scenarios, it may be necessary to exclude a principal from the deny assignment the blueprint assignment creates. Este passo é feito na REST API, somando até cinco valores à matriz dePrincipals excluída na propriedade de fechaduras ao criar a atribuição.This step is done in REST API by adding up to five values to the excludedPrincipals array in the locks property when creating the assignment. A seguinte definição de atribuição é um exemplo de um organismo de pedido que inclui osprincipales excluídos:The following assignment definition is an example of a request body that includes excludedPrincipals:

{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "eastus",
  "properties": {
    "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
    "blueprintId": "/providers/Microsoft.Management/managementGroups/{mgId}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
    "locks": {
        "mode": "AllResourcesDoNotDelete",
        "excludedPrincipals": [
            "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
            "38833b56-194d-420b-90ce-cff578296714"
        ]
    },
    "parameters": {
      "storageAccountType": {
        "value": "Standard_LRS"
      },
      "costCenter": {
        "value": "Contoso/Online/Shopping/Production"
      },
      "owners": {
        "value": [
          "johnDoe@contoso.com",
          "johnsteam@contoso.com"
        ]
      }
    },
    "resourceGroups": {
      "storageRG": {
        "name": "defaultRG",
        "location": "eastus"
      }
    }
  }
}

Excluir uma ação de uma atribuição de negaçãoExclude an action from a deny assignment

Tal como excluir um principal numa atribuição de negação numa atribuição de um projeto, pode excluir operações específicas do fornecedor de recursos Azure.Similar to excluding a principal on a deny assignment in a blueprint assignment, you can exclude specific Azure resource provider operations. Dentro do bloco properties.locks, no mesmo local que osPrincipals excluídos, pode ser adicionado um excluindoActions:Within the properties.locks block, in the same place that excludedPrincipals is, an excludedActions can be added:

"locks": {
    "mode": "AllResourcesDoNotDelete",
    "excludedPrincipals": [
        "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
        "38833b56-194d-420b-90ce-cff578296714"
    ],
    "excludedActions": [
        "Microsoft.ContainerRegistry/registries/push/write",
        "Microsoft.Authorization/*/read"
    ]
},

Embora os Prncipals excluídos devam ser explícitos, as entradas excluídas deacções podem utilizar * para a correspondência de wildcard das operações do fornecedor de recursos.While excludedPrincipals must be explicit, excludedActions entries can make use of * for wildcard matching of resource provider operations.

Passos seguintesNext steps