Problemas ao realizar Upload via AWS SDK PHP
Versões afetadas
- AWS SDK PHP:
3.337.3
(não homologado) - AWS SDK PHP:
<= 3.335.0
(homologado)
Problema
Usuários que utilizam a versão 3.337.3
do AWS SDK PHP enfrentam falhas ao tentar realizar o upload de arquivos para o Object Storage da Magalu Cloud. O erro reportado é:
AWS HTTP error: Client error: PUT https://br-se1.magaluobjects.com/<bucket>/<path>/<file> resulted in a 403 Forbidden response: AccessDenied Credentials or specified url is malformed.
AWS HTTP error: Client error: PUT https://br-ne1.magaluobjects.com/<bucket>/<path>/<file> resulted in a 403 Forbidden response: AccessDenied Credentials or specified url is malformed.
Esse erro indica que as credenciais ou a URL especificada estão malformadas, o que pode estar relacionado a incompatibilidades da versão do SDK.
Diagnóstico
-
A versão do AWS SDK PHP está dentro das homologadas pela Magalu Cloud?
- Não, a versão
3.337.3
não está homologada. Apenas versões<= 3.335.0
são suportadas.
- Não, a versão
-
O ambiente atende aos requisitos mínimos?
- PHP
>= 8.0
- Composer
>= 2.0
- AWS SDK PHP
<= 3.335.0
- PHP
-
As credenciais estão corretas?
- Verificar se o
aws_access_key_id
eaws_secret_access_key
são válidos e possuem as permissões adequadas para upload.
- Verificar se o
-
O endpoint utilizado está correto?
- O endpoint URL deve seguir o formato:
https://<region>.magaluobjects.com
.
- O endpoint URL deve seguir o formato:
Solução
A solução imediata é fazer downgrade do AWS SDK PHP para a versão 3.335.0, garantindo a compatibilidade com o Object Storage.
Passo 1: Verificar a versão do AWS SDK PHP instalada
Execute o seguinte comando para conferir a versão atual:
composer show aws/aws-sdk-php
Se o retorno exibir 3.337.3
ou >3.335.0
, prossiga para o downgrade.
Passo 2: Fazer downgrade do AWS SDK PHP
Para reverter para a versão 3.335.0, execute:
composer require aws/aws-sdk-php:3.335.0
Para evitar futuras atualizações para versões não homologadas, utilize:
composer require "aws/aws-sdk-php<=3.335.0"
Isso garante que apenas versões compatíveis sejam instaladas.
Passo 3: Confirmar que o downgrade foi bem-sucedido
Após a reinstalação, valide a versão do AWS SDK PHP novamente:
composer show aws/aws-sdk-php
O resultado deve exibir 3.335.0 ou uma versão inferior.
Passo 4: Validar credenciais e configurações
-
Verificar se as credenciais são válidas:
- Conferir o arquivo
~/.aws/credentials
ou variáveis de ambiente. - Testar autenticação executando:
mgc object-storage buckets list
- Se falhar, regenerar as credenciais no console da Magalu Cloud.
- Conferir o arquivo
-
Verificar a URL do endpoint:
- Deve seguir o formato:
https://<region>.magaluobjects.com
- Deve seguir o formato:
Passo 5: Testar o upload novamente
Execute o código abaixo para validar o upload:
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
function upload_object($bucketName, $s3Client, $filePath) {
try {
$objectName = basename($filePath);
if (!file_exists($filePath)) {
throw new Exception("O arquivo {$filePath} não foi encontrado.\n");
exit(1);
}
$result = $s3Client->putObject([
'Bucket' => $bucketName,
'Key' => $objectName,
'SourceFile' => $filePath,
'ContentType' => mime_content_type($filePath), // Define o tipo de conteúdo
]);
echo "Arquivo enviado com sucesso!\n";
} catch (AwsException $e) {
echo "Erro ao enviar o arquivo:\n";
echo $e->getMessage();
exit(1);
}
}
$s3 = new S3Client([
'version' => 'latest',
'region' => '<region>',
'endpoint' => 'https://<region>.magaluobjects.com',
'credentials' => [
'key' => '<magalu_access_key_id>',
'secret' => '<secret_access_key>',
],
]);
upload_object('<bucket>', $s3, '/caminho/para/arquivo.mp4');
?>
Substituir <region>
, <magalu_access_key_id>
, <secret_access_key>
, <bucket>
e arquivo.mp4
pelos valores de suas credenciais.
Se o upload for concluído sem erros, a correção foi aplicada com sucesso.
Conclusão
A versão 3.337.3 do AWS SDK PHP não é homologada pela Magalu Cloud, podendo resultar em erros 403 Forbidden
devido a credenciais ou URLs malformadas.
A solução recomendada é:
- Utilizar AWS SDK PHP versão 3.335.0 ou menor.
- Verificar credenciais e permissões.
- Garantir que o
endpoint_url
esteja correto.
Mais informações podem ser encontradas na documentação oficial.