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:
- Administrador de definição de atributoe administrador de atribuição de atributo
- 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ã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.
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
.
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
Entre no portal do Azure.
Clique em Atributos de segurança personalizados do Microsoft Entra ID>.
Adicione um atributo chamado
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 atributo
Project
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.Clique em Salvar para salvar sua atribuição.
Etapa 3: Configurar marcas de índice de blob e armazenamento
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.
Crie um contêiner dentro da conta de armazenamento e defina o nível de acesso Público como Privado (sem acesso anônimo).
De definir o tipo de autenticação como Conta de Usuário do Azure Active Directory.
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
Abra uma nova guia e entre no portal do Azure.
Abra o grupo de recursos que tem a conta de armazenamento.
Clique em IAM (Controle de Acesso).
Clique na guia Atribuições de função para ver todas as atribuições de função nesse escopo.
Clique em Adicionar>Adicionar atribuição de função.
Na guia Função, selecione a função Leitor de Dados do Blob de Armazenamento.
Na guia Membros, selecione o usuário que você criou anteriormente.
(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.
Na guia Condição (opcional) , clique em Adicionar condição.
A página Adicionar condição de atribuição de função será exibida.
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.
Clique em Ler um blob e depois clique em Selecionar.
Na seção Criar expressão, clique em Adicionar.
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.
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$>] ) )
Clique em Salvar para salvar a condição.
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
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 a tecla Access.
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.
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
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
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>
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`$>]))"
De definir a
ConditionVersion
propriedade do objeto de atribuição de função.$groupRoleAssignment.ConditionVersion = "2.0"
Use Set-AzRoleAssignment para atualizar a condição da 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 um 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 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. ...
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
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
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>
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 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$>]))",
Atualize a propriedade
conditionVersion
."conditionVersion": "2.0",
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
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 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. ...
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, ... }