Skip to main content

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

  1. 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.
  2. O ambiente atende aos requisitos mínimos?

    • PHP >= 8.0
    • Composer >= 2.0
    • AWS SDK PHP <= 3.335.0
  3. As credenciais estão corretas?

    • Verificar se o aws_access_key_id e aws_secret_access_key são válidos e possuem as permissões adequadas para upload.
  4. O endpoint utilizado está correto?

    • O endpoint URL deve seguir o formato: https://<region>.magaluobjects.com.

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

  1. 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.
  2. Verificar a URL do endpoint:

    • Deve seguir o formato: https://<region>.magaluobjects.com

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 é:

  1. Utilizar AWS SDK PHP versão 3.335.0 ou menor.
  2. Verificar credenciais e permissões.
  3. Garantir que o endpoint_url esteja correto.

Mais informações podem ser encontradas na documentação oficial.