同一アカウントのCloudFront distributionで、通常のS3 REST originから静的オブジェクトをGET配信する。S3 website endpointは使わず、暗号化はSSE-S3である。
バケットはBucket owner enforcedでACLを無効にし、Block Public Accessの全4設定を有効にしている。匿名公開のAllowはなく、CloudFrontからの読み取り許可をこれから設定する。
CloudFront経由では誰でも閲覧できるままにし、匿名のS3直接取得を防ぐ。バケット側で許可するCloudFrontからの読み取りは意図するdistributionだけに限定する。
この要件を満たす構成はどれか。
S3 REST originへ常時署名するOACを関連付け、バケットポリシーでCloudFrontの読み取りを特定distributionへ限定する。オリジン保護とCloudFront閲覧者の認証は別の要件である。
詳細解説
サービスプリンシパルの指定だけでは特定distributionへの限定にならない。AWS:SourceArnに意図するdistribution ARNを指定して許可の範囲を絞る。
neverではCloudFrontがオリジン要求に署名しない。匿名公開も他の認証手段もない本問では、非公開バケットにOACを関連付けるだけでは読み取れない。
OACの署名と、特定distributionからのオブジェクト読み取り許可を組み合わせる。Block Public AccessとBucket owner enforcedを維持でき、匿名のS3直接取得を許可する必要はない。
S3 website endpointはOACに対応しない。通常のS3 REST originとwebsite endpointを区別する必要がある。
公式資料で確認する
以下の項目を公式資料の記述と照合して確認します。
公式資料とoriginの種類、OAC関連付け・SigningBehavior、バケットポリシーのPrincipal・Action・Resource・AWS:SourceArn、Block Public Access、Object Ownershipを照合する。利用可能な承認済み環境では匿名のS3直接GETを拒否でき、意図するCloudFrontから未キャッシュの既知オブジェクトを取得できることを設定とオリジン取得記録で確認する。
参考にした公式資料
確認できる内容
匿名のS3直接GETはAccessDeniedとなり、意図するCloudFront経由のGETは成功する。許可が対象オブジェクトとdistributionに限定されていることを設定でも確認する。キャッシュ済み200だけでオリジン認証成功と判断せず、許可されたIAM管理操作の一律拒否も要件にしない。
理解のポイント
- SigningBehavior
- AWS:SourceArn
- S3 REST origin
確認時の注意
- 確認環境: AWS公式SOA-C03試験ガイドとAWS公式ドキュメントの確認
- AWS公式SOA-C03試験ガイドと各サービスの公式ドキュメントを確認する。
基礎のおさらい
OACの署名とS3の許可を組み合わせる
通常のS3 REST originへOACを関連付け、SigningBehavior=alwaysでオリジン要求をSigV4署名する。バケットポリシーではcloudfront.amazonaws.comに対象オブジェクトARNのs3:GetObjectを許可し、AWS:SourceArnを意図するdistribution ARNへ限定する。OACを作るだけ、または署名をneverにするだけでは非公開S3の読み取り許可にならない。S3 website endpointをcustom originにした構成ではOACを利用できない。
匿名公開の防止と管理権限を区別する
Block Public Accessの全設定とBucket owner enforcedを維持し、匿名公開を許可するポリシーを残さない。ACLが無効でもバケットポリシーによる許可は必要である。防ぐのは匿名のS3直接取得であり、正当に許可されたIAM管理操作まで一律拒否するという意味ではない。本問はSSE-S3であり、SSE-KMSを使う場合はKMSキーポリシーの追加許可も確認する。
オリジン保護・閲覧者認証・キャッシュを分ける
OACはCloudFrontからS3へのアクセスを保護する。CloudFront閲覧者を会員などへ限定する署名付きURLやCookieとは別の境界である。本問のCloudFront閲覧は公開のままでよい。キャッシュ済み応答の200だけではS3への到達を証明できないため、承認済み環境で未キャッシュの既知オブジェクトと設定・オリジン取得記録を照合する。