ソリューションアーキテクトは、クラウドエンジニアのチームが AWS CLI を使用して Amazon S3 バケットにオブジェクトをアップロードするための安全な方法を提供しなければなりません。各クラウドエンジニアには IAM ユーザー、IAM アクセスキー、および仮想マルチファクタ認証(MFA)デバイスがあります。クラウドエンジニアの IAM ユーザーは「S3-access」という名前のグループに属しています。クラウドエンジニアは、Amazon S3 でいかなるアクションを実行する場合でも MFA を使用しなければなりません。
この要件を満たすソリューションはどれですか?正解:D
この要件を満たすためには、**「MFA が有効であることを示すコンテキストを持つ一時的な認証情報で S3 API を呼ぶ」**必要があります。通常の長期アクセスキー(Access key ID/Secret access key)で CLI から直接 S3 を呼んでも、MFA の検証結果は自動的には API リクエストに伝播しません。したがってポリシー側で aws:MultiFactorAuthPresent(または aws:MultiFactorAuthAge)を条件に「MFA なしは拒否」をかけたうえで、ユーザーは MFA デバイスのワンタイムコードを用いて sts:GetSessionToken を呼び出し、一時的なセッショントークン(SessionToken を含む三点セット)を取得し、そのプロファイルで S3 を操作します。これによりリクエストに「MFA が存在する」というコンテキストが付与され、S3 のアクションが許可されます。
このフローをそのまま示しているのが D です。グループに「MFA がなければ S3 を拒否」のポリシーを付け、STS で MFA 付きの一時クレデンシャルを取得して使う、というのが AWS のベストプラクティスです。
- ユーザーは
aws sts get-session-token --serial-number <MFAデバイスARN> --token-code <6桁コード>を実行して一時認証情報を得る。 - 返ってきた
AccessKeyId/SecretAccessKey/SessionTokenをプロファイルに設定し、そのプロファイルでaws s3 cp ...などを実行する。 - IAM(もしくはバケット)側のポリシーで
Condition: {"Bool": {"aws:MultiFactorAuthPresent": "true"}}を満たすため、S3 操作が許可される。

コメント