ある金融企業では、AWS KMS のカスタマーマネージドキー(CMK)を使って AWS Systems Manager Parameter Store に保存された機密設定値(SecureString パラメータ)を暗号化しています。 要件として「この CMK を使った復号(kms:Decrypt)操作は AWS CloudFormation のデプロイ処理を経由した場合のみ許可し、開発者が AWS CLI や SDK から直接呼び出すことを防ぎたい」とします。 KMS キーポリシーに追加すべき最も適切な条件はどれですか?
aws:CalledVia 条件キーは、リクエストが指定した AWS サービスを経由して行われた場合のみアクセスを許可します。"aws:CalledVia": ["cloudformation.amazonaws.com"] を KMS キーポリシーの条件に追加することで、開発者が直接 kms:Decrypt を呼び出すことを防ぎ、CloudFormation デプロイ処理を通じた呼び出しのみを許可できます。どの IAM プリンシパルが使われていても正確に判定できる点が強みです。 選択肢B の aws:PrincipalIsAWSService: true は呼び出し元が AWS サービスかどうかのみを判定し、特定のサービスを指定できません。Systems Manager や Lambda など他サービスからの呼び出しも許可されてしまいます。 選択肢C の aws:PrincipalServiceName は IAM に存在しない条件キーです。AWS サービスプリンシパルを特定するには aws:CalledVia を使用します。 選択肢D の 開発者の IAM ロールを明示的に Deny は、開発者が専用サービスロールなしに自身の IAM ロールで CloudFormation をデプロイする場合、その Deny が CloudFormation 経由の復号も拒否してしまいます。