ある企業が、AWS で動作するアプリケーションから機密データを含む複数の S3 バケットへの全アクセスを暗号化し、データの整合性も検証したい。クライアント側の暗号化とサーバー側の暗号化を組み合わせて多層防御を実現したい。最も適切な設定はどれか。
- A. S3 のアクセスコントロールリスト(ACL)を使ってアクセスを制限する。
- B. S3 バケットのサーバー側暗号化(SSE-KMS)を有効化するだけで十分である。
- C. EC2 のセキュリティグループで HTTPS(443)以外のアウトバウンドをブロックする。
- D. S3 バケットポリシーで aws:SecureTransport 条件キーを使って HTTPS(TLS)以外のリクエストを Deny し、S3 のサーバー側暗号化(SSE-KMS)を有効化する。
解答と解説を見る
正解: D
aws:SecureTransport 条件キーを使った Deny ポリシーを S3 バケットポリシーに設定することで、HTTP(平文)によるリクエストをすべて拒否し、HTTPS のみを強制できる。これにより転送中のデータが暗号化される。SSE-KMS を有効化することで、S3 に保存されるデータ(保存データ)も KMS キーで暗号化される。この組み合わせで転送中と保存時の両方でデータが保護される。選択肢BのSSE-KMS のみでは保存時の暗号化は実現されるが、転送中(HTTP での送受信)が保護されない。選択肢CのEC2 セキュリティグループでのHTTPS 強制は EC2 から外部への通信のポートを制限するが、S3 へのリクエストが必ず HTTPS になることをバケットポリシーレベルで保証しない(SDK がデフォルト HTTPS を使う前提に依存)。選択肢AのS3 ACL はオブジェクト・バケットの公開/非公開制御に使われるが、暗号化の強制には使えない。また ACL はレガシー機能。