Téléversement AWS S3 - impossible de signer la requête sans paramètres d'identification

Salut tout le monde,

J’utilise la version 3.4.0.beta3-dev et je rencontre l’erreur mentionnée (mais uniquement dans l’interface utilisateur, pas dans les logs) lorsque j’essaie de télécharger une image dans un sujet.

Ma configuration est la suivante :


["s3_upload_bucket", "<nom_du_bucket>/discourse-uploads"],
["s3_backup_bucket", "<nom_du_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", ""]
]

et j’utilise le profil d’instance EC2 et je surcharge les identifiants.

Je reçois l’erreur dans l’interface utilisateur :

mais le log indique que tout s’est bien passé :

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)

Le bucket est vide après (je viens de configurer cela avec un nouveau bucket).

Des pistes ?

Merci,

WS

1 « J'aime »

Assurez-vous que votre instance EC2 dispose des bonnes autorisations pour téléverser vers S3, comme s3:PutObject et s3:GetObject. Vérifiez à nouveau la région et les paramètres d’accès de votre compartiment S3. Vous pourriez également vouloir activer s3_use_acls: true si nécessaire. Vous pouvez également tester le téléversement directement avec AWS CLI pour exclure les problèmes d’autorisations. Et si vous n’utilisez pas de téléversements directs, laissez simplement enable_direct_s3_uploads: f tel quel. Cela devrait aider à résoudre le problème !

1 « J'aime »

hmmmm…

Ma stratégie de rôles EC2Instance ressemble à ceci :

[
    {
    "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"
}
]

Les autorisations de bucket ressemblent à ceci, mais Security Hub me crie déjà dessus qu’il est trop ouvert :frowning:

Je peux télécharger des fichiers depuis l’instance EC2 sans problème avec la CLI (instanceprofile fonctionne à cet égard)

MISE À JOUR : J’ai remarqué que la progression du téléchargement atteint 100 %, et ce n’est qu’après que je reçois l’erreur (j’ai dû être rapide avec Greenshot pour capturer cela :smiley:)

hmmmm … il semble qu’il ait réussi à télécharger les multiparts, mais n’ait pas pu terminer le processus par la suite

J’ai essayé maintenant, de configurer un utilisateur IAM avec des identifiants et de lui donner des permissions s3:*, et maintenant le téléchargement fonctionne, mais discourse ne peut pas l’afficher ensuite :

Comme je travaille dans une entreprise, et qu’il y a des SCP (politiques de contrôle des services) actives pour nos comptes, il semble que l’accès public soit généralement bloqué

Il semble qu’il n’y ait pas de S3 pour moi (et pour tous ceux qui ont les mêmes restrictions pour leurs comptes)

J’abandonne maintenant… :frowning:

J’espère que cela fonctionnera pour vous : https://www.youtube.com/watch?v=qjebh5AOZ8E. Cela fonctionnerait pour vous si ce n’est pas explicitement bloqué par votre entreprise.

J’obtenais le même message d’erreur que l’auteur original ici, avec une configuration similaire. J’ai vérifié que je pouvais obtenir et mettre des objets S3 en utilisant l’AWS CLI depuis mon instance EC2, même si Discourse ne pouvait pas le faire.

J’ai créé un nouvel utilisateur IAM avec la même politique de permissions que mon rôle d’instance EC2 et j’ai utilisé une clé d’accès au lieu du profil d’instance EC2, et maintenant les téléchargements fonctionnent correctement.

Donc, dans mon cas, ce n’était pas un problème de changement de permissions, ce qui me fait penser qu’il pourrait y avoir un bug dans l’authentification du profil d’instance. Y a-t-il un moyen pour moi d’obtenir plus d’informations sur la raison pour laquelle cela échouait ?

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