Estou enfrentando um problema com o AzCopy, onde meu script roda perfeitamente bem no CMD, mas falha com erros de autenticação quando executado por meio de um arquivo em lote. Aqui está um detalhamento da situação:
O objetivo é fazer backup dos nossos arquivos diários na conta de armazenamento por meio do agendador de tarefas; provavelmente apenas 1 arquivo por dia/execução.
Meu script em lote:
@echo off
cd "C:\Program Files\AzCopy"
azcopy cp "G:\Backup\UATBackups\*" "https://<storage-account-name>.blob.core.windows.net/test/?sp=rw&st=2024-10-08T15:28:58Z&se=2024-10-08T23:28:58Z&spr=https&sv=2022-11-02&sr=c&sig=<SAS-token>" --recursive=true --block-blob-tier=Cold --overwrite=false
Quando executo este comando manualmente no CMD: (depois de navegar até o diretório AzCopy)
azcopy cp "G:\Backup\UATBackups\*" "https://<storage-account-name>.blob.core.windows.net/test/?sp=rw&st=2024-10-08T15:28:58Z&se=2024-10-08T23:28:58Z&spr=https&sv=2022-11-02&sr=c&sig=<SAS-token>" --recursive=true --block-blob-tier=Cold --overwrite=false
Funciona perfeitamente e todos os arquivos são enviados conforme o esperado.
Entretanto, quando executo o arquivo em lote, recebo:
RESPONSE Status: 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
Também tentei modificar o arquivo em lote para que ele abra o CMD e execute o comando como se eu estivesse fazendo isso manualmente:
start cmd /k ""C:\Program Files\AzCopy\azcopy.exe" cp "G:\Backup\UATBackups\*" "https://<storage-account-name>.blob.core.windows.net/test/?sp=rw&st=2024-10-08T15:28:58Z&se=2024-10-08T23:28:58Z&spr=https&sv=2022-11-02&sr=c&sig=<SAS-token>" --recursive=true --block-blob-tier=Cold --overwrite=false"
Mas isso me dá:
RESPONSE 401: 401 Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
ERROR CODE: NoAuthenticationInformation
Coisas que verifiquei:
- O token SAS é válido e não expirou.
- O horário da VM está sincronizado corretamente.
- Estou usando a mesma conta de usuário para executar o CMD e o arquivo em lote.
Minha pergunta:
- Por que o comando funciona perfeitamente quando o executo manualmente no CMD, mas falha com um erro 403 quando executado por meio de um arquivo em lote (mesmo usando a mesma conta de usuário)?
- O que precisa ser mudado e como posso consertar isso!
Qualquer ajuda ou sugestão seria muito apreciada. Obrigado!
Acabamos de ter o mesmo problema e é por causa do escape do % que aparece na chave SAS. Se você codificá-lo como %% no script de lote, funciona para nós.