AWS S3-Upload - Kann Anfrage ohne gesetzte Anmeldeinformationen nicht signieren

Hallo Leute,

ich benutze 3.4.0.beta3-dev und erhalte den erwähnten Fehler (aber nur in der Benutzeroberfläche, nicht in den Protokollen), wenn ich versuche, ein Bild in ein Thema hochzuladen.

Meine Konfiguration sieht wie folgt aus:

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

und ich benutze das EC2-Instanzprofil und überschreibe die Anmeldeinformationen

Ich erhalte den Fehler in der Benutzeroberfläche:

aber das Protokoll sagt mir, dass es in Ordnung war:

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)

Der Bucket ist danach leer (ich richte das gerade mit einem neuen Bucket ein)

Irgendwelche Hinweise?

Danke,

WS

1 „Gefällt mir“

Stellen Sie sicher, dass Ihre EC2-Instanz über die richtigen Berechtigungen zum Hochladen nach S3 verfügt, wie z. B. s3:PutObject und s3:GetObject. Überprüfen Sie die Region und die Zugriffseinstellungen Ihres S3-Buckets. Möglicherweise möchten Sie auch s3_use_acls: true aktivieren, falls erforderlich. Sie können auch versuchen, direkt mit der AWS CLI hochzuladen, um Berechtigungsprobleme auszuschließen. Und wenn Sie keine direkten Uploads verwenden, lassen Sie enable_direct_s3_uploads: f einfach so, wie es ist. Sollte helfen, das Problem zu beheben!

1 „Gefällt mir“

hmmmm…

Meine EC2Instance Roles-Richtlinie sieht so aus:

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

Die Bucket-Berechtigungen sehen so aus, aber Security Hub schreit mich bereits an, dass sie zu offen sind :frowning:

Ich kann Dateien von der EC2-Instanz problemlos mit der CLI hochladen (instanceprofile funktioniert in dieser Hinsicht).

UPDATE: Habe bemerkt, dass der Upload-Fortschritt 100 % erreicht und erst danach die Fehlermeldung angezeigt wird (musste schnell mit Greenshot sein, um das einzufangen :smiley: )

hmmmm … scheint, als hätte er die Multipart-Uploads erfolgreich abgeschlossen, aber der Prozess konnte danach nicht beendet werden.

Habe es jetzt versucht, einen IAM-Benutzer mit Anmeldeinformationen einzurichten und ihm S3:* Berechtigungen zu geben, und jetzt funktioniert der Upload, aber Discourse kann ihn danach nicht anzeigen:

Da ich in einem Unternehmen arbeite und SCPs (Service Control Policies) für unsere Konten aktiv sind, scheint der öffentliche Zugriff generell blockiert zu sein.

Scheint kein S3 für mich (und alle, die die gleichen Einschränkungen für ihre Konten haben) zu geben.

Gebe jetzt auf… :frowning:

Ich hoffe, das funktioniert für Sie: https://www.youtube.com/watch?v=qjebh5AOZ8E. Das würde für Sie funktionieren, wenn es nicht ausdrücklich von Ihrem Unternehmen blockiert wird.

Ich erhielt dieselbe Fehlermeldung wie der ursprüngliche Poster hier, mit einer ähnlichen Konfiguration. Ich habe überprüft, ob ich S3-Objekte über die AWS CLI von meiner EC2-Instanz abrufen und dort ablegen kann, obwohl Discourse dies nicht konnte.

Ich habe einen neuen IAM-Benutzer mit derselben Berechtigungsrichtlinie wie meine EC2-Instanzrolle erstellt und einen Zugriffsschlüssel anstelle des EC2-Instanzprofils verwendet, und jetzt funktionieren Uploads einwandfrei.

In meinem Fall war es also kein Problem mit geänderten Berechtigungen, was mich vermuten lässt, dass es möglicherweise einen Fehler bei der Instanzprofilauthentifizierung gibt. Gibt es eine Möglichkeit, mehr Informationen darüber zu erhalten, warum dies fehlgeschlagen ist?

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