Compreender o escopo do RBAC do Azure

Escopo é o conjunto de recursos ao qual 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 estão em risco se a entidade de segurança for comprometida.

Níveis de âmbito

No Azure, você pode especificar um escopo em quatro níveis: grupo de gerenciamento, assinatura, grupo de recursos e recurso. Os âmbitos são estruturados numa relação de principal-subordinado. Cada nível de hierarquia torna o âmbito mais específico. Você pode atribuir funções em qualquer um desses níveis de escopo. O nível selecionado determina a extensão da aplicação da função. Níveis inferiores herdam permissões de função de níveis superiores.

Scope for a role assignment

Os grupos de gerenciamento são um nível de escopo acima das assinaturas, mas os grupos de gerenciamento oferecem 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?.

Management group and subscription hierarchy

Formato do âmbito

Se você atribuir funções usando a linha de comando, precisará especificar o escopo. Para ferramentas de linha de comando, 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, onde texto sem espaços reservados ({}) são identificadores fixos:

/subscriptions
    /{subscriptionId}
        /resourcegroups
            /{resourceGroupName}
                /providers
                    /{providerName}
                        /{resourceType}
                            /{resourceSubType1}
                                /{resourceSubType2}
                                    /{resourceName}

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

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

Exemplos de âmbito

Âmbito Exemplo
Grupo de gestão /providers/Microsoft.Management/managementGroups/marketing-group
Subscrição /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 o 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 onde você pode determinar o escopo. Por exemplo, aqui estão os IDs de recurso para uma conta de armazenamento.

    Screenshot that shows resource IDs for a storage account in Azure portal.

  • 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"
      }
    

Modelos de escopo e ARM

Uma atribuição de função é um tipo especial no Azure Resource Manager chamado recurso de extensão. Um recurso de extensão é um recurso que se soma aos recursos de outro recurso. Eles sempre existem como uma extensão (como uma criança) 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 mais /Microsoft.Authorization/roleAssignments/{roleAssignmentId}. Ao atribuir funções usando o modelo do Azure Resource Manager (modelo ARM), normalmente não é necessário fornecer o escopo. O motivo é que o campo de escopo acaba sempre sendo o ID do recurso que você está estendendo. O escopo pode ser determinado a partir da ID da própria atribuição de função. 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 Âmbito
/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 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 Tipos de recursos que estendem os recursos de outros recursos.

Próximos passos