Amazon ECS で「unable to pull secrets or registry auth」(シークレットまたはレジストリ認証をプルできません) というエラーのトラブルシューティング方法を教えてください。

最終更新日: 2022 年 4 月 7 日

Amazon Elastic Container Service (Amazon ECS) タスクを起動したときに、次のいずれかのエラーが表示されました。

ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed (ResourceInitializationError: シークレットまたはレジストリ認証をプルできません:pullコマンドが失敗しました: :シグナル:強制終了しました)

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 からシークレットを取得できません: サービスコールが再試行されました)

簡単な説明

AWS Fargate プラットフォームバージョン 1.4.0 では、タスクの Elastic Network Interface を使用してイメージとシークレットをプルします。すべてのネットワークトラフィックは、 Amazon Virtual Private Cloud (Amazon VPC) 内の Elastic Network Interface を通過します。このトラフィックは Amazon VPC フローログを通じて表示できます。ただし、このタスクでは、Fargate が所有する Elastic Network Interface を使用する代わりに、お客様のネットワーク設定が使用されます。これは、Elastic Network Interface が Amazon VPC 内に配置されるためです。

Amazon ECS コンテナエージェントは、タスク実行 AWS Identity and Access Management (IAM) ロールを使用して、AWS Systems Manager Parameter Store または AWS Secrets Manager から情報を取得します。Systems Manager Parameter Store または Secrets Manager でデータを暗号化するためにお客様が管理する AWS Key Management Service (AWS KMS) キーを使用する場合は、 ssm:GetParameterssecretsmanager:GetSecretValue、および kms:Decrypt のアクションのためのタスク実行 IAM ロールにアクセス許可を付与する必要があります。

解決方法

サブネットからインターネットへのルートを確認する

パブリックサブネットに Fargate タスクがある場合は、タスクにパブリック IP アドレスとインターネットゲートウェイへのデフォルトルート (0.0.0.0/0) が割り当てられていることを確認します。新しいタスクを起動したり、新しいサービスを作成したりするときは、[Auto-assign public] (自動割り当てパブリック) を必ず有効にしてください。パブリックサブネットで Secrets Manager または Systems Manager VPC エンドポイントを使用し、Amazon VPC の DHCP オプション設定で[ AmazonProvidedDNS] を有効にしている場合、Amazon VPC エンドポイントはパブリックサブネットのインターネットゲートウェイではなく、Secrets Manager または Systems Manager に到達するために使用されます。

注: 既存のタスクのためにこのオプションを有効にすることはできません。既存のサービスについては、AWS マネジメントコンソールを使用してこのオプションを有効にすることはできません。ただし、AWS Command Line Interface (AWS CLI) を使用して、既存のサービスを再設定できます。AWS CloudFormation スタックを使用して Amazon ECS サービスを作成した場合、AWS::ECS::ServiceNetworkConfiguration プロパティを変更することでサービスを更新できます。

プライベートサブネットに Fargate タスクがある場合は、NAT ゲートウェイ、AWS PrivateLink、または別のインターネット接続ソースへのデフォルトルート (0.0.0.0/0) がタスクにあることを確認します。

  • NAT ゲートウェイを使用している場合は、NAT ゲートウェイをパブリックサブネットに配置します。詳細については、インターネットゲートウェイと NAT ゲートウェイを使用したアーキテクチャを参照してください。
  • PrivateLink を使用する場合は、Fargate インフラストラクチャが Amazon VPC エンドポイントのセキュリティグループを使用できることを確認してください。
  • カスタムネームドメインサーバーを使用する場合は、UDP および TCP プロトコルを使用するポート 53 でのアウトバウンドアクセスと、ポート 443 での HTTPS アクセスが、DNSクエリにあることを確認してください。

ネットワーク ACL とセキュリティグループの設定を確認する

ネットワークアクセスコントロールリスト (ACL) とセキュリティグループが、サブネットからのポート 443 へのアウトバウンドアクセスをブロックしていないことを確認します。詳細については、「VPC のセキュリティグループ」を参照してください。

注: Fargate タスクでは、発信トラフィックを許可し、Amazon ECS エンドポイントに到達するには、ポート 443 へのアウトバウンドアクセスが必要です。

Amazon VPC エンドポイントを確認する

PrivateLink を使用する場合は、必要なエンドポイントを作成したことを確認してください。

Fargate プラットフォームバージョン 1.4.0 以降に必要なエンドポイントは次のとおりです。

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • S3 ゲートウェイエンドポイント
  • com.amazonaws.region.logs

詳細については、Amazon ECR VPC エンドポイントに関する考慮事項をご参照ください。

注: タスク定義で Secrets Manager、Systems Manager パラメータ、または Amazon CloudWatch Logs を使用する場合は、エンドポイントを定義する必要がある場合があります。詳細については、「VPC エンドポイントで Secrets Manager を使用する」、「Amazon ECS 用の VPC エンドポイントの作成」、および「インターフェイス VPC エンドポイントでの CloudWatch Logs の使用」を参照してください。

PrivateLink を使用する場合は、Amazon VPC エンドポイントにアタッチされたセキュリティグループが、TCP ポート 443 で Fargate タスクセキュリティグループまたは Fargate タスク VPC CIDR 範囲からのトラフィックを許可していることを確認してください。

Amazon Simple Storage Solution(Amazon S3)の VPC エンドポイントポリシーエンドポイントポリシーをチェックして、Fargate インフラストラクチャがサービスへのアクセスを許可されていることを確認します。

IAM ロールとアクセス許可を確認する

タスク実行ロールは、タスクの API 呼び出しを行うために必要なアクセス許可を Amazon ECS コンテナと Fargate エージェントに付与します。次の手順を実行する場合、Fargate はこのロールが必要です。

  • Amazon Elastic Container Registry (Amazon ECR) からコンテナイメージをプルする
  • awslogs ログドライバーを使用する
  • プライベートレジストリ認証を使用する
  • Secrets Manager のシークレットまたは Systems Manager Parameter Store のパラメータを使用して機密データを参照する

ユースケースに前述のシナリオのいずれかが含まれる場合は、タスク実行ロールに適切なアクセス許可が定義されていることを確認してください。必要なアクセス権限の詳細なリストについては、「Amazon ECS タスク実行 IAM ロール」を参照してください。

Amazon ECS タスク定義で参照されている機密情報を確認する

シークレット/パラメータの名前が、Amazon ECS タスク定義で参照されている名前と一致しているかどうかを確認します。その後、タスク定義のコンテナ定義の値が Amazon ECS タスク定義の値と一致しているかどうかを確認します。詳細については、「Amazon ECS タスクで秘密情報や機密情報をコンテナに安全に渡す方法を教えてください」を参照してください。

起動するタスクと同じリージョンに Systems Manager Parameter Store パラメータが存在する場合は、完全な ARN またはシークレットの名前を使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

System Manager パラメータ名と ARN を確認するには、次の手順を実行します。

1.    AWS Systems Manager コンソールを開きます。

2.    ナビゲーションペインで [Parameter Store] を選択し、[Parameter store name] (パラメータストア名) を確認します。

3.    その後、パラメータに関する ARN 情報を取得するには、AWS Command Line Interface (AWS CLI) を使用して、次のコマンドを実行します。
注: name_of_parameter_store_secret をパラメータストアのシークレット名に置き換えてください。

$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

注: Secrets Manager のシークレットを参照するパラメータでは、パラメータストアのバージョニングや履歴機能を使用できません。詳細については、「制限」を参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?