У меня есть следующие 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, я надеюсь, что это может быть полезно другим!