Compartilhar via


403 Acesso Negado erro de autorização quando o bit sticky está habilitado no ADLS Gen2

Este artigo ajuda você a entender o sticky bit e fornece informações sobre como verificar essa configuração ao configurá-la no Azure Data Lake Storage (ADLS) Gen2 e obter problemas.

Qual é a parte pegajosa no ADLS Gen2?

Os usuários do ADLS Gen2 geralmente precisam gerenciar permissões para usuários diferentes, e uma maneira de fazer isso é usando uma ACL (lista de controle de acesso). O ACL é um sistema de controle de acesso semelhante ao POSIX com uma configuração específica chamada sticky bit que pode causar falhas de autorização. Para obter mais informações sobre o modo de controle de permissão e o sticky bit, consulte ACLs (listas de controle de acesso) no Azure Data Lake Storage Gen2.

O sticky bit é um recurso avançado que não é necessário na configuração de ACL da conta de armazenamento do ADLS Gen2. Em vez disso, você pode usar o recurso de máscara para limitar o máximo de permissões para usuários nomeados, grupos nomeados e o grupo proprietário. Isso funciona de forma semelhante ao sticky bit e é facilmente configurado no portal do Azure.

403 Erro de autorização de acesso negado

Considere o cenário a seguir.

  • Uma conta de armazenamento do ADLS Gen2 tem um contêiner chamado contêiner e um caminho de pasta chamado pasta/pasta filho.
  • Você usa o ACL como um método de autorização.
  • Na configuração de ACL da conta de armazenamento do ADLS Gen2, você é configurado com a permissão Executar (X) no diretório raiz e na pasta e com a permissão WX (Gravar e Executar) na pasta filho.
  • O sticky bit está habilitado na pasta filho.
  • Você tenta criar ou carregar um novo arquivo, por exemplo, test.txt, no caminho da pasta da Conta de Armazenamento do ADLS Gen2 container/folder/child-folder/.

Nesse cenário, você recebe um erro de autorização 403 Acesso negado.

Esse erro ocorre por dois motivos:

  • Você não tem permissões suficientes para acessar o caminho da pasta.
  • Você tem permissões suficientes, mas habilitar o sticky bit faz com que você não seja o proprietário desse caminho de pasta.

Identifique se o sticky bit causa um erro 403 de acesso negado

Verifique a configuração de ACL da pasta e das pastas pai e compare-a com os cenários comuns relacionados às permissões de ACL. Se as permissões forem suficientes, o erro 403 pode ser causado pelo sticky bit.

Verificar a configuração de sticky bit usando a CLI do Azure

Há muitas maneiras de verificar essa configuração, como uma chamada à API REST, um comando do PowerShell e a CLI do Azure. Recomendamos a opção CLI do Azure porque ela não requer a instalação de nenhum software extra e o comando é fácil de entender.

Para verificar a configuração de sticky bit usando a CLI do Azure, siga estas etapas:

  1. Entre no portal do Azure com sua conta. Verifique se essa conta tem a atribuição de função Proprietário de Dados do Blob de Armazenamento na conta de armazenamento do ADLS Gen2.

  2. Selecione Cloud Shell no portal do Azure.

    Captura de tela do botão Cloud Shell no portal do Azure.

  3. Use o seguinte comando para obter a ACL e a configuração de sticky bit do diretório de contêiner/pasta :

    az storage fs access show -p folder -f container --account-name account --auth-mode login
    

    Para verificar a ACL e a configuração de sticky bit do diretório raiz, que é a ACL no nível do contêiner e a configuração de sticky bit, use o seguinte comando:

    az storage fs access show -p / -f container --account-name account --auth-mode login
    

    Aqui está um exemplo de saída:

    Captura de tela do exemplo de saída do comando.

    No corpo JSON da resposta, concentre-se em permissions. Normalmente contém 9 ou 10 bits com um símbolo extra "+". Para obter mais informações sobre essas cartas, consulte Usuários e identidades.

    O exemplo anterior indica que todas as permissões de usuário estão habilitadas e o sticky bit está habilitado. Para obter mais informações sobre como ler essa notação de permissão, consulte Notação de permissões tradicionais do Unix.

    A nona letra tem quatro valores possíveis: "-", "x", "t" e "T". Se o valor desta letra for "t" ou "T", significa que o sticky bit está habilitado. O "t" é "x" com o sticky bit habilitado e "T" é "-" com o sticky bit habilitado.

    "rwxrwxrwt" pode ser explicado pelo seguinte:

    • As permissões r, w e x estão habilitadas para o proprietário.
    • As permissões r, w e x estão habilitadas para o grupo Proprietário.
    • As permissões r, w e x estão habilitadas para Outros usuários e o sticky bit está habilitado.

    Para entender melhor, aqui está outro exemplo de "rwxr-xr-T":

    • As permissões r, w e x estão habilitadas para o proprietário.
    • As permissões r e x estão habilitadas para o grupo Proprietário.
    • Somente a permissão r está habilitada para Outros usuários e o sticky bit está habilitado.

    De acordo com Formas curtas para permissões, a permissão de forma abreviada é calculada para cada grupo de três letras ("r" como 4, "w" como 2 e "x" como 1). Então, "rw-rwx--x" será igual a 4+2+0, 4+2+1, 0+0+1, 671. Com base nessa regra de cálculo, você só precisa adicionar a quarta letra no início. Se o sticky bit estiver ativado, defina-o como 1. Se o sticky bit estiver desabilitado, defina-o como 0.

    Eis alguns exemplos:

    • rwxrwxrwt => 1777
    • rwxr-xr-T => 1754
    • rw-rwx--x => 0671

Desativar/ativar a configuração de sticky bit

Para desabilitar/habilitar a configuração de sticky bit, defina as permissões para os valores esperados.

A conta do Azure usada para modificar essa configuração deve ter a função Proprietário de Dados do Blob de Armazenamento na conta de armazenamento do ADLS Gen2 de destino. Há muitas maneiras possíveis de modificar a configuração do sticky bit. Aqui estão os SDKs suportados:

SDK Versão compatível Mais informações
API REST 2019-12-12 e versões posteriores da API Caminho
Módulo do PowerShell Az 5.6.0 e versões posteriores Usar o PowerShell para gerenciar ACLs no Azure Data Lake Storage Gen2
CLI do Azure 2.38.0 e versões posteriores Usar a CLI do Azure para gerenciar ACLs no Azure Data Lake Storage Gen2
SDK .NET 12.14.0 e versões posteriores Usar .NET para gerenciar ACLs no Azure Data Lake Storage Gen2
Java SDK 12.11.0 e versões posteriores Usar Java para gerenciar ACLs no Azure Data Lake Storage Gen2
SDK do Python 12.8.0 e versões posteriores Usar o Python para gerenciar ACLs no Azure Data Lake Storage Gen2
SDK do JavaScript 12.11.0-beta.1 e versões posteriores Usar o SDK do JavaScript no Node.js para gerenciar ACLs no Azure Data Lake Storage Gen2
CLI do HDFS 3.3.3 e versões posteriores Usando a CLI do HDFS com o Data Lake Storage Gen2 e o Apache Hadoop 3.3.3 – Guia de permissões do HDFS

Aqui está um exemplo de desabilitação/habilitação da configuração de sticky bit com a CLI do Azure.

  1. Entre no portal do Azure com sua conta que tem a atribuição de função Proprietário de Dados do Blob de Armazenamento na conta de armazenamento do ADLS Gen2 de destino.

  2. Selecione Cloud Shell no portal do Azure.

    Captura de tela do botão Cloud Shell no portal do Azure.

  3. Para definir a configuração da ACL e do sticky bit do diretório de contêiner/pasta para as permissões "rwxrwxrwt" e habilitar o sticky bit, use o seguinte comando:

    az storage fs access set --permissions rwxrwxrwt -p folder -f container --account-name account --auth-mode login
    

    Para modificar a configuração do diretório raiz, que é a ACL no nível do contêiner e a configuração de sticky bit, use o seguinte comando:

    az storage fs access set --permissions rwxrwxrwt -p / -f container --account-name account --auth-mode login
    

    O {permission notation} comando anterior pode aceitar notações longas e curtas. Isso significa que o seguinte comando também é qualificado:

    az storage fs access set --permissions 1776 -p folder -f container --account-name account --auth-mode login
    

    Veja um exemplo de saída:

    Captura de tela do exemplo de saída do comando.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.