AWS ECS Fargate вытащить изображение из репо ECR кросс-аккаунта

У меня есть 2 учетных записи AWS: - учетная запись A с репо ECR. - учетная запись b с кластером ECS под управлением Fargate.

Я создал роль "кросс-аккаунт" в учетной записи A с доверительными отношениями к учетной записи B, а также к этой роли я прикрепил политику "AmazonEC2ContainerRegistryPowerUser".

Я предоставил доступ к репозиторию ECR в учетной записи A, добавив идентификатор учетной записи B и роль "кросс-учетной записи" в политику хранилища.

Я прикрепил политику к fargate "TaskExecutionRole", позволяющую fargate взять на себя роль "кросс-аккаунт".

При попытке развернуть задачу Fargate в учетной записи B со ссылкой на изображение в учетной записи A я получаю ошибку 500.

1 ответ

Fargate не будет автоматически выполнять роль кросс-аккаунта. К счастью, вам не нужно брать на себя роль в другой учетной записи, чтобы получать изображения из репозитория ECR этой учетной записи.

Чтобы включить перекрестный доступ к изображению в ECR, добавьте доступ для учетной записи B в хранилище учетной записи A (установив политику хранилища), а затем укажите TaskExecutionRole в учетной записи B, у которого есть разрешения для извлечения из ECR ("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"
      ]
    }
  ]
}

Затем установите TaskExecutionRole в учетной записи B, чтобы иметь такую ​​политику:

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

Кроме того, вы можете использовать управляемую политику AmazonECSTaskExecutionRolePolicy для вашего TaskExecutionRole вместо определения вашего собственного.

Другие вопросы по тегам