ある企業は S3 バケットへの PUT リクエスト時に、アップロードされるオブジェクトに対して SSE-KMS 暗号化を強制したいと考えています。暗号化されていないオブジェクトのアップロードを拒否するにはどの設定が最も適切ですか?
- A. IAM ポリシーで s3:PutObject を全ユーザーに対して Deny し、暗号化済みオブジェクトのみ特定ロールに Allow する
- B. S3 オブジェクトロック(Object Lock)を有効にして暗号化を強制する
- C. S3 バケットポリシーに「x-amz-server-side-encryption ヘッダーが aws:kms でない PUT リクエストを Deny する」Condition を追加する
- D. S3 バケットのデフォルト暗号化を SSE-KMS に設定することで、暗号化なしの PUT は自動的に拒否される
解答と解説を見る
正解: C
S3 バケットポリシーの Condition で s3:x-amz-server-side-encryption 条件キーを使い、値が aws:kms でない PUT リクエストを Deny することで、SSE-KMS 以外の暗号化でのアップロードを強制的に拒否できます。具体的には「StringNotEquals: {s3:x-amz-server-side-encryption: aws:kms}」という Condition を Deny ステートメントに設定します。D のデフォルト暗号化は SSE-KMS を設定すると暗号化なしの PUT に対して自動的に SSE-KMS を適用しますが、拒否はしません。つまり要求を拒否するのではなく自動暗号化する動作であり、コンプライアンス上「拒否を強制する」要件には不十分です。A の IAM ポリシーによる全ユーザー Deny は実装が複雑で管理しにくく、バケットポリシーで一元管理する方が適切です。B のオブジェクトロックはデータ保護(WORM)のための機能で暗号化強制には無関係です。
📚 関連サービスの解説: Amazon S3