【问题标题】:AWS EC2 access to S3 with IAM roleAWS EC2 使用 IAM 角色访问 S3
【发布时间】:2017-05-27 01:37:21
【问题描述】:

场景:我在同一个账户下有一个 EC2 实例和一个 S3 存储桶,而我在该 EC2 上的 Web 应用程序想要访问该存储桶中的资源。

按照官方文档,我使用s3access 创建了一个 IAM 角色并将其分配给 EC2 实例。据我了解,现在我的网络应用程序应该能够访问存储桶。但是,经过试验,似乎我必须像这样添加allowPublicRead 存储桶策略:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*"
        }
    ]
}

否则我会被禁止访问。

但是,既然我已经将 s3access IAM 角色授予 EC2 实例,为什么还要使用此 allowPublicRead 存储桶策略?

【问题讨论】:

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-iam


【解决方案1】:

S3 s3:GetObject 将只允许从您的 ec2 实例访问对象,而您想要的是从您的网络应用程序访问这些对象,这意味着从您的浏览器,在这种情况下,这些图像/对象将被呈现给用户浏览器如果它是面向公众的应用程序,那么您还需要分配AllowPublicRead 权限。

【讨论】:

  • 谢谢!还有一个问题,如果只是客户直接与 S3 对话,为什么我们需要将带有s3access 的 IAM 角色分配给 EC2?
  • 是的,因为您的代码已部署到 ec2 机器,它需要连接到 S3 以获取对象,然后将其发送回客户端。所以 ec2 需要有 S3 访问权限。
  • @AmitKhandelwal,说 s3 资源是网页中作为链接的图像。所以在这里,CORS 开始行动。因此,如果为 Bucket 启用了资源的 CORS 和公共访问权限,则应该这样做。当已经授予公共访问权限时,向 EC2 实例添加角色有什么意义,资源已经是公共的。那么,这个角色是不是多余而不是必要的呢
  • @samshers,我需要检查一下,会尽快回复您。
  • NP,@John-Rotenstein 在这里回答。希望它有所帮助。 stackoverflow.com/a/57476893?noredirect=1
猜你喜欢
  • 2016-04-07
  • 2019-10-26
  • 2019-06-10
  • 2019-07-08
  • 1970-01-01
  • 2016-07-10
  • 2018-11-10
  • 2022-06-30
  • 1970-01-01
相关资源
最近更新 更多