我有以下Dockerrun.aws.json :
{ "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "bucket-of-another-aws-account", "Key": "docker/.dockercfg" }, "Image": { "Name": "docker-image" }, "Ports": [ { "ContainerPort": "8080" } ] }
带有我们的Docker容器的Elastic Beanstalk环境在客户的AWS账户中运行,并且具有.dockercfg的S3存储桶属于我们的AWS账户。
出于testing的目的,我把桶策略原则设置为*以便任何人都可以下载.dockercfg文件。 尽pipe如此,Elastic Beanstalk无法下载该文件(“ Failed to download authentication credentials docker/.dockercfg from bucket-of-another-aws-account ”)。
下一个testing是将文件移动到客户的AWS账户中的S3存储桶。 这工作。
问题是:是否有可能在Dockerrun.aws.json使用另一个账户? 我在文档中找不到任何提示,我不想将DockerHub API密钥提供给我们的客户。
我们设法克服了“无法下载authentication凭证”,如下所示:
1)在帐户B(试图访问远程存储桶的那个帐户)中,查看Elastic Beanstalk环境的设置中是否使用了实例angular色名称(configuration,实例(cog),实例configuration文件)
2)仍然在帐户B中,在IAMpipe理器中,转到angular色,并从上一步中findEB用于实例的ec2angular色,并附加内联策略
{ "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)在账户A的目标s3存储桶中附加一个策略(其中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/ ),但我也无法在网上find任何简明或明确的答案,越来越多的人转向AWS和Elastic豆茎我希望这可以用于别人!