AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
ECS タスクでシークレットをプルするか、Amazon ECR 認証を取得しようとすると発生する、ResourceInitializationError を解決する方法を教えてください。
Amazon Elastic Container Service (Amazon ECS) タスクを起動すると、ResourceInitializationError というメッセージが表示されます。
簡単な説明
Fargate 起動タイプで Amazon ECS タスクを起動すると、次のいずれかのエラーメッセージが表示される場合があります。
- ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: pull コマンドを実行できません: : signal: killed)
- ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried. (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: asm からシークレットを取得できません: サービス呼び出しが再試行されました)
- ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s) (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: ecr レジストリ認証を取得できません: サービス呼び出しが 3 回再試行されました:) RequestError: send request failed caused by: Post "https://api.ecr..amazonaws.com/": dial tcp …443: i/o timeout.Please check your task network configuration. (タスクネットワークの設定を確認してください)
- ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager… (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: asm からシークレットを取得できません: サービス呼び出しが 5 回再試行されました: シークレット arn:aws:secretsmanager… をフェッチできません)
- ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret arn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: InvalidParameter: 1 validation error(s) found. – (minimum field size of 32/ maximum field size of 64), GetSecretValueInput.VersionId. (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: asm からシークレットを取得できません: サービス呼び出しが 1 回再試行されました: 1 件の検証エラーが見つかりました)
- ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager… (ResourceInitializationError: シークレットまたはレジストリ認証を取得できません: 実行リソースを取得できません: asm からシークレットを取得できません: サービス呼び出しが 1 回再試行されました: シークレット arn:aws:secretsmanager… を Secrets Manager からフェッチできません)<region>:<accountID>:secret:<secretName> from secrets manager: AccessDeniedException: User: arn:aws:sts::<accountID>::assumed-role/<roleName> is not authorized to perform: secretsmanager:GetSecretValue on resource: rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> because no identity-based policy allows the secretsmanager:GetSecretValue action status code: 400
AWS Fargate バージョン 1.4.0 では、タスクの Elastic Network Interface を使用してイメージとシークレットを取得します。すべてのネットワークトラフィックは、Amazon Virtual Private Cloud (Amazon VPC) 内のネットワークインターフェイスを経由します。VPC フローログを使用すると、トラフィックを確認できます。ただし、Fargate は Amazon VPC 内にネットワークインターフェイスを配置するため、タスクはユーザーのネットワーク設定を使用します。
Amazon ECS コンテナエージェントは、タスク実行用の AWS Identity and Access Management (IAM) ロールを使用して AWS Systems Manager の機能である Parameter Store および AWS Secrets Manager から情報を取得します。
カスタマーマネージド AWS Key Management Service (AWS KMS) キーを使用して暗号化したデータでは、タスク実行用 IAM ロールに次のアクセス許可を付与します。
- ssm:GetParameters
- secretsmanager:GetSecretValue
- kms:Decrypt
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
TroubleshootECSTaskFailedToStart ランブックを使用する
AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用して起動できない Amazon ECS タスクをトラブルシューティングします。
重要: ECS クラスターリソースが配置されているリージョンと同じ AWS リージョンでランブックを使用してください。タスク状態のクリーンアップによる分析の中断を防ぐために、最後に失敗したタスク ID を使用してください。失敗したタスクが Amazon ECS サービスに属している場合は、サービス内で最後に失敗したタスクを指定します。オートメーションを実行する際に、失敗したタスクは ECS:DescribeTasks に表示されている必要があります。デフォルトでは、停止した ECS タスクは Stopped 状態になってから 1 時間表示されます。
AWSSupport-TroubleshootECSTaskFailedToStart ランブックを実行するには、次の手順を実行します。
- AWS Systems Manager コンソールを開きます。
- ナビゲーションペインで、[変更管理] から [オートメーション] を選択します。
- [オートメーションの実行] を選択します。
- [Amazon が所有] タブを選択します。
- [オートメーションドキュメント] の検索バーに TroubleshootECSTaskFailedToStart と入力します。
- AWSSupport-TroubleshootECSTaskFailedToStart カードを選択します。
注: ハイパーリンク付きのオートメーション名は選択しないでください。 - [次へ] を選択します。
- [オートメーションドキュメントを実行] で、[シンプルな実行] を選択します。
- [入力パラメータ] セクションの [AutomationAssumeRole] に、Automation によるアクションの実行を許可するロールの ARN を入力します。
注: サービスロール、もしくは IAM ユーザーまたはロールに、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを実行するために必要な IAM アクセス許可があることを確認してください。IAM ロールを指定しない場合、Automation は ランブックを実行する IAM ユーザーまたはロールのアクセス許可を使用します。Automation 用のサービスロールを作成する方法については、「タスク 1: Automation 用のサービスロールを作成する」を参照してください。 - [ClusterName] にタスクを開始できなかったクラスター名を入力します。
- [TaskId] に直近に失敗したタスクの ID を入力します。
- [実行] を選択します。
注: 実行後、分析結果が [グローバル出力] セクションに入力されます。ドキュメントのステータスが Success に変化するまで待機します。さらに、[出力] セクションで例外の有無を確認します。
問題を手動でトラブルシューティングすることもできます。
サブネットからインターネットへのルートを確認する
パブリックサブネットに Fargate タスクがある場合は、そのタスクにパブリック IP アドレスが割り当て済みであることを確認します。さらに、タスクにインターネットゲートウェイへのデフォルトルート (0.0.0.0/0) が設定されていることを確認します。新しいタスクを起動したり、新しいサービスを作成したりする際は、[パブリックの自動割り当て] を有効にします。
AWS CloudFormation スタックを使用して Amazon ECS サービスを作成した場合は、AWS::ECS::Service の NetworkConfiguration プロパティを変更してサービスを更新します。既存のサービスの設定を更新するには、CloudFormation を使用して AssignPublicIp パラメータを有効にします。または、次の AWS CLI コマンド update-service を実行します。
aws ecs update-service --service serviceName --region regionName "awsvpcConfiguration={subnets=[subnet-123,subnet-456],securityGroups=[sg-123,sg-456],assignPublicIp=ENABLED}"
注: regionName は、お使いのリージョンに置き換えます。
次の設定を使用する場合は、Secrets Manager または Systems Manager へのアクセスには、パブリックサブネットのインターネットゲートウェイを使用しないでください。
- Secrets Manager または Systems Manager の VPC エンドポイントがパブリックサブネットにある。
- Amazon VPC の DHCP 設定で AmazonProvidedDNS を有効にしている。
上記の場合は、代わりに Amazon VPC エンドポイントを使用してください。
注: 既存のタスクに対して [パブリックの自動割り当て] を有効にすることはできません。既存のサービスを再設定するには、AWS マネジメントコンソールではなく AWS CLI を使用してください。
Fargate タスクがプライベートサブネットにある場合は、そのタスクにインターネット接続ソースへのデフォルトルート (0.0.0.0/0) があることを確認してください。
インターネット接続ソースには、NAT ゲートウェイ、AWS PrivateLink、カスタムネームドメインサーバーのいずれかを使用できます。
NAT ゲートウェイを使用する場合は、その NAT ゲートウェイをパブリックサブネットに配置します。詳細については、「AWS Network Firewall を使用する、インターネットゲートウェイと NAT ゲートウェイを備えたアーキテクチャ」を参照してください。PrivateLink を使用する場合は、Amazon VPC エンドポイントのセキュリティグループが Fargate タスクへのトラフィックを許可していることを確認してください。カスタムネームドメインサーバーを使用する場合は、DNS クエリの設定を確認してください。クエリは、ポート 53 でアウトバウンドアクセスが可能であり、UDP プロトコルと TCP プロトコルを使用する必要があります。クエリには、ポート 443 での HTTPS アクセスも必要です。
ネットワーク ACL とセキュリティグループの設定を確認する
ネットワークアクセスコントロールリスト (ネットワーク ACL) とセキュリティグループが、サブネットからのポート 443 へのアウトバウンドアクセスをブロックしていないことを確認します。詳細については、「セキュリティグループを使用して AWS リソースへのトラフィックを制御する」を参照してください。
**注:**送信トラフィックを許可し、Amazon ECS エンドポイントにアクセスするには、Fargate タスクにポート 443 へのアウトバウンドアクセス権が必要です。
Amazon VPC エンドポイントを確認する
PrivateLink を使用する場合は、Fargate プラットフォームバージョン 1.4.0 以降に必要な次のエンドポイントを作成する必要があります。
- com.amazonaws.region.ecr.dkr
- com.amazonaws.region.ecr.api
- S3 ゲートウェイエンドポイント
- com.amazonaws.region.logs
詳細については、「Considerations for Amazon Elastic Container Registry (Amazon ECR) VPC endpoints」を参照してください。
注: タスク定義で Secrets Manager、Parameter Store、Amazon CloudWatch Logs のいずれかを使用する場合は、エンドポイントを定義する必要があります。詳細については、「AWS Secrets Manager の VPC エンドポイントを使用する」および「Amazon ECS 用の VPC エンドポイントを作成する」を参照してください。
PrivateLink では、Amazon VPC のセキュリティグループが Fargate タスクのセキュリティグループまたは VPC の CIDR 範囲からのトラフィックを TCP ポート 443 で許可していることを確認します。
Fargate インフラストラクチャがサービスにアクセスできることを確認するには、「VPC エンドポイントポリシー」および「Amazon Simple Storage Service (Amazon S3) ゲートウェイのエンドポイントポリシー」を確認してください。
IAM ロールとアクセス許可を確認する
タスク実行ロールは、Amazon ECS コンテナと Fargate エージェントに、タスクの API コールを行うために必要なアクセス許可を付与します。
次の操作を実行する場合、Fargate にはタスク実行ロールが必要です。
- Amazon ECR からコンテナイメージを取得する。
- awslogs ログドライバーを使用する。
- プライベートレジストリ認証を使用する。
- 機密データを参照するには、Secrets Manager のシークレットまたは Parameter Store のパラメータを使用します。
上記のシナリオで、タスク実行ロールに必要なアクセス許可を定義します。機密データを取得するために Secrets Manager のシークレットまたは Parameter Store のパラメータにアクセスする場合は、必要なアクセス許可 secretsmanager:GetSecretValue または ssm:GetParameters があることを確認してください。必要なアクセス許可のリストについては、「Secrets Manager または Systems Manager のアクセス許可」を参照してください。
Amazon ECS タスク定義内の機密データを確認する
シークレット名とパラメータ名が Amazon ECS タスク定義の参照名と一致していることを確認します。次に、コンテナ定義の値が Amazon ECS タスク定義の値と一致していることを確認します。詳細については、「Amazon ECS タスク内のコンテナにシークレットや機密情報を安全に渡す方法を教えてください」を参照してください。
シークレットまたはパラメータには、タスク定義で指定したものと同じ ARN または名前を設定します。リソースが別のリージョンに置かれている場合は、完全な ARN を指定する必要があります。
GetSecretValueInput 内の VersionId パラメータを使用して取得するシークレット値のバージョンを指定します。特定のバージョンが必要ない場合は、VersionId フィールドを削除します。デフォルトでは、Secrets Manager は最新バージョンを取得します。
Parameter Store のパラメータとタスクが同じリージョンにある場合は、シークレットの完全な ARN または名前を使用します。パラメータが別のリージョンにある場合は、完全な ARN を指定する必要があります。
パラメータ名と ARN を確認するには、次の手順を実行します。
- AWS Systems Manager コンソールを開きます。
- ナビゲーションペインで [Parameter Store] を選択し、Parameter Store の名前を確認します。
- パラメータの ARN を取得するには、次の AWS CLI コマンド get-parameter を実行します。
注: name_of_parameter_store_secret は、Parameter Store の実際のシークレット名に置き換えます。Secrets Manager のシークレットを参照するパラメータでは、Parameter Store のバージョン機能と履歴機能を使用できません。詳細については、「制限事項」を参照してください。aws ssm get-parameter --name name_of_parameter_store_secret --with-decryption
関連情報
Amazon ECS の停止したタスクに関するエラーを確認する
Fargate 起動タイプ用の Amazon ECS タスクのネットワーク機能オプション
- トピック
- Containers
- 言語
- 日本語

