Partilhar via


Permitir acesso de leitura a blobs com base em tags e atributos de segurança personalizados

Neste artigo, você aprenderá a permitir acesso de leitura a blobs com base em tags de índice de blob e atributos de segurança personalizados usando condições de controle de acesso baseado em atributos (ABAC). Isso pode facilitar o gerenciamento do acesso a blobs.

Pré-requisitos

Para atribuir atributos de segurança personalizados e adicionar condições de atribuição de função em seu locatário do Microsoft Entra, você precisa:

Importante

Por padrão, o Administrador Global e outras funções de administrador não têm permissões para ler, definir ou atribuir atributos de segurança personalizados. Se você não atender a esses pré-requisitos, não verá os atributos principal/usuário no editor de condições.

Condição

Neste artigo, você permite acesso de leitura a blobs se o usuário tiver um atributo de segurança personalizado que corresponda à marca de índice de blob. Isso é feito adicionando uma condição à atribuição de função.

Diagram of role assignment with a condition.

Por exemplo, se Brenda tiver o atributo Project=Baker, ela só poderá ler blobs com a tag de índice de Project=Baker blob. Da mesma forma, Chandra só pode ler bolhas com Project=Cascade.

Diagram showing read access to blobs based on tags and custom security attributes.

Aqui está a aparência da condição no código:

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
 )
 OR 
 (
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
 )
)

Para obter mais informações sobre condições, consulte O que é o controle de acesso baseado em atributos do Azure (Azure ABAC)?.

Etapa 1: adicionar um novo atributo de segurança personalizado

  1. Inicie sessão no portal do Azure.

  2. Clique em Atributos de segurança personalizados do Microsoft Entra ID>.

  3. Adicione um atributo nomeado Project com valores de Baker e Cascade. Ou use um atributo existente. Para obter mais informações, consulte Adicionar ou desativar atributos de segurança personalizados no Microsoft Entra ID.

    Screenshot of adding a custom security attribute.

Etapa 2: atribuir o atributo de segurança personalizado a um usuário

  1. No Microsoft Entra ID, crie um grupo de segurança.

  2. Adicione um usuário como membro do grupo.

  3. Atribua o Project atributo com um valor de Cascade ao usuário. Para obter mais informações, consulte Atribuir, atualizar, listar ou remover atributos de segurança personalizados para um usuário.

    Screenshot of assigning a custom security attribute.

  4. Certifique-se de clicar em Salvar para salvar sua atribuição.

Etapa 3: configurar tags de armazenamento e índice de blob

  1. Crie uma conta de armazenamento que seja compatível com o recurso de tags de índice de blob. Para obter mais informações, consulte Gerenciar e localizar dados de Blob do Azure com marcas de índice de blob.

  2. Crie um novo contêiner dentro da conta de armazenamento e defina o nível de acesso público como Privado (sem acesso anônimo).

  3. Defina o tipo de autenticação como Conta de Usuário do Azure AD.

  4. Carregue arquivos de texto para o contêiner e defina as seguintes tags de índice de blob.

    Ficheiro Key valor
    Arquivo de texto Baker Projeto Padeiro
    Arquivo de texto em cascata Projeto Cascade

    Gorjeta

    Para obter informações sobre os caracteres permitidos para tags de índice de blob, consulte Definindo tags de índice de blob.

Etapa 4: Atribuir a função de Leitor de Dados de Blob de Armazenamento com uma condição

  1. Abra uma nova guia e entre no portal do Azure.

  2. Abra o grupo de recursos que tem a conta de armazenamento.

  3. Clique em Controlo de acesso (IAM).

  4. Clique na guia Atribuições de função para exibir as atribuições de função neste escopo.

  5. Clique em Adicionar>atribuição de função.

  6. Na guia Função, selecione a função Leitor de Dados de Blob de Armazenamento.

  7. Na guia Membros, selecione o grupo de segurança criado anteriormente.

  8. (Opcional) Na caixa Descrição , insira Acesso de leitura a blobs se o usuário tiver um atributo de segurança personalizado que corresponda à marca de índice de blob.

  9. Na guia Condições (opcional), clique em Adicionar condição.

    A página Adicionar condição de atribuição de função é exibida.

  10. Na seção Adicionar ação, clique em Adicionar ação.

    O painel Selecione uma ação é exibido. Este painel é uma lista filtrada de ações de dados com base na atribuição de função que será o destino da sua condição.

  11. Clique em Ler um blob e, em seguida, clique em Selecionar.

  12. Na seção Construir expressão, clique em Adicionar.

  13. Introduza as seguintes definições:

    Definição valor
    Origem do atributo Principal
    Atributo <conjunto de atributos>_Project
    Operador StringEquals
    Opção Atributo
    Origem do atributo Recurso
    Atributo Tags de índice de blob [Valores na chave]
    Key Projeto

    Nota

    Se Principal não estiver listado como uma opção em Origem do atributo, certifique-se de ter definido o atributo de segurança personalizado conforme descrito anteriormente na Etapa 1: Adicionar um novo atributo de segurança personalizado.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. Role para cima até Tipo de editor e clique em Código.

    A sua condição deve ser semelhante à seguinte:

    (
     (
      !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
     )
     OR 
     (
      @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
     )
    )
    
  15. Clique em Salvar para salvar a condição.

  16. Na guia Revisar + atribuir, clique em Revisar + atribuir para atribuir a função Leitor de Dados de Blob de Armazenamento com uma condição.

Etapa 5: Atribuir função de leitor

  • Repita as etapas anteriores para atribuir a função Leitor para o grupo de segurança no escopo do grupo de recursos.

    Nota

    Normalmente, não é necessário atribuir a função de Leitor. No entanto, isso é feito para que você possa testar a condição usando o portal do Azure.

Etapa 6: Testar a condição

  1. Em uma nova janela, abra o portal do Azure.

  2. Entre como o usuário que você criou com o Project=Cascade atributo de segurança personalizado.

  3. Abra a conta de armazenamento e o contêiner que você criou.

  4. Verifique se o método de autenticação está definido como Conta de Usuário do Azure AD e não como Chave de acesso.

    Screenshot of storage container with test files.

  5. Clique no arquivo de texto Baker.

    Você NÃO deve ser capaz de visualizar ou baixar o blob e uma mensagem de falha de autorização deve ser exibida.

  6. Clique em Arquivo de texto em cascata.

    Você deve ser capaz de visualizar e baixar o blob.

Azure PowerShell

Você também pode usar o Azure PowerShell para adicionar condições de atribuição de função. Os comandos a seguir mostram como adicionar condições. Para obter informações, consulte Tutorial: Adicionar uma condição de atribuição de função para restringir o acesso a blobs usando o Azure PowerShell.

Adicionar uma condição

  1. Use o comando Connect-AzAccount e siga as instruções que aparecem para entrar no seu diretório como Administrador de Controle de Acesso Baseado em Função.

    Connect-AzAccount
    
  2. Use Get-AzRoleAssignment para obter a atribuição de função atribuída ao grupo de segurança.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Defina a Condition propriedade do objeto de atribuição de função. Certifique-se de usar o nome do conjunto de atributos.

    $groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
    
  4. Defina a ConditionVersion propriedade do objeto de atribuição de função.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Use Set-AzRoleAssignment para atualizar a atribuição de função.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Testar a condição

  1. Em uma nova janela do PowerShell, use o comando Connect-AzAccount para entrar como membro do grupo de segurança.

    Connect-AzAccount
    
  2. Use New-AzStorageContext para definir o contexto da conta de armazenamento.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Use Get-AzStorageBlob para tentar ler o arquivo Baker.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
    

    Você NÃO deve ser capaz de ler o blob e uma mensagem de falha de autorização deve ser exibida.

    Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code:
    403 - HTTP Error Message: This request is not authorized to perform this operation using this permission.
    ...
    
  4. Use Get-AzStorageBlob para tentar ler o arquivo em cascata.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx
    You should be able to read the blob.
    AccountName: <storageAccountName>, ContainerName: <containerName>
    
    Name                 BlobType  Length          ContentType                    LastModified         AccessTier SnapshotT
                                                                                                                  ime
    ----                 --------  ------          -----------                    ------------         ---------- ---------
    CascadeFile.txt      BlockBlob 7               text/plain                     2021-04-24 05:35:24Z Hot
    

CLI do Azure

Você também pode usar a CLI do Azure para adicionar condições de atribuições de função. Os comandos a seguir mostram como adicionar condições. Para obter informações, consulte Tutorial: Adicionar uma condição de atribuição de função para restringir o acesso a blobs usando a CLI do Azure.

Adicionar uma condição

  1. Use o comando az login e siga as instruções que aparecem para entrar no seu diretório como Administrador de Controle de Acesso Baseado em Função.

    az login
    
  2. Use az role assignment list para obter a atribuição de função atribuída ao grupo de segurança.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Crie um arquivo JSON com o seguinte formato.

    {
        "canDelegate": null,
        "condition": "",
        "conditionVersion": "",
        "description": "",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{groupObjectId}",
        "principalName": "{principalName}",
        "principalType": "Group",
        "resourceGroup": "{resourceGroup}",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
        "type": "Microsoft.Authorization/roleAssignments"
    }
    
  4. Atualize a condition propriedade. Certifique-se de usar o nome do conjunto de atributos.

    "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
    
  5. Atualize a conditionVersion propriedade.

    "conditionVersion": "2.0",
    
  6. Use az role assignment update para adicionar a condição à atribuição de função.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

Testar a condição

  1. Em uma nova janela de comando, use o comando az login para entrar como membro do grupo de segurança.

    az login
    
  2. Use az storage blob show para tentar ler as propriedades do arquivo Baker.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
    

    Você NÃO deve ser capaz de ler o blob e uma mensagem de falha de autorização deve ser exibida.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Use az storage blob show para tentar ler as propriedades do arquivo Cascade.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login
    You should be able to read the blob.
    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
    ...
    }
    

Próximos passos