Q32 — AWS SAA-C03 第10章
第 32/100 問 | ← 第10章
Q632. ソリューションアーキテクトが AWS CloudFormation テンプレートを使用して、3層構成のWebアプリケーションをデプロイしています。このWebアプリケーションは、Web層とアプリケーション層から構成され、アプリケーション層では Amazon DynamoDB テーブルにユーザーのデータを保存・取得します。Web層およびアプリケーション層は Amazon EC2 インスタンス上でホストされており、データベース層(DynamoDB)はパブリックにアクセスできないように設定されています。アプリケーション用のEC2インスタンスは、CloudFormationテンプレート内にAPI認証情報(アクセスキー/シークレットキー)を露出させることなく、DynamoDBテーブルにアクセスする必要があります。これらの要件を満たすために、ソリューションアーキテクトは何を行うべきでしょうか?
- A. DynamoDBテーブルを読み取るためのIAMロールを作成し、インスタンスプロファイルを参照してアプリケーション用EC2インスタンスに関連付けます。
- B. DynamoDBテーブルからの読み書きに必要な権限を持つIAMロールを作成します。そのロールをEC2インスタンスプロファイルに追加し、アプリケーション用EC2インスタンスに関連付けます。 ✓
- C. AWS CloudFormationテンプレートのParametersセクションを使用して、あらかじめ作成済みのIAMユーザーのアクセスキーとシークレットキーをユーザーに入力させるようにします。このIAMユーザーには、DynamoDBテーブルに対する読み書き権限が付与されています。
- D. AWS CloudFormationテンプレート内で、DynamoDBテーブルに対する読み書き権限を持つIAMユーザーを作成します。GetAtt関数を使用してアクセスキーとシークレットキーを取得し、ユーザーデータ経由でアプリケーション用EC2インスタンスに渡します。
正解: B. DynamoDBテーブルからの読み書きに必要な権限を持つIAMロールを作成します。そのロールをEC2インスタンスプロファイルに追加し、アプリケーション用EC2インスタンスに関連付けます。
解説
CloudFormationテンプレート内にAPI認証情報を露出させずに、アプリケーション用EC2インスタンスがDynamoDBテーブルにアクセスできるようにするには、最も適切な解決策は以下の通りです: B. DynamoDBテーブルに対する読み書きに必要な権限を持つIAMロールを作成し、そのロールをEC2インスタンスプロファイルに追加したうえで、アプリケーション用EC2インスタンスに関連付けます。この方法は、API認証情報を一切テンプレートに含めず、かつセキュアかつスケーラブルにアクセス権限を付与できるベストプラクティスです。具体的な実装手順は以下のとおりです。 1. IAMロール:DynamoDBテーブルへの読み書きを許可するIAMポリシーをアタッチしたIAMロールを作成します。 2. EC2インスタンスプロファイル:このIAMロールをEC2インスタンスプロファイルに関連付けます。インスタンスプロファイルは、EC2インスタンスにアタッチ可能なIAMロールのコンテナであり、これによりインスタンスはロールに定義された権限を継承します。 3. アプリケーション用EC2インスタンス:上記のインスタンスプロファイルを指定してEC2インスタンスを起動することで、DynamoDBへのアクセスに必要な権限が自動的に付与され、認証情報の管理や露出リスクを回避できます。 選択肢Aは不十分です: A. DynamoDBテーブルを読み取るIAMロールを作成し、インスタンスプロファイル経由でEC2インスタンスに関連付けるという基本的な考え方は正しいですが、選択肢Aでは「CloudFormationテンプレート内でインスタンスプロファイルを参照する」と記述されており、これは誤りです。正しくは、EC2リソース(例:AWS::EC2::Instance)の「IamInstanceProfile」プロパティにインスタンスプロファイルのARNまたは名前を明示的に指定して関連付ける必要があります。 選択肢CおよびDは推奨されません: C. 既存のIAMユーザーのアクセスキー/シークレットキーをParametersセクションでユーザーに入力させる方法は、認証情報をテンプレートやスタックイベントログなどに残す可能性があり、セキュリティ上の重大なリスクを伴います。 D. CloudFormationテンプレート内でIAMユーザーを作成し、GetAtt関数でその認証情報を取得してユーザーデータ経由でEC2インスタンスに渡す方法も同様に、認証情報がテンプレートやCloudFormationの内部状態に露呈するため、厳に避けるべきです。 したがって、API認証情報をCloudFormationテンプレート内に一切露出させず、アプリケーション用EC2インスタンスにDynamoDBへの安全なアクセス権限を付与するには、IAMロールを作成し、それをEC2インスタンスプロファイルに追加・関連付ける(選択肢B)が最適な解決策です。