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:
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.
Selecione Cloud Shell no portal do Azure.
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:
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.
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.
Selecione Cloud Shell no portal do Azure.
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:
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.