Compartilhar via


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

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

Pré-requisitos

Para atribuir atributos de segurança personalizados e adicionar condições de atribuições 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ão para ler, definir ou designar 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ê permitirá o acesso de leitura aos blobs se o usuário tiver um atributo de segurança personalizado que corresponde à marca de índice de blob. Isto é alcançado 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 marca de índice de Project=Baker blob. Da mesma forma, Ela só pode ler blobs com Project=Cascade.

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

Veja 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. Entre no portal do Azure.

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

  3. Adicione um atributo chamado 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 atributo Project 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. Clique em Salvar para salvar sua atribuição.

Etapa 3: Configurar marcas de índice de blob e armazenamento

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

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

  3. De definir o tipo de autenticação como Conta de Usuário do Azure Active Directory.

  4. Upload arquivos de texto para o contêiner e definir as seguintes marcas de índice de blob.

    Arquivo Chave Valor
    Arquivo de texto Baker Project Baker
    Arquivo de texto em cascata Project Cascade

    Dica

    Para obter informações sobre os caracteres permitidos para marcas de índice de blob, confira Configurar marcas de índice de blob.

Etapa 4: Atribuir a função Leitor de Dados do 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 IAM (Controle de Acesso).

  4. Clique na guia Atribuições de função para ver todas as atribuições de função nesse escopo.

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

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

  7. Na guia Membros, selecione o usuário que você criou anteriormente.

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

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

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

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

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

  11. Clique em Ler um blob e depois clique em Selecionar.

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

  13. Digite as seguintes configurações:

    Configuração Valor
    Origem do atributo Principal
    Atributo <attributeset > _Project
    Operador StringEquals
    Opção Atributo
    Origem do atributo Recurso
    Atributo Marcas de índice de blob [Valores na chave]
    Chave Project

    Observação

    Se a entidade de segurança não estiver listada como uma opção na 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 a página até Tipo de editor e clique em Código.

    Seu condição deve ser semelhante ao 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 Examinar + atribuir, clique em Examinar + atribuir para atribuir a função Leitor de Dados do Blob de Armazenamento com uma condição.

Etapa 5: Atribuir função leitor

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

    Observação

    Normalmente, você não precisa atribuir a função 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 a tecla Access.

    Screenshot of storage container with test files.

  5. Clique no arquivo de texto Demão.

    VOCÊ NÃO deve ser capaz de exibir ou baixar o blob e uma mensagem com falha de autorização deve ser exibida.

  6. Clique em Arquivo de texto em cascata.

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

PowerShell do Azure

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 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 que você adicionou ao grupo de segurança.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. De definir a Condition propriedade do objeto de atribuição de função. Use 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. De definir a ConditionVersion propriedade do objeto de atribuição de função.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Use Set-AzRoleAssignment para atualizar a condição da 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 um 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 conseguir ler o blob e uma mensagem com 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 Cascade.

    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 o 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 diretório como Administrador de Controle de Acesso Baseado em Função.

    az login
    
  2. Use az role assignment listt para obter a atribuição de função que você adicionou 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 propriedade condition. Use 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 propriedade conditionVersion.

    "conditionVersion": "2.0",
    
  6. Use az role assignment update para atualizar a condição da 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 conseguir ler o blob e uma mensagem com falha de autorização deve ser exibida.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Use az storage blob showpara 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óximas etapas