AWS S3アップロード - 資格情報が設定されていないとリクエストに署名できない

皆さん、

3.4.0.beta3-dev を使用していますが、トピックに画像をアップロードしようとすると、ログではなく UI で言及されたエラーが発生します。

私の設定は次のとおりです。

["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", ""]]

EC2 インスタンスプロファイルを使用しており、認証情報をオーバーライドしています。

UI でエラーが表示されます。

しかし、ログでは正常に完了したと表示されています。

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)

バケットはその後空になります(これは新しいバケットで設定したばかりです)。

何かヒントはありますか?

よろしくお願いします。

WS

「いいね!」 1

EC2 インスタンスに S3 へのアップロードに必要な権限(s3:PutObjects3:GetObject など)があることを確認してください。S3 バケットのリージョンとアクセス設定を再確認してください。必要に応じて s3_use_acls: true をオンにすることも検討してください。AWS CLI を使用して直接アップロードをテストし、権限の問題を排除することもできます。ダイレクトアップロードを使用していない場合は、enable_direct_s3_uploads: f をそのままにしておいてください。これで問題が解決するはずです!

「いいね!」 1

うーん…

私のEC2インスタンスロールポリシーは以下のようになっています。

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

バケットの権限は以下のようになっていますが、セキュリティハブがすでに「開きすぎ」だと警告しています :frowning:

CLI(インスタンスプロファイルはこの点で機能します)でEC2インスタンスからファイルをアップロードしても問題ありません。

UPDATE:アップロードの進行状況が100%に達してからエラーが発生することに気づきました(これをキャプチャするためにGreenshotを素早く使わなければなりませんでした :smiley:

うーん…マルチパートのアップロードは成功したようですが、その後プロセスを完了できなかったようです。

現在試したところ、認証情報を持つIAMユーザーを設定し、s3:*権限を付与したところ、アップロードは機能するようになりましたが、その後Discourseで表示できなくなりました。

会社で働いており、アカウントでSCP(サービスコントロールポリシー)が有効になっているため、一般的にパブリックアクセスはブロックされているようです。

私(および同じ制限を受けているすべての人)にはS3はないようです。

もう諦めます… :frowning:

これでうまくいくことを願っています: https://www.youtube.com/watch?v=qjebh5AOZ8E 。これは、会社によって明示的にブロックされていない限り、うまくいくはずです。

元の投稿者と同じエラーメッセージが、同様の設定で表示されていました。EC2インスタンスからAWS CLIを使用してS3オブジェクトを取得および配置できることを確認しましたが、Discourseはそれができませんでした。

EC2インスタンスロールと同じ権限ポリシーを持つ新しいIAMユーザーを作成し、EC2インスタンスプロファイルではなくアクセスキーを使用したところ、アップロードが正常に機能するようになりました。

したがって、私の場合は権限を変更する問題ではありませんでした。これは、インスタンスプロファイル認証にバグがある可能性があることを示唆しています。これが失敗した理由について、さらに情報を得る方法はありますか?

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