【正解】D
【0からの解説】
「S3 のすべての操作で MFA を必須にする」には、IAM ポリシーで条件キー aws:MultiFactorAuthPresent が true でない限りアクションを拒否(Deny)するのが基本です。これをグループに付ければチーム全員に適用できます。
ここで重要なのは「MFA が反映されるのはどの認証情報か」です。長期の IAM アクセスキーをそのまま AWS CLI で使っても、その呼び出しには MFA 情報が含まれず、aws:MultiFactorAuthPresent は false になり Deny されます。MFA を効かせるには、まず STS の GetSessionToken などで MFA コードを提示して「一時的な認証情報(MFA セッション)」を取得し、その一時認証情報を CLI のプロファイルに設定して S3 を呼び出す必要があります。これにより一時認証情報には MFA 情報が含まれ、Deny 条件を通過できます。よって D が正解です。
【誤りの選択肢】
A:S3 バケットポリシーは「MFA コードの入力を促す(prompt)」ことはできません。ポリシーはあくまで条件で許可/拒否を判定するだけで、しかも長期アクセスキーのままでは MFA セッションが付かないため要件を満たせません。
B:「グループ」は IAM ロールのように assume するものではなく、信頼ポリシーも持ちません。グループに対する trust policy という概念自体が誤りです。
C:MFA 必須の Deny ポリシー自体は正しいものの、長期 IAM アクセスキーをそのまま使うと MFA セッションが含まれないため、すべての S3 操作が拒否されて動作しません。STS の一時認証情報を取得する D の手順が欠けています。
【参考】
MFA で保護された API アクセスの設定STS GetSessionToken(一時認証情報)