Upload AWS S3 - não é possível assinar a solicitação sem credenciais configuradas

Olá pessoal,

Estou usando a versão 3.4.0.beta3-dev e estou recebendo o erro mencionado (mas apenas na interface do usuário, não nos logs) ao tentar fazer upload de uma imagem em um tópico.

Minha configuração é a seguinte:

["s3_upload_bucket", "<nome_do_bucket>/discourse-uploads"],
["s3_backup_bucket", "<nome_do_bucket>/discourse-backups"],
["s3_region", "eu-central-1"],
["s3_use_acls", "f"],
["enable_direct_s3_uploads", "f"],
["enable_s3_uploads", "t"],
["s3_access_key_id", ""],
["s3_secret_access_key", ""]

E estou usando o perfil de instância EC2 e substituindo as credenciais.

Recebo o erro na interface do usuário:

Mas o log informa que foi bem-sucedido:

Started POST "/uploads.json?client_id=bb1ab05dbb9d4d1f9930d05f28b17f94" for 10.x.x.x at 2024-12-13 11:46:35 +0000
Processing by UploadsController#create as JSON
  Parameters: {"upload_type"=>"composer", "pasted"=>"true", "name"=>"image.png", "type"=>"image/png", "sha1_checksum"=>"a0f0fe1abd27ce137e0e1b2a28cd9348a08112ff", "file"=>#<ActionDispatch::Http::UploadedFile:0x00007f50b8b01db8 @tempfile=#<Tempfile:/tmp/RackMultipart20241213-386-i7xkqa.png>, @content_type="image/png", @original_filename="image.png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"image.png\"\r\nContent-Type: image/png\r\n">, "client_id"=>"bb1ab05dbb9d4d1f9930d05f28b17f94"}
Completed 200 OK in 36ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Completed 418  in 23ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.4ms)

O bucket está vazio depois (acabei de configurar isso com um bucket novo).

Alguma dica?

Obrigado,

WS

1 curtida

Certifique-se de que sua instância EC2 tenha as permissões corretas para fazer upload para o S3, como s3:PutObject e s3:GetObject. Verifique novamente a região e as configurações de acesso do seu bucket S3. Você também pode tentar ativar s3_use_acls: true, se necessário. Você também pode testar o upload diretamente com o AWS CLI para descartar problemas de permissão. E se você não estiver usando uploads diretos, deixe enable_direct_s3_uploads: f como está. Deve ajudar a corrigir o problema!

1 curtida

hmmmm…

Minha política de EC2Instance Roles se parece com isto:

[
    {
    "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload",
        "s3:PutLifecycleConfiguration",
        "s3:PutObjectVersionAcl",
        "s3:PutBucketCORS",
        "s3:DeleteObject",
        "s3:PutObjectAcl",
        "s3:Get*",
        "s3:List*"
    ],
    "Resource": [
        "arn:aws:s3:::\u003cdata-bucket\u003e",
        "arn:aws:s3:::\u003cdata-bucket\u003e/*",
        "arn:aws:s3:::\u003cbackup-bucket\u003e",
        "arn:aws:s3:::\u003cbackup-bucket\u003e/*"
    ],
    "Effect": "Allow"
}
]

As permissões do bucket se parecem com isto, mas o Security Hub já está me alertando que está muito aberto :frowning:

Posso fazer upload de arquivos da instância EC2 sem problemas com a CLI (o instanceprofile funciona nesse sentido)

ATUALIZAÇÃO: notei que o progresso do upload atinge 100% e só depois disso recebo o erro (tive que ser rápido com o Greenshot para capturar isso :smiley:)

hmmmm … parece que ele conseguiu fazer o upload das partes múltiplas, mas não conseguiu finalizar o processo depois.

Tentei agora configurar um Usuário IAM com credenciais e dar a ele permissões s3:*, e agora o upload funciona, mas o discourse não consegue exibi-lo depois:

Como trabalho em uma empresa, e há SCPs (Políticas de Controle de Serviço) ativas para nossas contas, parece que o acesso público é geralmente bloqueado.

Parece não haver S3 para mim (e para todos que têm as mesmas restrições para suas contas).

Desistindo agora… :frowning:

Espero que isso funcione para você: https://www.youtube.com/watch?v=qjebh5AOZ8E. Isso funcionaria para você se não for explicitamente bloqueado por sua empresa.

Estava recebendo a mesma mensagem de erro do autor original aqui, com uma configuração semelhante. Verifiquei que conseguia obter e colocar objetos s3 usando o AWS CLI da minha instância EC2, embora o Discourse não conseguisse fazer isso.

Criei um novo usuário IAM com a mesma política de permissões da minha função de instância EC2 e usei uma chave de acesso em vez do perfil de instância EC2, e agora os uploads funcionam bem.

Portanto, no meu caso, não foi um problema de alteração de permissões, o que me faz pensar que pode haver um bug na autenticação do perfil de instância. Existe alguma maneira de obter mais informações sobre por que isso estava falhando?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.