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:
- Administrador de Definição de Atributos e Administrador de Atribuição de Atributos
- Administrador de controle de acesso baseado em função
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.
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
.
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
Inicie sessão no portal do Azure.
Clique em Atributos de segurança personalizados do Microsoft Entra ID>.
Adicione um atributo nomeado
Project
com valores deBaker
eCascade
. Ou use um atributo existente. Para obter mais informações, consulte Adicionar ou desativar atributos de segurança personalizados no Microsoft Entra ID.
Etapa 2: atribuir o atributo de segurança personalizado a um usuário
No Microsoft Entra ID, crie um grupo de segurança.
Adicione um usuário como membro do grupo.
Atribua o
Project
atributo com um valor deCascade
ao usuário. Para obter mais informações, consulte Atribuir, atualizar, listar ou remover atributos de segurança personalizados para um usuário.Certifique-se de clicar em Salvar para salvar sua atribuição.
Etapa 3: configurar tags de armazenamento e índice de blob
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.
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).
Defina o tipo de autenticação como Conta de Usuário do Azure AD.
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
Abra uma nova guia e entre no portal do Azure.
Abra o grupo de recursos que tem a conta de armazenamento.
Clique em Controlo de acesso (IAM).
Clique na guia Atribuições de função para exibir as atribuições de função neste escopo.
Clique em Adicionar>atribuição de função.
Na guia Função, selecione a função Leitor de Dados de Blob de Armazenamento.
Na guia Membros, selecione o grupo de segurança criado anteriormente.
(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.
Na guia Condições (opcional), clique em Adicionar condição.
A página Adicionar condição de atribuição de função é exibida.
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.
Clique em Ler um blob e, em seguida, clique em Selecionar.
Na seção Construir expressão, clique em Adicionar.
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.
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$>] ) )
Clique em Salvar para salvar a condição.
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
Em uma nova janela, abra o portal do Azure.
Entre como o usuário que você criou com o
Project=Cascade
atributo de segurança personalizado.Abra a conta de armazenamento e o contêiner que você criou.
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.
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.
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
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
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>
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`$>]))"
Defina a
ConditionVersion
propriedade do objeto de atribuição de função.$groupRoleAssignment.ConditionVersion = "2.0"
Use Set-AzRoleAssignment para atualizar a atribuição de função.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Testar a condição
Em uma nova janela do PowerShell, use o comando Connect-AzAccount para entrar como membro do grupo de segurança.
Connect-AzAccount
Use New-AzStorageContext para definir o contexto da conta de armazenamento.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
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. ...
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
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
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>
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" }
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$>]))",
Atualize a
conditionVersion
propriedade."conditionVersion": "2.0",
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
Em uma nova janela de comando, use o comando az login para entrar como membro do grupo de segurança.
az login
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. ...
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, ... }