Назад | Перейти на главную страницу

Elastic Beanstalk: политика IAM для развертывания среды Docker с несколькими контейнерами из частного репозитория.

Как мне разрешить моей среде в Elastic Beanstalk общаться с S3, чтобы он мог получить информацию для аутентификации, а затем извлечь мой образ Docker из частного репозитория в среде с несколькими контейнерами?

Я нашел имя роли IAM в конфигурации экземпляра моей среды («aws-elasticbeanstalk-ec2-role»), перешел в IAM, открыл политику «AWSElasticBeanstalkWebTier», чтобы расширить ее для доступа S3 к ARN для моей корзины, но эти политики являются «управляемыми AWS» и предназначены только для чтения. Я попытался просто подключить существующую политику S3 (например, AmazonS3ReadOnlyAccess, определенную AWS) к моей роли профиля экземпляра, но развертывание не удалось, и журналы по-прежнему жалуются на невозможность доступа к частному репозиторию:

2018-01-10T02:56:10Z + local 'CONTAINER_STOPPED_REASONS=nomad-service-identity: CannotPullContainerError: API error (404): repository dsoprea/nomad not found: does not exist or no pull access'
2018-01-10T02:56:10Z + '[' -n 'Essential container in task exited' ']'
2018-01-10T02:56:10Z + error 'ECS task stopped due to: Essential container in task exited. (nomad-service-identity: CannotPullContainerError: API error (404): repository dsoprea/nomad not found: does not exist or no pull access)'
2018-01-10T02:56:10Z + echo 'ECS task stopped due to: Essential container in task exited. (nomad-service-identity: CannotPullContainerError: API error (404): repository dsoprea/nomad not found: does not exist or no pull access)'
2018-01-10T02:56:10Z ECS task stopped due to: Essential container in task exited. (nomad-service-identity: CannotPullContainerError: API error (404): repository dsoprea/nomad not found: does not exist or no pull access)
2018-01-10T02:56:10Z + eventHelper.py --msg 'ECS task stopped due to: Essential container in task exited. (nomad-service-identity: CannotPullContainerError: API error (404): repository dsoprea/nomad not found: does not exist or no pull access)' --severity ERROR
2018-01-10T02:56:10Z + set -e

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

Конфигурация выглядит правильно?

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
  ],
  "containerDefinitions": [
    {
      "name": "nomad-service-identity",
      "image": "dsoprea/nomad:identity-1",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "entryPoint": ["/nomad/nomad_identity_service"],
      "links": [
      ],
      "mountPoints": [
      ],

      "authentication": {
        "bucket": "nomad-docker",
        "key": "dockerconfig.json"
      }

    }
  ]
}

Вам необходимо добавить правильное разрешение на чтение реестра к этой роли EB. Если репозиторий будет ECR, разрешение на добавление будет следующим:

arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly