Entender 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 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 que você seleciona determina o quão amplamente a função é aplicada. Os níveis inferiores herdam as permissões de função de níveis superiores.

Scope for a role assignment

Os grupos de gerenciamento estão um nível de escopo acima das assinaturas, mas eles 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, confira O que são grupos de gerenciamento do Azure?.

Management group and subscription hierarchy

Formato do escopo

Se você atribuir funções usando a linha de comando, precisará especificar o escopo. Para as ferramentas da 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 considerar essa cadeia de caracteres como a hierarquia a seguir, em que o 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 contentor.
  • {providerName} é o nome do provedor de recursos que manipula o recurso. {resourceType} e {resourceSubType*} identificam mais níveis dentro desse provedor de recursos.
  • {resourceName} é a última parte da cadeia de caracteres que identifica um recurso específico.

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 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
            /{managmentGroupName}

Exemplos de escopo

Escopo Exemplo
Grupo de gerenciamento /providers/Microsoft.Management/managementGroups/marketing-group
Subscription /subscriptions/00000000-0000-0000-0000-000000000000
Resource group /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
Recurso /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, uma assinatura ou um grupo de recursos. Você só precisa saber o nome e a ID da assinatura. No entanto, determinar o escopo de um recurso dá um pouco mais de trabalho. Veja algumas formas 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 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 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 no Azure Resource Manager, chamado de recurso de extensão. Um recurso de extensão é um recurso que é adicionado às funcionalidades 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 aquele do recurso que você está estendendo, mais /Microsoft.Authorization/roleAssignments/{roleAssignmentId}. Ao atribuir funções com o modelo do ARM (Azure Resource Manager), você normalmente não precisa fornecer o escopo. Isso porque o campo de escopo é sempre a ID do recurso que você está estendendo. O escopo pode ser determinado com a 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 Escopo
/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 saber mais sobre o escopo e os modelos do ARM, consulte Atribuir funções do Azure com modelos do Azure Resource Manager. Para obter uma lista completa dos tipos de recursos de extensão, veja Tipos de recursos que estendem as funcionalidades de outros recursos.

Próximas etapas