S3暗号化とCloudFrontとACM(SSL)の静的ウェブホスティングの注意点
CloudFront、ACM(SSL)、S3でSSLによる静的ウェブホスティングでブラウザにうまく表示されない場合の気をつけるべきポイントです。
CloudFrontとACMでSSLによる静的ウェブホスティングを行うS3バケットは、SSE-S3でデフォルトの暗号化とサーバー側の暗号化をすると静的ウェブホスティングのコンテンツをブラウザから見られます。AWS KMSによる暗号化ではブラウザで見られません。
S3バケットのパブリックブロックアクセスは全解除しておいてください。
CloudFrontで使うACMのSSL証明証は、必ずACMのバージニア北部で発行してください。
S3のアクセス管理は暗号化を含めると、以下の全てで正しい設定が必要です。
- S3グローバルのブロックパブリックアクセス設定
- 1リージョンのさらに1バケット単位のブロックパブリックアクセス設定
- S3バケットポリシー
- S3バケットのアクセスコントロールリスト
- S3バケット単位の「デフォルトの暗号化」
- S3バケットのオブジェクト単位の「(サーバー側の)暗号化」
- AWS内のリソースとの連携を管理するためのIAMポリシーやIAMロール(EC2からS3アクセスする場合)
静的ウェブホスティングSSLとS3バケット暗号化
CloudFrontでACMを使ってSSL化したら、S3バケットでも「デフォルトの暗号化」を有効にする必要があります。S3バケット作成の後、途中で「デフォルトの暗号化」や「サーバー側の暗号化」を有効にすると、中身の全オブジェクトは同時に暗号化にならないので、次のようなコマンド操作でバケット内の全オブジェクトの暗号化も行う必要があります。
S3バケット内の全オブジェクト一括暗号化AWS CLI
SSE-S3 の場合(CloudFront ACM S3でSSL静的ウェブサイトホスティングで使う)
aws s3 cp s3://バケット名/ s3://バケット名/ --sse AES256 --recursive
AWS KMSの場合(静的ウェブホスティングではない、パブリックアクセスしないログのS3バケットなど)
aws s3 cp s3://バケット名/ s3://バケット名/ --sse aws:kms --recursive