Amazon web services 如何从Elastic Beanstalk实例访问S3 bucket中的docker配置文件

Amazon web services 如何从Elastic Beanstalk实例访问S3 bucket中的docker配置文件,amazon-web-services,amazon-s3,amazon-ec2,docker,amazon-elastic-beanstalk,Amazon Web Services,Amazon S3,Amazon Ec2,Docker,Amazon Elastic Beanstalk,我创建了我的dockrun.aws.json文件,并在创建Beanstalk(docker)环境时上传了它。我还将由“docker login”命令创建的.dockercfg文件上传到dockrun.aws.json配置中指定的S3存储桶中 但是,当我尝试启动环境时,我收到一个错误(帖子底部),指出EC2实例无权访问bucket中的.dockrcfg文件。如何确保beanstalk应用程序可以访问提供的S3 bucket中的配置json文件 谢谢!(下面的错误) i-64c62de7严重1天-

我创建了我的
dockrun.aws.json
文件,并在创建Beanstalk(docker)环境时上传了它。我还将由“docker login”命令创建的
.dockercfg
文件上传到
dockrun.aws.json
配置中指定的S3存储桶中

但是,当我尝试启动环境时,我收到一个错误(帖子底部),指出EC2实例无权访问bucket中的
.dockrcfg
文件。如何确保beanstalk应用程序可以访问提供的S3 bucket中的配置json文件

谢谢!(下面的错误)


i-64c62de7严重1天----0.00 0.01 0.30.0 0.0 99.6 0.1
2016-02-27T04:30:54Z应用程序部署失败,退出状态为1,错误:Hook/opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh失败。
回溯(最近一次呼叫最后一次):
文件“/opt/elasticbeanstalk/containerfiles/support/download_auth.py”,第18行,在
下载_auth(argv[1],argv[2],获取_实例_identity()['document']['region']))
文件“/opt/elasticbeanstalk/containerfiles/support/download_auth.py”,第15行,在download_auth中
key.get_contents_to_filename('/root/.dockercfg'))
文件“/usr/lib/python2.7/dist packages/boto/s3/key.py”,第1712行,在get_contents_to_filename中
响应标题=响应标题)
文件“/usr/lib/python2.7/dist packages/boto/s3/key.py”,第1650行,在get_contents_to_文件中
响应标题=响应标题)
文件“/usr/lib/python2.7/dist packages/boto/s3/key.py”,第1482行,在get_文件中
查询(参数=无)
文件“/usr/lib/python2.7/dist-packages/boto/s3/key.py”,第1514行,在get文件内部
覆盖次数重试次数=覆盖次数重试次数)
文件“/usr/lib/python2.7/dist-packages/boto/s3/key.py”,第343行,打开
覆盖次数重试次数=覆盖次数重试次数)
文件“/usr/lib/python2.7/dist-packages/boto/s3/key.py”,第303行,打开读取
自我反应(原因、身体)
boto.exception.S3ResponseError:S3ResponseError:403禁止
拒绝访问拒绝访问910AD275D3E3110A682J0CJMSFURJYY/PGT3W9wRxI+4sh+rrESuw2WpInERcn4p4f9XGwBFdpBmDYQc
无法从my-s3-bucket下载身份验证凭据dockercfg。

您必须确保您使用的AIM角色可以访问您的存储桶和密钥。差不多

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:List*",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket"
            ]
        },
        {
            "Sid": "S3ObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:List*"
            ],
            "Resource": [
               "arn:aws:s3:::mybucket/*"
            ]
        }
   ]
}
如果您不这样做,您应该从.ebextensions指向IAM,而不是允许EB创建自己的IAM,这样您就可以控制它

- namespace: aws:autoscaling:launchconfiguration
  option_name: IamInstanceProfile
  value: arn:aws:iam::xxxxxxxxx:instance-profile/yourRole

只需将Amazons3FullAccess策略名称添加到IAM中的aws-elasticbeanstalk-ec2-role角色中

您是说我需要对
dockrun.aws.json
和自定义.ebextensions文件进行配置更改,还是两者之一?谢谢,我只是想确保我理解正确。dockerrun文件指定了文件所在的位置,但如果是,它不授予EB安装权限来访问该文件。您必须从角色/策略/权限执行此操作。你的dockerrun很可能同意我的推荐吗?还是这不是正确的答案?谢谢你的跟进;我今晚要尝试一下,然后会发回。更新角色完成了任务。现在Beanstalk应用程序说它在私有回购中找不到docker映像(即使它在那里),所以这是我的下一个障碍。。。你见过吗?
- namespace: aws:autoscaling:launchconfiguration
  option_name: IamInstanceProfile
  value: arn:aws:iam::xxxxxxxxx:instance-profile/yourRole