AWS ECS Fargate がクロスアカウント ECR リポジトリからイメージをプルする 質問する

AWS ECS Fargate がクロスアカウント ECR リポジトリからイメージをプルする 質問する

AWS アカウントが 2 つあります。 - ECR リポジトリを持つアカウント A。 - Fargate を実行する ECS クラスターを持つアカウント b。

アカウント B との信頼関係を持つ「クロスアカウント」ロールをアカウント A に作成し、このロールに「AmazonEC2ContainerRegistryPowerUser」ポリシーを添付しました。

アカウント B の ID と「クロスアカウント」ロールをリポジトリ ポリシーに追加して、アカウント A の ECR リポジトリへのアクセス権を付与しました。

Fargate が「クロスアカウント」ロールを引き受けることを許可するポリシーを Fargate の「TaskExecutionRole」に添付しました。

アカウント A のイメージを参照してアカウント B に Fargate タスクをデプロイしようとすると、500 エラーが発生します。

ベストアンサー1

Fargate は、クロスアカウントロールを自動的に引き受けることはありません。幸いなことに、そのアカウントの ECR リポジトリからイメージをプルするために、別のアカウントでロールを引き受ける必要はありません。

ECR内のイメージへのアカウント間アクセスを有効にするには、アカウントAのリポジトリにアカウントBのアクセスを追加します(リポジトリポリシー) を作成し、ECR からプルする権限を持つアカウント B の TaskExecutionRole ("ecr:GetDownloadUrlForLayer"、"ecr:BatchGetImage"、"ecr:BatchCheckLayerAvailability") を指定します。

たとえば、アカウント A のリポジトリに次のようにリポジトリ ポリシーを設定します。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossAccountPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT_B_ID:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage"
      ]
    }
  ]
}

次に、アカウント B の TaskExecutionRole に次のようなポリシーを設定します。

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

あるいは、管理ポリシーを使用することもできますAmazonECSTaskExecutionRolePolicy独自に定義するのではなく、TaskExecutionRole に対して定義します。

おすすめ記事