403 Erro de autorização negado do Access quando o bit pegajoso está habilitado no ADLS Gen2

Este artigo ajuda você a entender o bit pegajoso e fornece informações sobre como marcar essa configuração ao configurá-la no ADLS (Azure Data Lake Storage) 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). ACL é um sistema de controle de acesso semelhante a POSIX com uma configuração específica chamada bit pegajoso que pode causar falhas de autorização. Para obter mais informações sobre o modo de controle de permissão e o bit pegajoso, consulte AcLs (listas de controle de acesso) em Azure Data Lake Storage Gen2.

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

403 Erro de autorização negado do Access

Considere o seguinte cenário:

  • 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 ACL como um método de autorização.
  • Na configuração ACL da conta de armazenamento do ADLS Gen2, você está configurado com a permissão Executar (X) no diretório raiz e na pasta e com a permissão Gravar e Executar (WX) na pasta filho.
  • O bit pegajoso 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 contêiner/pasta/pasta filho/.

Nesse cenário, você obtém um erro de autorização negado pelo Access 403.

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 bit pegajoso faz com que você não seja o proprietário desse caminho de pasta.

Identificar se o bit pegajoso causa um erro negado pelo Access 403

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

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

Há várias maneiras de marcar essa configuração, como uma chamada de API REST, comando do PowerShell e CLI do Azure. Recomendamos a opção CLI do Azure porque ela não exige que nenhum software extra seja instalado e o comando é fácil de entender.

Para verificar a configuração de bit pegajoso 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 de 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 bit pegajoso do diretório contêiner/pasta :

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

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

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

    Aqui está uma saída de exemplo:

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

    No corpo JSON de resposta, concentre-se em permissions. Normalmente, ele 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 bit pegajoso 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 dessa letra for "t" ou "T", significa que o bit pegajoso está habilitado. O "t" é "x" com o bit pegajoso habilitado e "T" é "-" com o bit pegajoso 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 Owning.
    • As permissões r,w e x estão habilitadas para outros usuários e o bit pegajoso está habilitado.

    Para entender melhor, aqui está outro exemplo para "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 Owning.
    • Somente a permissão r está habilitada para outros usuários e o bit pegajoso está habilitado.

    De acordo com formulários curtos para permissões, a permissão de formulário curto é calculada para cada grupo de três letras ("r" como 4, "w" como 2 e "x"como 1). Portanto, "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 bit pegajoso estiver habilitado, defina-o como 1. Se o bit pegajoso estiver desabilitado, defina-o como 0.

    Aqui estão alguns exemplos:

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

Desabilitar/Habilitar a configuração de bit pegajoso

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

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

SDK Versão com suporte Mais informações
API do REST Versões da API 2019-12-12 e posteriores Path
Módulo do Az PowerShell 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 em Azure Data Lake Storage Gen2
SDK DO .NET 12.14.0 e versões posteriores Use o .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
Python SDK 12.8.0 e versões posteriores Usar o Python para gerenciar ACLs no Azure Data Lake Storage Gen2
JavaScript SDK 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
HDFS CLI 3.3.3 e versões posteriores Usando a CLI do HDFS com Data Lake Storage Gen2 e Apache Hadoop 3.3.3 – Guia de Permissões do HDFS

Aqui está um exemplo de desabilitar/habilitar a configuração de bit pegajoso 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 ACL e a configuração de bit pegajoso do diretório contêiner/pasta para as permissões "rwxrwxrwt" e habilitar o bit pegajoso, 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 é o ACL de nível de contêiner e a configuração de bit pegajoso, use o seguinte comando:

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

    O {permission notation} no comando anterior pode aceitar notações de forma longa e curta. 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
    

    Aqui está uma saída de exemplo:

    Captura de tela do exemplo de saída de 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.