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

モバイルアプリのユーザーが Google アカウントでサインインし、認証後に DynamoDB へ直接アクセスする要件がある。アプリに AWS の長期的な認証情報を埋め込まずに実装するには、どの構成が最も適切か。

A
Cognito ユーザープールで Google フェデレーションを設定し、取得した JWT トークンをそのまま DynamoDB の API 呼び出しに使用する
JWT トークンは AWS の認証情報ではなく、DynamoDB の API リクエストには SigV4 署名(IAM 認証情報)が必要なため、JWT をそのまま API 呼び出しに使用することはできません。
B
Cognito ユーザープールで Google フェデレーションを構成し、認証後に Cognito アイデンティティプール(Identity Pool)を使って一時的な IAM 認証情報を取得する
✓ 正解
Cognito アイデンティティプール は外部 IdP(Identity Provider)のトークンを STS の AssumeRoleWithWebIdentity に渡し、一時的な IAM 認証情報を発行します。アプリに長期認証情報を埋め込む必要がなく、IAM ロールで DynamoDB アクセスを制御できます。
C
Google から取得した ID トークンを STS の GetSessionToken API に渡して IAM 認証情報を取得する
STS の GetSessionToken は既存の IAM ユーザーが MFA を使用する際に呼び出すものであり、外部 IdP の ID トークンを引数として受け付けません。外部 IdP 連携には AssumeRoleWithWebIdentity が必要です。
D
IAM ユーザーをユーザーごとに作成し、アクセスキーをモバイルアプリに配布する
ユーザーごとに IAM ユーザーを作成してアクセスキーをモバイルアプリに配布することはセキュリティリスクが極めて高く、漏洩時の影響範囲が広く、認証情報のローテーションも困難です。

解説

正解: Cognito ユーザープールで Google フェデレーションを構成し、認証後に Cognito アイデンティティプール(Identity Pool)を使って一時的な IAM 認証情報を取得する。 Cognito アイデンティティプールは外部 IdP(Identity Provider / ID プロバイダー)のトークンを STS の AssumeRoleWithWebIdentity に渡し、一時的な IAM 認証情報を発行する。アプリに長期認証情報を埋め込む必要がなく、IAM ロールで DynamoDB アクセスを制御できる。ユーザープールは認証、アイデンティティプールは AWS リソースへの認可を担う役割分担が重要。【Aが誤りの理由】JWT トークンは AWS の認証情報ではなく、DynamoDB の API リクエストには SigV4 署名(IAM 認証情報)が必要なため、JWT をそのまま API 呼び出しに使用することはできない。【Cが誤りの理由】STS の GetSessionToken は既存の IAM ユーザーが MFA を使用する際に呼び出すものであり、外部 IdP(Google)の ID トークンを引数として受け付けない。外部 IdP 連携による一時認証情報取得には AssumeRoleWithWebIdentity が必要であり、Cognito アイデンティティプールがこれを内部で自動実行する。【Dが誤りの理由】ユーザーごとに IAM ユーザーを作成してアクセスキーをモバイルアプリに配布することは、長期的な認証情報をクライアント端末に埋め込む形となりセキュリティリスクが極めて高い。漏洩時の影響範囲が広く、認証情報のローテーションも困難になる。

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

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

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