無限ノック › DVA 練習問題一覧 › 問題
DVAセキュリティ

データ処理パイプラインで、Step FunctionsからトリガーされるLambda関数が特定のKMS CMKを使用してS3オブジェクトを復号処理します。 この処理は月次バッチで実行され、以下の要件があります。 - 実行中のみCMKへのアクセスを許可する - 処理完了後はプログラムからアクセスを無効化する 最も適切な実装はどれですか?

A
KMS CreateGrant APIでLambda実行ロールにDecrypt操作のグラントを作成し、処理完了後にRetireGrant APIで削除する
✓ 正解
KMSグラントはCreateGrant/RetireGrant APIでプログラムから動的に権限を付与・削除できます。キーポリシーを変更せずに期間限定でDecrypt権限を制御でき、月次バッチの要件に最適です。
B
処理開始時にKMSキーポリシーへLambda実行ロールのARNをPutKeyPolicy APIで追加し、完了後に元のポリシーに戻す
PutKeyPolicyによるキーポリシーの動的更新は、並行実行時の競合リスクがあり、JSONドキュメントの管理が複雑です。誤操作でキーへのアクセスを失うリスクもあります。
C
STS AssumeRoleでKMS管理者ロールを一時的に引き受け、セッション有効期間中のみCMKを使用してセッション終了で無効化する
KMS管理者ロールのAssumeRoleは過剰な権限(kms:CreateKey等)を含む可能性があり最小権限原則に反します。また、STSセッション有効期限は細かいアクセス制御には不向きです。
D
GenerateDataKeyで生成したデータキーをLambdaの環境変数に暗号化して保存し、処理後に環境変数をクリアして無効化する
Data Keyを環境変数に永続保存することはセキュリティリスクです。Data KeyはGenerateDataKeyで使用時に生成し、処理後すぐにメモリから削除するのがエンベロープ暗号化のベストプラクティスです。

解説

KMSグラントは、KMSキーポリシーを変更せずにプログラムから動的に特定のプリンシパルへの操作権限を付与・削除できる仕組みです。CreateGrant APIで操作種別(Decrypt)と許可対象のプリンシパル(Lambda実行ロール)を指定してグラントを作成し、処理完了後にRetireGrant APIでグラントを削除することで、アクセス期間を正確に制御できます。グラントはキーポリシーとは独立して管理されるため、ポリシードキュメントを書き換えるリスクがありません。 選択肢BのPutKeyPolicyによるキーポリシーの動的更新は機能しますが、並行実行時に競合が発生するリスクがあり、JSONドキュメントの管理が複雑です。グラントのほうがプログラム的な管理に適しています。 選択肢CのSTS AssumeRoleでCMK管理者ロールを引き受けることはkms:CreateKeyなど過剰な権限を持つ可能性があり、最小権限原則に反します。 選択肢DのData Keyを環境変数に保存することはセキュリティ上のリスクがあり推奨されません。Data Keyは使用後すぐにメモリから削除するのがベストプラクティスです。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DVA の問題一覧に戻る