Compartilhar via


Entender o escopo do RBAC do Azure

Escopo é o conjunto de recursos aos quais o acesso se aplica. Quando você atribui uma função, é importante entender o escopo para que você possa conceder a uma entidade de segurança apenas o acesso de que ela realmente precisa. Ao limitar o escopo, você limita quais recursos estarão em risco se a entidade de segurança for comprometida.

Níveis de escopo

No Azure, você pode especificar um escopo em quatro níveis: grupo de gerenciamento, assinatura, grupo de recursos e recurso. Os escopos são estruturados em uma relação pai-filho. Cada nível de hierarquia torna o escopo mais específico. Você pode atribuir funções em qualquer um desses níveis de escopo. O nível selecionado determina a ampla aplicação da função. Níveis mais baixos herdam permissões de função de níveis mais altos.

Diagrama do escopo de uma atribuição de função.

Os grupos de gerenciamento são um nível de escopo acima das assinaturas, mas os grupos de gerenciamento dão suporte a hierarquias mais complexas. O diagrama a seguir mostra um exemplo de uma hierarquia de grupos de gerenciamento e assinaturas que você pode definir. Para obter mais informações sobre grupos de gerenciamento, consulte O que são grupos de gerenciamento do Azure?.

Diagrama do grupo de gerenciamento e da hierarquia de assinatura.

Formato de escopo

Se você atribuir funções usando a linha de comando, precisará especificar o escopo. Para ferramentas de linha de comando, o escopo é uma cadeia de caracteres potencialmente longa que identifica o escopo exato da atribuição de função. No portal do Azure, esse escopo normalmente é listado como a ID do recurso.

O escopo consiste em uma série de identificadores separados pelo caractere de barra (/). Você pode pensar nessa cadeia de caracteres como expressando a seguinte hierarquia, em que texto sem espaços reservados ({}) são identificadores fixos:

/subscriptions
    /{subscriptionId}
        /resourcegroups
            /{resourceGroupName}
                /providers
                    /{providerName}
                        /{resourceType}
                            /{resourceSubType1}
                                /{resourceSubType2}
                                    /{resourceName}
  • {subscriptionId} é a ID da assinatura a ser usada (um GUID).
  • {resourceGroupName} é o nome do grupo de recursos que contém.
  • {providerName}é o nome do provedor de recursos que manipula o recurso e {resourceType} identifica {resourceSubType*} níveis adicionais dentro desse provedor de recursos.
  • {resourceName} é a última parte da cadeia de caracteres que identifica um recurso específico.

Os grupos de gerenciamento são um nível acima das assinaturas e têm o escopo mais amplo (menos específico). As atribuições de função nesse nível se aplicam a assinaturas dentro do grupo de gerenciamento. O escopo de um grupo de gerenciamento tem o seguinte formato:

/providers
    /Microsoft.Management
        /managementGroups
            /{managementGroupName}

Exemplos de escopo

Scope Example
Grupo de gerenciamento /providers/Microsoft.Management/managementGroups/marketing-group
Subscription /subscriptions/00000000-0000-0000-0000-000000000000
Grupo de recursos /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
Resource /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVirtualNetwork12345

Como determinar o escopo de um recurso

É bastante simples determinar o escopo de um grupo de gerenciamento, assinatura ou grupo de recursos. Você só precisa saber o nome e a ID da assinatura. No entanto, determinar o escopo de um recurso requer um pouco mais de trabalho. Aqui estão algumas maneiras de determinar o escopo de um recurso.

  • No portal do Azure, abra o recurso e examine as propriedades. O recurso deve listar a ID do recurso em que você pode determinar o escopo. Por exemplo, aqui estão as IDs de recurso de uma conta de armazenamento.

    Captura de tela das IDs de recurso de uma conta de armazenamento no portal do Azure.

  • Outra maneira é usar o portal do Azure para atribuir uma função temporariamente no escopo do recurso e, em seguida, usar o Azure PowerShell ou a CLI do Azure para listar a atribuição de função. Na saída, o escopo será listado como uma propriedade.

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01/pro
                         viders/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01
    DisplayName        : User
    SignInName         : user@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <principalId>
    ObjectType         : User
    CanDelegate        : False
    Description        :
    ConditionVersion   :
    Condition          :
    
    {
        "canDelegate": null,
        "condition": null,
        "conditionVersion": null,
        "description": null,
        "id": "/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{principalId}",
        "principalName": "user@contoso.com",
        "principalType": "User",
        "resourceGroup": "test-rg",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01",
        "type": "Microsoft.Authorization/roleAssignments"
      }
    

Escopo e modelos do ARM

Uma atribuição de função é um tipo especial do Azure Resource Manager chamado recurso de extensão. Um recurso de extensão é um recurso que adiciona aos recursos de outro recurso. Eles sempre existem como uma extensão (como um filho) de outro recurso. Por exemplo, uma atribuição de função no escopo da assinatura é um recurso de extensão da assinatura. O nome de uma atribuição de função é sempre o nome do recurso que você está estendendo acrescido de /Microsoft.Authorization/roleAssignments/{roleAssignmentId}. Ao atribuir funções usando o modelo do ARM (modelo do Azure Resource Manager), normalmente você não precisa fornecer o escopo. O motivo é que o campo de escopo acaba sendo sempre a ID do recurso que você está estendendo. O escopo pode ser determinado a partir da ID da atribuição de função em si. A tabela a seguir mostra exemplos de uma ID de atribuição de função e o escopo correspondente:

ID de atribuição de função Scope
/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId} /subscriptions/{subscriptionId}
/subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId} /subscriptions/{subscriptionId}/resourceGroups/Example-Storage-rg

Para obter mais informações sobre escopo e modelos do ARM, consulte Atribuir funções do Azure usando modelos do Azure Resource Manager. Para obter uma lista completa dos tipos de recursos de extensão, consulte os tipos de recursos que estendem os recursos de outros recursos.

Próximas etapas