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テーブルにアクセスする必要があります。これらの要件を満たすために、ソリューションアーキテクトは何を行うべきでしょうか?

正解: 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)が最適な解決策です。