DVAセキュリティ
マルチテナントSaaSアプリケーションのバックエンドLambda関数が、すべての顧客データを格納する単一のS3バケットへのフルアクセス権限を持つIAMロールで動作しています。各リクエスト処理時に、特定の顧客(例:tenant-abc/)のプレフィックス配下のオブジェクトのみにアクセスを制限したい場合、最もセキュアな実装方法はどれですか?
ALambda関数内でS3 APIレスポンスのオブジェクトキーにテナントプレフィックスが含まれるかを検証し、一致しない場合はアプリケーション側で403を返す
アプリケーション層でのチェックはコードのバグや例外処理の漏れにより迂回されるリスクがある。IAM・STSによるポリシー強制と比べてセキュリティの堅牢性が低い実装である。
BSTS AssumeRole 呼び出し時にセッションポリシーを付加し、対象テナントのプレフィックスのみに権限を絞り込んだ一時認証情報を発行してS3操作に使用する
✓ 正解
STSセッションポリシーはロールの権限を上書きせず「さらに絞り込む」動作をするため、テナント固有のプレフィックス条件を含むポリシーを付加するとAWS基盤レベルでアクセスが制限され、最もセキュアな方法である。
Cテナントごとに専用IAMロールを事前に作成しLambda実行時に対象テナントのロールに切り替え、各ロールに該当プレフィックスのみの権限を定義する
テナント数が数百・数千規模になるとIAMロール数の上限や管理コストの問題が生じる。テナントが動的に増加するSaaSアーキテクチャではスケーラブルな設計とは言えない。
DS3バケットポリシーの条件にテナントIDタグを指定し、LambdaがリクエストごとにカスタムHTTPヘッダーでテナントIDを送信することでアクセスを制御する
S3はリクエストのカスタムHTTPヘッダーを条件キーとして評価する機能を持たない。バケットポリシーの条件では aws:PrincipalTag などのIAM属性を使う必要があり、この方法は動作しない。
解説
STS の AssumeRole API に Policy パラメータとしてセッションポリシーを渡すと、既存のIAMロールの権限をさらに絞り込んだ一時認証情報を発行できます。テナントIDをプレフィックスとしたS3アクセス条件を含むセッションポリシーを渡すことで、そのリクエスト専用に権限が制限されます。アクセス制御をAWS基盤レベルで強制できるため、アプリケーションコードのバグによるデータ漏洩リスクを大幅に低減できます。セッションポリシーはロールの権限を拡張せず「絞り込む」のみという点が重要な特性です。
選択肢Aのアプリケーション層でのキー検証はコードのバグや例外処理の漏れで迂回されるリスクがあり、セキュリティ境界として不十分である。
選択肢Cのテナントごとに専用IAMロールを作成する方法はテナント数が増えると管理コストが爆発的に増加し、スケーラブルでない。
選択肢DのカスタムHTTPヘッダーはS3の認可機構でサポートされておらず、S3バケットポリシーの条件キーとして利用できない。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →