Aws ecs fargate ResourceInitializationError: シークレットまたはレジストリ認証を取得できません 質問する

Aws ecs fargate ResourceInitializationError: シークレットまたはレジストリ認証を取得できません 質問する

aws-ecs-fargate-1.4.0 プラットフォームでプライベート リポジトリを実行しようとしています。

プライベートリポジトリの認証については、ドキュメントそしてそれはうまく機能していました。

何らかの理由で、既存のサービスを何度も更新すると、タスクの実行に失敗し、次のようなエラーが発生します。

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to get registry auth from asm: service call has been retried 1 time(s): asm fetching secret from the service for <secretname>: RequestError: ...

変更はしておらずecsTaskExecutionRole、シークレット値を取得するために必要なすべてのポリシーが含まれています。

  1. AmazonECSTask実行ロールポリシー
  2. クラウドウォッチフルアクセス
  3. AmazonECSTask実行ロールポリシー
  4. シークレット値を取得する
  5. SSMParamters を取得する

ベストアンサー1

AWS社員です。

ここで表示されているのは、Fargate プラットフォーム バージョン 1.3.0 と Fargate プラットフォーム バージョン 1.4.0 の間でネットワークの動作が変更されたためです。Docker から containerd への変更の一環として、ネットワークの動作にもいくつか変更を加えました。バージョン 1.3.0 以前では、各 Fargate タスクに 2 つのネットワーク インターフェイスがありました。

  • 1 つのネットワーク インターフェイスは、アプリケーション コンテナーからのアプリケーション トラフィック、およびログとコンテナー イメージ レイヤーのプルに使用されました。
  • セカンダリ ネットワーク インターフェイスは、ECR 認証資格情報を取得し、シークレットを取得するために、Fargate プラットフォーム自体によって使用されました。

ただし、このセカンダリ ネットワーク インターフェイスには欠点もありました。このセカンダリ トラフィックは VPC フロー ログに表示されませんでした。また、ほとんどのトラフィックがお客様の VPC 内に留まっている一方で、セカンダリ ネットワーク インターフェイスはお客様の VPC 外にトラフィックを送信していました。多くのお客様から、このセカンダリ ネットワーク インターフェイスのネットワーク レベルの制御や接続先を指定できないという苦情がありました。

ネットワークモデルのわかりやすさを向上させ、お客様の制御を強化するために、Fargate プラットフォーム バージョン 1.4.0 では、単一のネットワーク インターフェイスを使用し、Fargate プラットフォーム トラフィックも含めすべてのトラフィックを VPC 内に保持するように変更しました。ECR 認証とタスク シークレットを取得するための Fargate プラットフォーム トラフィックは、他のタスク トラフィックと同じタスク ネットワーク インターフェイスを使用するようになりました。このトラフィックを VPC フロー ログで監視し、独自の AWS VPC のルーティング テーブルを使用してこのトラフィックを制御できます。

ただし、Fargate プラットフォームのネットワークを監視および制御する機能が強化されたため、タスクが ECR および AWS Secrets Manager と通信できるように VPC にネットワーク パスが実際に設定されていることを確認する責任も生じます。

これを解決するにはいくつかの方法があります:

  • パブリック IP アドレスを使用してタスクをパブリック サブネットに起動し、インターネット ゲートウェイを使用して ECR やその他のバックエンド サービスと通信できるようにします。
  • パブリックサブネットの NAT ゲートウェイ経由で送信トラフィックをルーティングするように設定された VPC ルーティングテーブルを持つプライベートサブネットでタスクを起動します。これにより、NAT ゲートウェイはタスクに代わって ECR への接続を開くことができます。
  • プライベートサブネットでタスクを起動し、必要なサービス (イメージプル認証用の ECR、イメージレイヤー用の S3、シークレット用の AWS Secrets Manager) の AWS PrivateLink エンドポイントが VPC に設定されていることを確認します。

この変更の詳細については、この公式ブログ投稿の「タスク Elastic Network Interface (ENI) が追加のトラフィック フローを実行するようになりました」セクションをご覧ください。

https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/

アップデート: この ResourceInitializationError を回避するように構成された VPC をデプロイする Infrastructure as Code テンプレートを作成しました。動作する VPC がどのようなものである必要があるかをよりわかりやすく示す図が付属しています。この回答にすべてのコンテンツを埋め込むのは難しいので、参考としてこの公式 AWS パターンを参照してください。https://containersonaws.com/pattern/large-vpc-for-amazon-ecs-cluster

さらに、PrivateLinkアプローチの使用に興味がある場合は、次の例を参照してください。NAT ゲートウェイのない分離された Amazon ECS クラスター

おすすめ記事