使用 IAM 角色凭证从 s3 存储桶获取文件

使用 IAM 角色凭证从 s3 存储桶获取文件

我正在尝试从私有 s3 存储桶检索一些文件到文件系统位置 elastic beanstalk ec2 实例,但没有成功。

我创建了一个名为 的存储桶,dev-config其中包含一个名为 的文件local.properties

我已经创建了 IAM 策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

并将该策略与 IAM 角色关联,该角色又与 EC2 实例关联。我已确认我可以使用 aws-cli 从 s3 存储桶中获取文件,而无需提供任何其他凭证。即 aws s3 ls s3://dev-config/local.properties

我已向我的项目添加了以下文件:

.ebextensions/01_文件.config

"/usr/share/tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: http://s3.amazonaws.com/dev-config/local.properties

我也尝试了源网址的一些变体

    source: http://dev-config.s3.amazonaws.com/dev-config/local.properties
    source: http://dev-config.s3.amazonaws.com/local.properties
    source: s3://dev-config/local.properties

我还尝试添加authentication属性,但没有成功(似乎没有关于身份验证的可能值的文档)。身份验证:S3Access

到目前为止,这些方法都没有奏效。

在某些情况下,我会在日志中收到访问被拒绝的消息:

    <?xml version="1.0" encoding="UTF-8"?>
      <Error><Code>AccessDenied</Code><Message>Access Denied</Message>
      <RequestId>blahblah</RequestId>
      <HostId>blahblah</HostId>
    </Error>

在其他情况下,我在 local.properties 文件本身中收到错误消息 PermanentRedirect 您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来请求发送到此端点。dev-config dev-config.s3.amazonaws.com
blahlblah blahlblah

已经成功完成这项工作了吗?

答案1

看了这个答案后在 Elastic beanstalk 配置文件中使用环境属性我在.ebextensions/01_files.config

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

并更新了 s3 url 以包含主机中的存储桶名称,因此最终文件如下所示:

"/usr/share/tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: https://dev-config.s3.amazonaws.com/local.properties

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

这使得 elastic beanstalk ec2 实例能够使用与其关联的 IAM 角色来访问包含文件的 s3 存储桶。

PS:要使此配置正常工作,请确保您已向主体授予对相关 S3 存储桶的访问权限aws-elasticbeanstalk-ec2-role。您可以从 IAM 控制台获取 ARN。

答案2

尝试使用此 IAM。它对我有用。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

如果您需要具有读/写/删除权限,您需要如下内容:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                 "arn:aws:s3:::dev-config",
                 "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

问候。

相关内容