Caricamento AWS S3 - impossibile firmare la richiesta senza credenziali impostate

Ciao ragazzi,

Sto usando la versione 3.4.0.beta3-dev e sto riscontrando l’errore menzionato (ma solo nell’interfaccia utente, non nei log) quando tento di caricare un’immagine in un argomento.

La mia configurazione è la seguente:

["s3_upload_bucket", "<nome_bucket>/discourse-uploads"],
["s3_backup_bucket", "<nome_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 sto usando il profilo dell’istanza EC2 e sovrascrivo le credenziali.

Ricevo l’errore nell’interfaccia utente:

ma il log mi dice che è andato tutto bene:

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)

Il bucket è vuoto in seguito (sto solo configurando questo con un bucket nuovo).

Qualche suggerimento?

Grazie,

WS

1 Mi Piace

Assicurati che la tua istanza EC2 abbia le autorizzazioni corrette per caricare su S3, come s3:PutObject e s3:GetObject. Ricontrolla la regione e le impostazioni di accesso del tuo bucket S3. Potresti anche voler provare ad attivare s3_use_acls: true se necessario. Puoi anche testare il caricamento direttamente con AWS CLI per escludere problemi di autorizzazione. E se non stai utilizzando caricamenti diretti, lascia enable_direct_s3_uploads: f così com’è. Dovrebbe aiutare a risolvere il problema!

1 Mi Piace

hmmmm…

La mia policy delle EC2Instance Roles è così:

[
    {
    "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload",
        "s3:PutLifecycleConfiguration",
        "s3:PutObjectVersionAcl",
        "s3:PutBucketCORS",
        "s3:DeleteObject",
        "s3:PutObjectAcl",
        "s3:Get*",
        "s3:List*"
    ],
    "Resource": [
        "arn:aws:s3:::<data-bucket>",
        "arn:aws:s3:::<data-bucket>/*",
        "arn:aws:s3:::<backup-bucket>",
        "arn:aws:s3:::<backup-bucket>/*"
    ],
    "Effect": "Allow"
}
]

I permessi del bucket sono così, ma Security Hub mi urla già che è troppo aperto :frowning:

Posso caricare file dall’istanza EC2 senza problemi con la CLI (instanceprofile funziona a riguardo)

AGGIORNAMENTO: ho notato che il progresso del caricamento raggiunge il 100% e solo dopo ricevo l’errore (ho dovuto essere veloce con Greenshot per catturarlo :smiley:)

hmmmm… sembra che sia riuscito a caricare le multipart, ma non sia riuscito a completare il processo in seguito

Ho provato ora a configurare un utente IAM con credenziali e a dargli i permessi s3:*, e ora il caricamento funziona, ma discourse non riesce a visualizzarlo in seguito:

Poiché lavoro in un’azienda e ci sono SCP (Service control policies) attive per i nostri account, sembra che l’accesso pubblico sia generalmente bloccato.

Sembra che non ci sia S3 per me (e per chiunque abbia le stesse restrizioni per i propri account).

Mi arrendo ora… :frowning:

Spero che questo funzioni per te: https://www.youtube.com/watch?v=qjebh5AOZ8E . Questo funzionerebbe per te se non fosse esplicitamente bloccato dalla tua azienda.

Stavo ricevendo lo stesso messaggio di errore dell’autore originale qui, con una configurazione simile. Ho verificato di poter ottenere e inserire oggetti s3 utilizzando AWS CLI dalla mia istanza EC2, anche se Discourse non era in grado di farlo.

Ho creato un nuovo utente IAM con la stessa policy di autorizzazioni del mio ruolo di istanza EC2 e ho utilizzato una chiave di accesso invece del profilo di istanza EC2 e ora i caricamenti funzionano correttamente.

Quindi, nel mio caso, non si trattava di un problema di modifica delle autorizzazioni, il che mi fa pensare che potrebbe esserci un bug nell’autenticazione del profilo di istanza. C’è un modo per ottenere maggiori informazioni sul motivo per cui questo stava fallendo?

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