説明
S3 CORS は、別のオリジンで動くブラウザーアプリケーションがバケットのリソースを利用する方法を定めます。不要なオリジンやメソッドを許可すると、意図しないウェブページからも、すでに認可されたリクエストを利用できる場合があります。CORS 自体が S3 の読み書き権限を付与したり、ポリシーや認証を回避したりすることはありません。
想定される影響
- 認可された応答をブラウザーから読み取れるオリジンの範囲が広がる場合があります。
- 書き込み権限や署名付きリクエストを利用できる場合、不要なアップロードや削除の経路がブラウザーで使えるようになるおそれがあります。
対処方法
- 実際のアプリケーションの HTTPS オリジンと、必要なメソッド・ヘッダーだけを許可してください。公開コンテンツへの意図的な広いアクセスは別途判断してください。
PUT、POST、DELETEを含む各メソッドを機能要件に合わせて選び、名前だけで安全性を判断しないでください。- S3 の権限も別途制限し、必要なブラウザーリクエストが成功することを試験してください。
例
この例では、アプリケーションに GET と POST だけが必要だと仮定します。オリジンはパスを含めずスキームとホストで指定し、実際のオリジンと必要なリクエストヘッダーに合わせてください。
変更前
yaml
- name: S3 CORS 규칙 설정
community.aws.aws_s3_cors:
name: mys3bucket
state: present
rules:
- allowed_origins:
- https://www.example.com
allowed_methods:
- GET
- POST
- PUT
- DELETE
- HEAD
五つのメソッドをすべて許可しており、このアプリケーションには不要な PUT、DELETE、HEAD も含まれます。
変更後
yaml
- name: S3 CORS 규칙 설정
community.aws.aws_s3_cors:
name: mys3bucket
state: present
rules:
- allowed_origins:
- https://www.example.com
allowed_methods:
- GET
- POST
必要な GET と POST だけを残しています。POST にはアップロードなどの書き込み用途もあるため、S3 の権限やリクエスト検証は別途適用してください。