見出し画像

ECSでECRからdocker pullをする際に気を付けること

はじめに

SHIFTからシステム・アイに出向中の斎藤です。少し前にECSでECRからdocker pullをしようとした際にエラーが出てかなり解決に時間がかかってしまいましたので、その時の状況と解決方法を共有します。

エラー内容

ECSでECRからdocker pullをしようとすると、以下のようなエラー文が出ました。

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): RequestError: send request failed caused by: Post https://api.ecr.[region].amazonaws.com

直訳すると、「ResourceInitializationError:シークレットまたはレジストリ認証をプルできません:実行リソースの取得に失敗しました:ecrレジストリ認証を取得できません:サービス呼び出しが3回再試行されました:RequestError:リクエストの送信に失敗した原因:Post https://api.ecr.[region].amazonaws.com 」となります。

どうやら、ECSとECS間でのやりとりがうまくいっていないようでした。

エンドポイント

そこで調べると、↓の記事を見つけました。

【衝撃に備えろ】Fargate PV1.4のVPCエンドポイント変更点について | DevelopersIO

この記事によると、Fargate 起動タイプとプラットフォームバージョン 1.4.0 以降を使用する Amazon ECS タスクでは以下のVPCエンドポイントが必要になります。

  • com.amazonaws.[region].ecr.dkr

  • com.amazonaws.[region].ecr.api

  • S3 ゲートウェイエンドポイント

  • com.amazonaws.[region].logs

確認してみると、S3 ゲートウェイエンドポイント以外のエンドポイントは作成されていない状態になっていました。なので、これらのエンドポイントを作成し、再度docker pullを試してみましたが同じエラーが出てしまいました。

エラー文でググると、↓の記事を見つけました。

Amazon ECS で「unable to pull secrets or registry auth」(シークレットまたはレジストリー認...

この記事によると、エラーの解決方法は、次の4つとしていました。(今回の場合はSystems Manager(機密情報の参照)を使用していないので4つとしています。)

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

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

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

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

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

これらのうち、エンドポイントは確認したので、残りをしらみつぶしに調べました。

IAMロール

解決方法をひとつひとつ確かめていくと、IAMロールを修正することでエラーを解決することができました。↓の記事には、「AmazonEC2ContainerRegistryReadOnly」というポリシーがないとECS操作時にECRからDockerイメージをPullできずにエラーが出てしまうと記載されています。

ECRとECSを使ってNginxのページを表示させよう(第2回)

このポリシーをECSタスク実行ロールにアタッチしたら、エラーが消え、無事にECRからdocker pullできました。以下ではポリシー内容を具体的に見ていきます。

AmazonECSTaskExecutionRolePolicy

ECSのタスク実行ロールである「ecsTaskExecutionRole」にもともとアタッチされているポリシーである「AmazonECSTaskExecutionRolePolicy」の説明にはCloudWatchのログへの書き込みとECRの読み込みができると記載されているので、docker pullもできるものだと勘違いをしていました。

Amazon ECS タスク実行IAM ロール - Amazon Elastic Container Service

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

AmazonEC2ContainerRegistryReadOnly

このポリシー「AmazonEC2ContainerRegistryReadOnly」をアタッチすると、ECRに対する読み取り、イメージリストのリストの作成、Docker CLI を使用して Amazon ECR からイメージをプル、つまり、docker pullが使用できるようになります。

Amazon Elastic Container Regist の AWS 管理ポリシー - Amazon ECR

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:GetLifecyclePolicy",
                "ecr:GetLifecyclePolicyPreview",
                "ecr:ListTagsForResource",
                "ecr:DescribeImageScanFindings"
            ],
            "Resource": "*"
        }
    ]
}

おわりに

今回のエラーの原因は、ECRへのIAMポリシーが足りておらず、docker pullができないためでした。よく知らないサービスを触る際はIAMロール、ポリシー周りは特に注意して設定するべきだと学びました。また、問題に対する原因探索はやみくもに設定をいじるのではなく、一度手を止め、考えうる原因を洗い出し、計画的にひとつひとつ選択肢を減らしていくのが重要であると再認識しました。焦らずに観察→計画→実行の流れを意識したいです。

参考文献

【衝撃に備えろ】Fargate PV1.4のVPCエンドポイント変更点について | DevelopersIO

Amazon ECS で「unable to pull secrets or registry auth」(シークレットまたはレジストリー認...

Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink) - Amazon ECR

ECRとECSを使ってNginxのページを表示させよう(第2回)

Amazon ECS タスク実行IAM ロール - Amazon Elastic Container Service

Amazon Elastic Container Regist の AWS 管理ポリシー - Amazon ECR

――――――――――――――――――――――――――――――――――

執筆者プロフィール:斎藤拓郎
大学院卒業後、IT関連会社にて、大手ベンダーに常駐し金融系の顧客に対し画面レイアウトや資料の作成などを行う。
独学でAWSを学びSAA、DVAの資格を取得。
AWSを学習していくうちに、インフラや自動化に興味を持ち転職。現在SHIFTから株式会社システムアイのRGA事業部に出向し、EKS環境の維持拡張の業務に従事している。

【ご案内】
ITシステム開発やITインフラ運用の効率化、高速化、品質向上、その他、情シス部門の働き方改革など、IT自動化導入がもたらすメリットは様々ございます。

IT業務の自動化にご興味・ご関心ございましたら、まずは一度、IT自動化の専門家リアルグローブ・オートメーティッド(RGA)にご相談ください!

お問合せは以下の窓口までお願いいたします。

【お問い合わせ窓口】
窓口:rga@systemi.co.jp
URL:https://rg-automated.jp