【问题标题】:How to access to docker config file in S3 bucket from Elastic Beanstalk instance如何从 Elastic Beanstalk 实例访问 S3 存储桶中的 docker 配置文件
【发布时间】:2016-06-11 18:07:35
【问题描述】:

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

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

谢谢! (以下错误)


i-64c62de7  Severe  1 day   -   -   -   -   -   -   -   -   -   -   0.00    0.01    0.3 0.0 0.0 99.6    0.1
    Application deployment failed at 2016-02-27T04:30:54Z with exit status 1 and error: Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh failed.

Traceback (most recent call last):
File "/opt/elasticbeanstalk/containerfiles/support/download_auth.py", line 18, in 
download_auth(argv[1], argv[2], get_instance_identity()['document']['region'])
File "/opt/elasticbeanstalk/containerfiles/support/download_auth.py", line 15, in download_auth
key.get_contents_to_filename('/root/.dockercfg')
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 1712, in get_contents_to_filename
response_headers=response_headers)
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 1650, in get_contents_to_file
response_headers=response_headers)
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 1482, in get_file
query_args=None)
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 1514, in _get_file_internal
override_num_retries=override_num_retries)
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 343, in open
override_num_retries=override_num_retries)
File "/usr/lib/python2.7/dist-packages/boto/s3/key.py", line 303, in open_read
self.resp.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
AccessDeniedAccess Denied910AD275D3E3110A682j0cjMsfurjyy/PGT3W9wRxI+4sh+rrESuw2WpInERcn4p4f9XGwBFdpBmDYQc
Failed to download authentication credentials dockercfg from my-s3-bucket.

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-ec2 docker amazon-elastic-beanstalk


    【解决方案1】:

    您必须确保您使用的 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 创建它自己的,这样你就可以控制它

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

    【讨论】:

    • 您是说我需要将配置更改为Dockerrun.aws.json 和自定义 .ebextensions 文件,还是两者之一?谢谢,只是想确保我理解正确。
    • dockerrun 文件指定文件的位置,但 ASAIK,它不会使 EB 设置权限访问该文件。您必须从角色/策略/权限中执行此操作。所以,你的 dockerrun 可能没问题
    • 我的推荐有用吗?或者这不是正确的答案?
    • 感谢您的跟进;我今晚要试试这个,然后会回复。
    • 更新角色完成了这项工作。现在 Beanstalk 应用程序说它在私有仓库中找不到 docker 镜像(即使它在那里),所以这是我的下一个障碍......见过吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 2019-09-29
      • 2021-07-24
      • 2017-08-06
      • 2016-05-18
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多