ある企業が、EC2 インスタンスで動作するアプリケーションに対して、AWS KMS を使って特定のデータを暗号化/復号する機能を実装したい。最小権限の原則に従い、そのアプリケーションの EC2 インスタンスにだけ KMS キーの使用を許可し、他の IAM エンティティからは使用できないようにしたい。最も適切な方法はどれか。
- A. KMS キーポリシーで AWS アカウントのルートユーザーを Principal に指定して全権限を付与し、IAM ポリシーで対象ロールのみに KMS 使用を許可する。
- B. AWS Secrets Manager でデータを暗号化し、KMS キーは使用しない。
- C. KMS キーポリシーで EC2 インスタンスにアタッチされた IAM ロールの ARN を Principal に指定し、kms:Encrypt と kms:Decrypt のみを Allow する。
- D. KMS キーを EC2 インスタンスのリージョンと異なるリージョンに作成し、クロスリージョンアクセスを設定する。
解答と解説を見る
正解: C
KMS キーポリシーで EC2 インスタンスのIAMロール ARN を Principal に直接指定し、必要な kms:Encrypt と kms:Decrypt のアクションのみを Allow することで、そのロールを持つ EC2 のみがキーを使用できる最小権限の構成が実現できる。他の IAM エンティティは明示的に許可されていないためアクセスできない。選択肢Aはルートユーザーに全権限を付与してから IAM ポリシーで制限する方法で技術的には動作するが、キーポリシーで Principal を明示的に絞る方が最小権限の原則に沿っており、セキュリティ上より望ましい。選択肢Dはクロスリージョンでの KMS 利用はレイテンシーが増加し、AWS KMS のリージョン構成として一般的ではない。KMS マルチリージョンキーという仕組みはあるが、今回の要件には不要な複雑さを加える。選択肢BのSecrets Manager は認証情報の管理に使うサービスであり、任意データの暗号化/復号には直接使用しない。
📚 関連サービスの解説: AWS KMS ・ Amazon EC2