Dimensionar o gerenciamento de atribuições de função do Azure usando condições e atributos de segurança personalizados

O controle de acesso baseado em função do Azure (Azure RBAC) tem um limite de atribuições de função por assinatura. Se você precisar criar centenas ou até milhares de atribuições de função do Azure, poderá encontrar esse limite. Gerenciar centenas ou milhares de atribuições de função pode ser difícil. Dependendo do cenário, você poderá reduzir o número de atribuições de função e facilitar o gerenciamento do acesso.

Este artigo descreve uma solução para dimensionar o gerenciamento de atribuições de função usando condições de controle de acesso baseado em atributos do Azure (Azure ABAC) e atributos de segurança personalizados do Microsoft Entra para entidades de segurança.

Cenário de exemplo

Considere uma empresa chamada Contoso com milhares de clientes que deseja configurar a seguinte configuração:

  • Distribua dados de clientes em 128 contas de armazenamento por motivos de segurança e desempenho.
  • Adicione 2.000 contêineres a cada conta de armazenamento onde há um contêiner para cada cliente.
  • Represente cada cliente por uma entidade de serviço exclusiva do Microsoft Entra.
  • Permita que cada cliente acesse objetos em seu contêiner, mas não outros contêineres.

Essa configuração pode potencialmente exigir 256.000 atribuições de função de Proprietário de Dados de Blob de Armazenamento em uma assinatura, o que está muito além do limite de atribuições de função. Ter tantas atribuições de funções seria difícil, se não impossível, de manter.

Diagram showing thousands for role assignments.

Exemplo de solução

Uma maneira de lidar com esse cenário de maneira sustentável é usar condições de atribuição de função. O diagrama a seguir mostra uma solução para reduzir as 256.000 atribuições de função para apenas uma atribuição de função usando uma condição. A atribuição de função está em um escopo de grupo de recursos mais alto e uma condição ajuda a controlar o acesso aos contêineres. A condição verifica se o nome do contêiner corresponde ao atributo de segurança personalizado na entidade de serviço para o cliente.

Diagram showing one role assignment and a condition.

Aqui está a expressão na condição que faz esta solução funcionar:

  @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
  StringEquals
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Contosocustomer_name]

A condição completa seria semelhante à seguinte. A lista de ações pode ser ajustada apenas para as ações que você precisa.

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/permanentDelete/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read'})
  AND
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})
 )
 OR 
 (
  @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Contosocustomer_name]
 )
)

Porquê utilizar esta solução?

Há vários mecanismos de controle de acesso que você pode usar para fornecer acesso aos recursos do plano de dados.

As chaves de acesso são uma maneira comum de fornecer acesso aos recursos do plano de dados. As chaves de acesso fornecem permissões de leitura, gravação e exclusão para quem possui a chave de acesso. Isso significa que os invasores podem ter acesso aos seus dados confidenciais se conseguirem suas chaves de acesso. As chaves de acesso não têm vinculação de identidade, não têm uma expiração e são um risco de segurança para armazenar.

Como as chaves de acesso, os tokens de assinatura de acesso compartilhado (SAS) não têm vinculação de identidade, mas expiram regularmente. A falta de vinculação de identidade representa os mesmos riscos de segurança que as chaves de acesso. Você deve gerenciar a expiração para garantir que os clientes não recebam erros. Os tokens SAS exigem código adicional para gerenciar e operar diariamente e podem ser uma sobrecarga significativa para uma equipe de DevOps.

O RBAC do Azure fornece controle de acesso centralizado e refinado. O RBAC do Azure tem associação de identidade que reduz o risco de segurança. Usando condições, você pode dimensionar o gerenciamento de atribuições de função e tornar o controle de acesso mais fácil de manter porque o acesso é baseado em atributos flexíveis e dinâmicos.

Aqui estão alguns dos benefícios desta solução:

  • Controle de acesso centralizado
  • Mais fácil de manter
  • Não depende de chaves de acesso ou tokens SAS
  • Não requer que você gerencie o acesso em cada objeto
  • Pode potencialmente melhorar a sua postura de segurança

Você pode usar esta solução?

Se você tiver um cenário semelhante, siga estas etapas para ver se você poderia usar essa solução.

Etapa 1: Determinar se você atende aos pré-requisitos

Para usar esta solução, você deve ter:

Etapa 2: Identifique os atributos que você pode usar em sua condição

Há vários atributos que você pode usar em sua condição, como os seguintes:

  • Nome do contentor
  • Caminho do blob
  • Tags de índice de Blob [Chaves]
  • Tags de índice de blob [Valores na chave]

Você também pode definir seus próprios atributos de segurança personalizados para usuários, aplicativos corporativos e identidades gerenciadas.

Para obter mais informações, consulte Formato e sintaxe da condição de atribuição de função do Azure e O que são atributos de segurança personalizados na ID do Microsoft Entra?.

Etapa 3: Criar uma condição em um escopo mais alto

Crie uma ou mais atribuições de função que usem uma condição em um escopo mais alto para gerenciar o acesso. Para obter mais informações, consulte Adicionar ou editar condições de atribuição de função do Azure usando o portal do Azure.

Próximos passos