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

Dockerun.aws.json относится к ведру другой учетной записи

У меня есть следующие Dockerrun.aws.json:

{
   "AWSEBDockerrunVersion": "1",
   "Authentication": {
       "Bucket": "bucket-of-another-aws-account",
       "Key": "docker/.dockercfg"
   },
   "Image": {
       "Name": "docker-image"
   },
   "Ports": [
        {
            "ContainerPort": "8080"
        }
    ]
}

Среда Elastic Beanstalk Environment с нашим контейнером Docker работает в учетной записи AWS клиента и ведре S3 с .dockercfg принадлежит нашей учетной записи AWS.

В целях тестирования я установил принцип политики корзины на * так что любой может скачать .dockercfg файл. Тем не менее Elastic Beanstalk не может загрузить этот файл ("Failed to download authentication credentials docker/.dockercfg from bucket-of-another-aws-account").

Следующим тестом было переместить файл в корзину S3 в учетной записи AWS клиента. Это сработало.

Вопрос: можно ли использовать ведро другой учетной записи в Dockerrun.aws.json? Мне не удалось найти никаких подсказок в документации, и я не хочу передавать ключ API DockerHub нашему клиенту.

Нам удалось преодолеть «Не удалось загрузить учетные данные для аутентификации» следующим образом:

1) В учетной записи B (той, которая пытается получить доступ к удаленному ведру), посмотрите в настройках среды Elastic Beanstalk имя роли экземпляра, которое он использует (конфигурация, экземпляры (cog), профиль экземпляра)

2) По-прежнему в учетной записи B, в диспетчере IAM перейдите в раздел Роли и найдите роль ec2 из предыдущего шага, которую EB использует для экземпляров, и прикрепите встроенную политику.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:List*",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-of-another-aws-account"
            ]
        },
        {
            "Sid": "S3ObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-of-another-aws-account/*"
            ]
        }
    ]
}

3) к целевой корзине s3 в учетной записи A прикрепите политику (где 222222222222 - номер вашей учетной записи учетной записи B)

{
    "Version": "2012-10-17",
    "Statement": {
        "Sid": "AccountBAccess1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "222222222222"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::bucket-of-another-aws-account",
            "arn:aws:s3:::bucket-of-another-aws-account/*"
        ]
    }
}

Я знаю, что это поздний ответ на OP (заставил меня подумать о https://xkcd.com/979/ ), но я также не смог найти краткого или окончательного ответа в документации в Интернете, и, поскольку все больше людей переходят на AWS и Elastic Beanstalk, я надеюсь, что это может быть полезно другим!