AWS Secrets Manager のシークレットを使用するタスクを Amazon Elastic Container Service (Amazon ECS) に配置しようとすると、エラーが表示されます。
簡単な説明
Secrets Manager のシークレットを含むタスクを Amazon ECS に配置しないと、次のいずれかのエラーが表示されることがあります。
「Amazon Elastic Compute Cloud (Amazon EC2) の AWS Fargate AccessDenied エラーの ResourceInitializationError エラー」
「タスクは Secrets Manager からシークレットを取得できず失敗します。」
これらのエラーメッセージは、次のいずれかの理由により表示されます。
- Amazon ECS タスク実行ロールには、Secrets Manager のシークレットにアクセスするのに必要なアクセス権限がありません。
- Secrets Manager は指定されたシークレットを見つけることができません。
- シークレットの名前はハイフンで終わり、その後に 6 文字が続きます。これにより、部分的な ARN を使用してシークレットを検索すると、予期しない結果が返されます。
- Amazon Virtual Private Cloud (Amazon VPC) のネットワーク設定に問題があります。
Amazon ECS タスクの起動に失敗するエラーをトラブルシューティングするには、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用します。次に、問題に関連するトラブルシューティングの手順を参照してください。
解決策
重要:
- ECS クラスターリソースが配置されているのと同じ AWS リージョンで、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用してください。
- ランブックを使用する際は、最後に失敗したタスク ID を使用する必要があります。失敗したタスクが Amazon ECS サービスの一部である場合は、サービス内で最後に失敗したタスクを使用してください。失敗したタスクは、オートメーションの実行中に ECS:DescribeTasks に表示される必要があります。デフォルトでは、停止した ECS タスクは、停止状態になってから 1 時間表示されます。最後に失敗したタスク ID を使用すると、オートメーション中にタスク状態のクリーンアップにより分析が中断するのを防ぐことができます。
ランブックを開始する方法については、「AWSSupport-TroubleshootECSTaskFailedToStart」を参照してください。オートメーションの出力に基づいて、次の手動のトラブルシューティング手順のいずれかを実行してください。
ECS タスク実行ロールに必要な権限があることを確認してください
- IAM コンソールを開きます。
- ナビゲーションペインで、[Roles] (ロール) を選択します。
- ロールのリストから、ECS タスクが使用しているタスク実行ロールを検索します。
- タスク実行ロールに、必要な Secrets Manager リソースへのアクセスに必要な権限があることを確認します。
Secrets Manager のシークレットが存在することを確認してください
- Secrets Manager コンソールを開きます。
- シークレットリストページで、ECS タスクが使用しているシークレットを選択します。
- ECS タスク定義にこれらの特定のシークレット名が含まれていることを確認してください。シークレットに追加のパラメーターを指定した場合は、タスク定義にシークレットで指定されている json-key/version-stage/version-id が含まれていることを確認してください。
Secrets Manager シークレットの名前と ARN を確認してください
シークレット名の末尾がハイフンで 6 文字が続いているか確認してください (例: myappsecret-xxxxxx)。Secrets Manager は、ARN の末尾にあるシークレット名の後にハイフンと 6 つのランダムな文字を自動的に追加します。そのため、シークレットネームの末尾にハイフンの後に 6 文字が続かないことがベストプラクティスです。これにより、部分的な ARN を使用してシークレットを検索すると、予期しない結果が返される場合があります。この問題を解決するには、Secrets Manager のシークレットの完全な ARN (追加のハイフンと 6 文字を含む) を必ず使用してください。
VPC ネットワーク設定で Amazon ECS インフラストラクチャが Secrets Manager にアクセスできることを確認します。
次の条件に当てはまる場合は、Secrets Manager のインターフェイス VPC エンドポイントを作成します。
- Secrets Manager シークレットを参照してコンテナの機密データを取得するタスク定義を使用しています。
- インターフェイス VPC エンドポイントを使用しています。
また、VPC エンドポイントのセキュリティグループが ECS インフラストラクチャにこれらのエンドポイントの使用を許可していることを確認してください。
Secrets Manager の VPC エンドポイントが存在するかどうかを確認するには、以下を実行してください。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで、[Endpoints] (エンドポイント) を選択します。
- Secrets Manager の VPC エンドポイント com.amazonaws.example-region.secretsmanager がエンドポイントのリストに含まれていることを確認してください。
- エンドポイントのリストからエンドポイントを選択し、[Subnets] (サブネット) タブを選択します。このエンドポイントのサブネットには、ECS タスクで使用されるサブネットが含まれていることを確認してください。
注:サブネットが表示されない場合は、[Manage Subnets] (サブネットの管理) を選択します。アベイラビリティーゾーンに基づいてサブネットを選択し、次に [Modify Subnets] (サブネットの変更) を選択します。
エンドポイント com.amazonaws.example-region.secretsmanager にアタッチされたセキュリティグループが Amazon ECS タスクからのポート 443 での受信接続を許可していることを確認するには、以下を実行してください。
- エンドポイントのリストからエンドポイントを選択します。
- [Security Groups] (セキュリティグループ) タブを選択します。
- 確認するセキュリティグループのグループ ID を選択します。
- [Inbound rules] (インバウンドルール) タブを選択します。
- インバウンドルールのリストに、ECS タスクからの 443 接続を許可するルールが含まれていることを確認します。
関連情報
Amazon ECS タスクでシークレットや機密情報をコンテナに安全に渡すにはどうすればよいですか?
AWS Secrets Manager のトラブルシューティング