Modelo de controle de acesso no Azure Data Lake Storage Gen2

O Data Lake Storage Gen2 suporta os seguintes mecanismos de autorização:

  • Autorização de chave compartilhada
  • Autorização de assinatura de acesso compartilhado (SAS)
  • Controle de acesso baseado em função (Azure RBAC)
  • Controle de acesso baseado em atributos (Azure ABAC)
  • Listas de controlo de acesso (ACL)

A autorização de Chave Compartilhada e SAS concede acesso a um usuário (ou aplicativo) sem exigir que ele tenha uma identidade no Microsoft Entra ID. Com essas duas formas de autenticação, o Azure RBAC, o Azure ABAC e as ACLs não têm efeito.

O RBAC do Azure e a ACL exigem que o usuário (ou aplicativo) tenha uma identidade na ID do Microsoft Entra. O RBAC do Azure permite conceder acesso "grosseiro" aos dados da conta de armazenamento, como acesso de leitura ou gravação a todos os dados em uma conta de armazenamento. O Azure ABAC permite refinar as atribuições de função RBAC adicionando condições. Por exemplo, você pode conceder acesso de leitura ou gravação a todos os objetos de dados em uma conta de armazenamento que tenham uma marca específica. As ACLs permitem conceder acesso "refinado", como acesso de gravação a um diretório ou arquivo específico.

Este artigo se concentra no RBAC, ABAC e ACLs do Azure e como o sistema os avalia juntos para tomar decisões de autorização para recursos de conta de armazenamento.

Controle de acesso baseado em função (Azure RBAC)

O RBAC do Azure usa atribuições de função para aplicar conjuntos de permissões a entidades de segurança. Uma entidade de segurança é um objeto que representa um usuário, grupo, entidade de serviço ou identidade gerenciada definida na ID do Microsoft Entra. Um conjunto de permissões pode dar a uma entidade de segurança um nível de acesso "grosseiro", como acesso de leitura ou gravação a todos os dados em uma conta de armazenamento ou a todos os dados em um contêiner.

As funções a seguir permitem que uma entidade de segurança acesse dados em uma conta de armazenamento.

Função Descrição
Proprietário dos Dados do Armazenamento de Blobs Acesso total a contêineres e dados de armazenamento de Blob. Esse acesso permite que a entidade de segurança defina um item para o proprietário e modifique as ACLs de todos os itens.
Contribuinte de Dados do Armazenamento de Blobs Leia, escreva e elimine o acesso a contentores e blobs de armazenamento de Blobs. Esse acesso não permite que a entidade de segurança defina a propriedade de um item, mas pode modificar a ACL de itens que pertencem à entidade de segurança.
Leitor de Dados do Armazenamento de Blobs Leia e liste contêineres e blobs de armazenamento de Blobs.

Funções como Proprietário, Colaborador, Leitor e Colaborador da Conta de Armazenamento permitem que uma entidade de segurança gerencie uma conta de armazenamento, mas não fornecem acesso aos dados dessa conta. No entanto, essas funções (excluindo o Reader) podem obter acesso às chaves de armazenamento, que podem ser usadas em várias ferramentas de cliente para acessar os dados.

Controle de acesso baseado em atributos (Azure ABAC)

O Azure ABAC baseia-se no RBAC do Azure adicionando condições de atribuição de função com base em atributos no contexto de ações específicas. Uma condição de atribuição de função é uma verificação adicional que você pode, opcionalmente, adicionar à sua atribuição de função para fornecer um controle de acesso mais refinado. Não é possível negar explicitamente o acesso a recursos específicos usando condições.

Para obter mais informações sobre como usar o Azure ABAC para controlar o acesso ao Armazenamento do Azure, consulte Autorizar o acesso ao Armazenamento de Blobs do Azure usando as condições de atribuição de função do Azure.

Listas de controlo de acesso (ACL)

As ACLs oferecem a capacidade de aplicar um nível "mais refinado" de acesso a diretórios e arquivos. Uma ACL é uma construção de permissão que contém uma série de entradas de ACL. Cada entrada de ACL associa a entidade de segurança a um nível de acesso. Para saber mais, consulte Listas de controle de acesso (ACLs) no Azure Data Lake Storage Gen2.

Como são avaliadas as permissões

Durante a autorização baseada em entidade de segurança, as permissões são avaliadas conforme mostrado no diagrama a seguir.

data lake storage permission flow

  1. O Azure determina se existe uma atribuição de função para a entidade de segurança.
    • Se existir uma atribuição de função, as condições de atribuição de função (2) serão avaliadas em seguida.
    • Caso contrário, as LCA (4) são avaliadas em seguida.
  2. O Azure determina se existem condições de atribuição de função ABAC.
    • Se não existirem condições, o acesso é concedido.
    • Se existirem condições, são avaliadas para ver se correspondem ao pedido (3).
  3. O Azure determina se todas as condições de atribuição de função ABAC correspondem aos atributos da solicitação.
    • Se todos corresponderem, o acesso é concedido.
    • Se pelo menos um deles não corresponder, as LCA (4) são avaliadas em seguida.
  4. Se o acesso não tiver sido explicitamente concedido após a avaliação das atribuições e condições de função, as ACLs serão avaliadas.
    • Se as ACLs permitirem o nível de acesso solicitado, o acesso será concedido.
    • Caso contrário, o acesso é negado.

Importante

Devido à maneira como as permissões de acesso são avaliadas pelo sistema, não é possível usar uma ACL para restringir o acesso que já foi concedido por uma atribuição de função e suas condições. Isso ocorre porque o sistema avalia as atribuições e condições de função do Azure primeiro e, se a atribuição conceder permissão de acesso suficiente, as ACLs serão ignoradas.

O diagrama a seguir mostra o fluxo de permissão para três operações comuns: listar o conteúdo do diretório, ler um arquivo e gravar um arquivo.

data lake storage permission flow example

Tabela de permissões: combinando RBAC, ABAC e ACLs do Azure

A tabela a seguir mostra como combinar funções, condições e entradas de ACL do Azure para que uma entidade de segurança possa executar as operações listadas na coluna Operação . Esta tabela mostra uma coluna que representa cada nível de uma hierarquia de diretórios fictícia. Há uma coluna para o diretório raiz do contêiner (/), um subdiretório chamado Oregon, um subdiretório do diretório Oregon chamado Portland e um arquivo de texto no diretório Portland chamado Data.txt. Aparecem nessas colunas representações de forma curta da entrada ACL necessária para conceder permissões. N/D (Não aplicável) aparece na coluna se uma entrada ACL não for necessária para executar a operação.

Operação Função do Azure atribuída (com ou sem condições) / Oregon/ Portland/ Dados.txt
Leia os dados.txt Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
None --X --X --X R--
Anexar aos dados.txt Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento --X --X --X -W-
None --X --X --X RW-
Excluir dados.txt Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento --X --X -WX N/A
None --X --X -WX N/A
Criar dados.txt Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento --X --X -WX N/A
None --X --X -WX N/A
Lista / Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
None R-X N/A N/D N/A
Lista /Oregon/ Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
None --X R-X N/A N/A
Lista /Oregon/Portland/ Proprietário de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Contribuidor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
Leitor de Dados de Blobs de Armazenamento N/A N/D N/D N/A
None --X --X R-X N/A

Nota

Para exibir o conteúdo de um contêiner no Gerenciador de Armazenamento do Azure, as entidades de segurança devem entrar no Gerenciador de Armazenamento usando a ID do Microsoft Entra e (no mínimo) ter acesso de leitura (R--) à pasta raiz (\) de um contêiner. Este nível de permissão dá-lhes a capacidade de listar o conteúdo da pasta raiz. Se não quiser que o conteúdo da pasta raiz fique visível, pode atribuir-lhes a função de Leitor . Com essa função, eles poderão listar os contêineres na conta, mas não o conteúdo do contêiner. Em seguida, você pode conceder acesso a diretórios e arquivos específicos usando ACLs.

Grupos de segurança

Sempre use grupos de segurança do Microsoft Entra como a entidade de segurança atribuída em uma entrada ACL. Resista à oportunidade de atribuir diretamente usuários individuais ou entidades de serviço. O uso dessa estrutura permitirá que você adicione e remova usuários ou entidades de serviço sem a necessidade de reaplicar ACLs a uma estrutura de diretórios inteira. Em vez disso, você pode simplesmente adicionar ou remover usuários e entidades de serviço do grupo de segurança apropriado do Microsoft Entra.

Existem muitas maneiras diferentes de criar grupos. Por exemplo, imagine que você tenha um diretório chamado /LogData que contém dados de log gerados pelo servidor. O Azure Data Factory (ADF) ingere dados nessa pasta. Usuários específicos da equipe de engenharia de serviço carregarão logs e gerenciarão outros usuários dessa pasta, e vários clusters Databricks analisarão logs dessa pasta.

Para habilitar essas atividades, você pode criar um grupo e um LogsWriterLogsReader grupo. Em seguida, você pode atribuir permissões da seguinte maneira:

  • Adicione o LogsWriter grupo à ACL do diretório /LogData com rwx permissões.
  • Adicione o LogsReader grupo à ACL do diretório /LogData com r-x permissões.
  • Adicione o objeto principal de serviço ou a Identidade de Serviço Gerenciado (MSI) do ADF ao LogsWriters grupo.
  • Adicione usuários da equipe de engenharia de serviço ao LogsWriter grupo.
  • Adicione o objeto principal de serviço ou MSI para Databricks ao LogsReader grupo.

Se um usuário da equipe de engenharia de serviço deixar a empresa, você pode simplesmente removê-lo do LogsWriter grupo. Se você não adicionou esse usuário a um grupo, mas em vez disso, adicionou uma entrada ACL dedicada para esse usuário, você teria que remover essa entrada ACL do diretório /LogData . Você também teria que remover a entrada de todos os subdiretórios e arquivos em toda a hierarquia de diretórios do diretório /LogData .

Para criar um grupo e adicionar membros, consulte Criar um grupo básico e adicionar membros usando a ID do Microsoft Entra.

Importante

O Azure Data Lake Storage Gen2 depende da ID do Microsoft Entra para gerenciar grupos de segurança. O Microsoft Entra ID recomenda que você limite a associação de grupo para uma determinada entidade de segurança a menos de 200. Esta recomendação deve-se a uma limitação de JSON Web Tokens (JWT) que fornecem informações de associação de grupo de uma entidade de segurança em aplicativos Microsoft Entra. Exceder esse limite pode levar a problemas de desempenho inesperados com o Data Lake Storage Gen2. Para saber mais, consulte Configurar declarações de grupo para aplicativos usando a ID do Microsoft Entra.

Limites nas atribuições de função do Azure e entradas de ACL

Ao usar grupos, é menos provável que você exceda o número máximo de atribuições de função por assinatura e o número máximo de entradas de ACL por arquivo ou diretório. A tabela a seguir descreve esses limites.

Mecanismo Âmbito Limites Nível de permissão suportado
RBAC do Azure Contas de armazenamento, contêineres.
Atribuições de função do Azure entre recursos no nível de assinatura ou grupo de recursos.
4000 atribuições de função do Azure em uma assinatura Funções do Azure (internas ou personalizadas)
ACL Diretório, arquivo 32 entradas ACL (efetivamente 28 entradas ACL) por arquivo e por diretório. Cada uma das ACLs de acesso e de predefinição tem o seu próprio limite de 32 entradas ACL. Permissão de ACL

Autorização de Chave Partilhada e Assinatura de Acesso Partilhado (SAS)

O Azure Data Lake Storage Gen2 também suporta métodos de Chave Partilhada e SAS para autenticação. Uma característica desses métodos de autenticação é que nenhuma identidade está associada ao chamador e, portanto, a autorização baseada em permissão da entidade de segurança não pode ser executada.

No caso da Chave Compartilhada, o chamador efetivamente ganha acesso de "superusuário", o que significa acesso total a todas as operações em todos os recursos, incluindo dados, proprietário da configuração e alteração de ACLs.

Os tokens SAS incluem permissões permitidas como parte do token. As permissões incluídas no token SAS são efetivamente aplicadas a todas as decisões de autorização, mas nenhuma verificação adicional de ACL é executada.

Próximos passos

Para saber mais sobre listas de controle de acesso, consulte Listas de controle de acesso (ACLs) no Azure Data Lake Storage Gen2.