Estou tentando executar alguns testes de integração no Azure por meio de um pipeline projetado por uma equipe anterior, e não estou tendo muita sorte. Especificamente, o pipeline continua atingindo um ClientAuthenticationError
.
Este é um exemplo mínimo de funcionamento do código Python que é executado logo antes de travar:
SAS_TOKEN = os.environ["SAS_TOKEN"]
credential = AzureSasCredential(SAS_TOKEN)
account_name = "ACCOUNT_NAME"
account_url = f"https://{account_name}.blob.core.windows.net"
container_name = "CONTAINER_NAME"
blob_service_client = BlobServiceClient(account_url, credential=credential)
container = blob_service_client.get_container_client(container_name)
parquet_names = container.list_blob_names(name_starts_with="PATTERN")
list_of_parquet = list(parquet_names)
E este é o traceback que o código acima produz:
File "/home/vsts/work/1/s/./tests/run_tests.py", line 24, in access_datalake_locally
list_of_parquet = list(parquet_names)
File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/azure/core/paging.py", line 123, in __next__
return next(self._page_iterator)
File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/azure/core/paging.py", line 75, in __next__
self._response = self._get_next(self.continuation_token)
File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/azure/storage/blob/_list_blobs_helper.py", line 175, in _get_next_cb
process_storage_error(error)
File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/azure/storage/blob/_shared/response_handlers.py", line 186, in process_storage_error
exec("raise error from None") # pylint: disable=exec-used # nosec
File "<string>", line 1, in <module>
azure.core.exceptions.ClientAuthenticationError: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
Posso pensar em algumas coisas que podem estar dando errado aqui:
- Esse
parquet_names
objeto realmente não gosta de ser convertido em umlist
. - Estou fazendo algo estúpido na maneira como construo esse
credential
objeto. (Eu tenteiblob_service_client = BlobServiceClient(account_url, credential=SAS_TOKEN
. Dá exatamente o mesmo erro.) - A
SAS_TOKEN
variável ambiental está errada.
Eu ficaria muito grato por quaisquer sugestões sobre como resolver essa situação.
O erro acima ocorreu devido à maneira como o token SAS está sendo gerado ou passado para o serviço de Armazenamento de Blobs do Azure.
Você pode gerar o
sas
token no portal.Portal:
Conta de armazenamento-> assinatura de acesso compartilhado -> verifique os campos obrigatórios -> Gerar token SAS.
Estou usando o Windows, então usei o comando abaixo para armazenar o
sas
token do portal.Concordo com o comentário de Gaurav Mantri, o formato do
sas
token deveria ser assim.Código e saída:
Saída: