AWS認定資格 WEB問題集&徹底解説

ソリューションアーキテクト – アソシエイト

正解 D問題
要復習(もう一度解きたい問題) 1 2 3 4
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
ある企業が、カスタム AMI 上のテキストファイルにアクセスキー (アクセスキー ID およびシークレットアクセスキー) を格納しようとしています。その企業は、アクセスキーを使用して、AMI から作成されたインスタンスから DynamoDB テーブルにアクセスします。セキュリティチームは、よりセキュアなソリューションを要求しています。
セキュリティチームの要求に応えるソリューションはどれですか。
  • アクセスキーを Amazon S3 バケットに格納し、起動時にインスタンスからアクセスキーを取得する。
  • インスタンスユーザーデータを介してアクセスキーをインスタンスに渡す。
  • プライベートサブネット内で起動されたキーサーバーからアクセスキーを取得する。
  • そのテーブルにアクセスする権限を持つ IAM ロールを作成し、そのロールを使用してすべてのインスタンスを起動する。
解説 頻出度★★★★★
この問題は、「EC2 上のアプリから AWS サービスへアクセスする」場面で、アクセスキーをどこかに保管する発想を捨て、IAM ロールの一時的な認証情報を使うという定石を選べるかがポイント

A. アクセスキーを Amazon S3 バケットに格納し、起動時にインスタンスからアクセスキーを取得する。

アクセスキーの保管場所を AMI 内のテキストファイルから Amazon S3 へ移しただけで、長期的なアクセスキーを発行・配布・ローテーションし続ける問題はそのまま残る。
さらに「S3 からキーを取得するための認証情報」が新たに必要になり、鶏と卵の問題に陥る(結局その認証情報を渡す手段として IAM ロールが要る)。
バケットポリシーの設定ミスでキーが流出するリスクも増えるだけで、セキュリティチームの要求への回答にならない。

B. インスタンスユーザーデータを介してアクセスキーをインスタンスに渡す。

インスタンスユーザーデータは暗号化されず、インスタンスメタデータや API(DescribeInstanceAttribute)から平文で参照できる。AWS 公式も「ユーザーデータに機密情報や認証情報を含めないこと」と明記している。
インスタンスにログインできる利用者なら誰でもキーを取り出せてしまうため、AMI 内のファイルに置く現状よりむしろ悪化しかねない

C. プライベートサブネット内で起動されたキーサーバーからアクセスキーを取得する。

プライベートサブネットに置くことでネットワーク的には隠れるが、長期的なアクセスキーを使い続ける構図は何も変わらない
加えてキーサーバー自体の構築・冗長化・パッチ適用・アクセス制御という運用負荷が丸ごと増える
AWS ではこの役割をマネージドな IAM ロールが担うため、自前サーバーを立てる選択は取らない。

正解

D. そのテーブルにアクセスする権限を持つ IAM ロールを作成し、そのロールを使用してすべてのインスタンスを起動する。

IAM ロールをインスタンスプロファイルとして EC2 に関連付ければ、一時的なセキュリティ認証情報がインスタンスメタデータ経由で自動配布され、有効期限前に自動ローテーションされる。
AWS SDK / CLI はこの認証情報を自動的に取得するため、アプリケーションのコードにも AMI にもキーを一切保存する必要がなくなる
「長期の認証情報を排除する」という AWS のセキュリティベストプラクティスに合致し、DynamoDB テーブルへの最小権限も IAM ポリシーで表現できる、唯一の正解。

構成図

IAM ロール(DynamoDB への権限)
   │ インスタンスプロファイルとして関連付け
   ▼
Amazon EC2(AMI から作成) ──一時的な認証情報──▶ Amazon DynamoDB
これだけ覚える(記憶フック)
EC2 に権限を渡すなら IAM ロール一択。「キーをどこに置くか」を考え始めたら、それ自体が誤り。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
アクセスキーをテキストファイルに格納している(現状の問題点) 長期的なアクセスキーを保管すること自体がリスク。保管場所を変える(S3・キーサーバー)だけでは解決しない
→選択肢(A・C)を消す
セキュリティチームが「よりセキュアなソリューション」を要求 ユーザーデータは暗号化されず平文で参照できるため、シークレットの受け渡しには使えない
→選択肢(B)を消す
AMI から作成されたインスタンスから DynamoDB テーブルにアクセス EC2 上のアプリへの権限付与は IAM ロール+インスタンスプロファイルが定石。認証情報は自動配布・自動ローテーション
→選択肢(D)が正解
AMI から複数のインスタンスを起動する(台数が増える前提) キーを AMI に焼き込む方式はローテーションのたびに AMI を作り直すことになる。ロールなら起動時に指定するだけ
→選択肢(D)が正解
ひっかけポイント
  • 「Amazon S3 に格納」は保管場所がマネージドになるため安全そうに見えるが、キーの置き場所を変えただけ。しかもその S3 を読むための認証情報が別途必要になり、問題が一段ずれるだけ
  • ユーザーデータはコンソールや API から中身を平文で参照できる。起動時のスクリプト実行用であって、シークレット配布用の仕組みではない
  • 「プライベートサブネット」というキーワードでセキュアに感じさせるのが選択肢 C の罠。ネットワークを隠しても、長期キーを使い続けている事実は変わらない
  • 本問は「キーをどこに置くか」を選ばせる問題に見えるが、正解は「キーを置かない」。設問がキーの保管方法を並べてきたら、まず IAM ロールを探す
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
AWS Lambda から DynamoDB にアクセスしたい」 Lambda の実行ロールに権限を付与する(考え方は同じ「ロール」)。
「DB のパスワードなどどうしても保存が必要な秘密情報がある」 AWS Secrets Manager(自動ローテーション)や SSM パラメータストアが正解軸に。
オンプレミスのサーバーから AWS リソースにアクセスしたい」 IAM Roles Anywhere や、最小権限の IAM ユーザー+アクセスキーが登場する。
別の AWS アカウントのリソースにアクセスしたい」 クロスアカウントのロール引き受け(AssumeRole)が正解軸に。
関連サービスの解説 Amazon DynamoDB
Amazon Simple Storage Service (Amazon S3)
AWS Identity and Access Management (AWS IAM)
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 65%
No.2 解説
ある企業が、カスタム AMI 上のテキストファイルにアクセスキー (アクセスキー ID およびシークレットアクセスキー) を格納しようとしています。その企業は、アクセスキーを使用して、AMI から作成されたインスタンスから DynamoDB テーブルにアクセスします。セキュリティチームは、よりセキュアなソリューションを要求しています。
セキュリティチームの要求に応えるソリューションはどれですか。
  • アクセスキーを Amazon S3 バケットに格納し、起動時にインスタンスからアクセスキーを取得する。
  • インスタンスユーザーデータを介してアクセスキーをインスタンスに渡す。
  • プライベートサブネット内で起動されたキーサーバーからアクセスキーを取得する。
  • そのテーブルにアクセスする権限を持つ IAM ロールを作成し、そのロールを使用してすべてのインスタンスを起動する。

(会員限定)当問題の評価をお願いします。改善に活用します。