S3へのアクセス許可が403で弾かれてしまう場合は対象のバケットのCORS(Cross-Origin Resource Sharing)設定ができているか確認する。
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]
- AllowedHeaders: [“*”]
-
すべての種類のヘッダーがクロスオリジンリクエストで許可されることを意味する。
つまり、異なるオリジンからのリクエストがどのようなHTTPヘッダーを含んでいても、それらはS3バケットによって受け入れられる。 - AllowedMethods: [“GET”, “PUT”, “POST”]
-
GET、PUT、POST の3つのHTTPメソッドがクロスオリジンリクエストで許可される。
つまり、他のオリジンからのウェブページは、これらのメソッドを使用してS3バケットのリソースにアクセスすることができる。 - AllowedOrigins: [“*”]
-
任意のオリジンからのリクエストを許可する。
`*`はワイルドカードで、どのオリジンからのリクエストでも受け入れる。
広範なアクセスを許可するのでセキュリティ上のリスクに対して考慮が必要 - ExposeHeaders: []
-
空ですが、通常はクライアントに対してS3のレスポンスの一部としてどのヘッダーが利用可能か指定する。
ヘッダーが指定されていないので追加のヘッダーは公開されない。
目次
まとめ
- 上記だとあらゆるオリジンからのwebアプリケーションが指定されたhttpメソッド(GET、PUT、POST)を使用してS3バケットにアクセスできるようになる。
- できれば
*
ではなく具体的なURLに制限した方が良い