【问题标题】:How to secure an S3 bucket to an Instance's Role?如何将 S3 存储桶保护到实例的角色?
【发布时间】:2016-04-24 17:13:46
【问题描述】:

使用 cloudformation,我启动了一个 EC2 实例,其角色具有如下所示的 S3 策略

{"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]}

在 S3 中存储桶策略是这样的

{
"Version": "2012-10-17",
"Id": "MyPolicy",
"Statement": [
    {
        "Sid": "ReadAccess",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456678:role/Production-WebRole-1G48DN4VC8840"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::web-deploy/*"
    }
]
}

当我登录实例并尝试将我上传到存储桶中的任何对象卷曲(没有 acl 修改)时,我收到未经授权的 403 错误。

这是将对存储桶的访问限制为仅以特定角色启动的实例的正确方法吗?

【问题讨论】:

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


    【解决方案1】:

    EC2 实例角色足以放入/读取任何 S3 存储桶,但您需要使用实例角色,这不是 curl 自动完成的。

    您应该使用例如aws s3 cp <local source> s3://<bucket>/<key>,它将自动使用实例角色。

    【讨论】:

      【解决方案2】:

      可通过三种方式授予对 Amazon S3 中对象的访问权限:

      • 对象 ACL: 可以将特定对象标记为“公共”,因此任何人都可以访问它们。
      • 存储桶政策:放置在存储桶上的政策,用于确定允许/拒绝哪些访问权限,无论是公开还是特定用户。
      • IAM 政策:针对用户、组或角色的政策,授予他们访问 AWS 资源(例如 Amazon S3 存储桶)的权限。

      如果任何这些策略授予访问权限,则用户可以访问 Amazon S3 中的对象。一个例外是,如果存在覆盖 Allow 政策的 Deny 政策。

      Amazon EC2 实例上的角色

      您已将此角色授予 Amazon EC2 实例:

      {"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]}
      

      这将为实例提供可由AWS Command-Line Interface (CLI) 或任何使用AWS SDK 的应用程序访问的凭证。他们将无限制地访问 Amazon S3,除非还有拒绝政策以其他方式限制访问。

      如果有的话,该政策授予了过多的权限。它允许该实例上的应用程序对您的 Amazon S3 存储执行它想要的任何操作,包括将其全部删除!最好分配最低权限,只授予应用程序需要执行的操作的权限。

      Amazon S3 存储桶政策

      您还创建了一个存储桶策略,它允许任何承担Production-WebRole-1G48DN4VC8840 角色的东西检索web-deploy 存储桶的内容。

      角色本身拥有什么特定权限并不重要——此策略意味着仅使用角色访问web-deploy 存储桶将允许它读取所有文件。因此,仅此策略就足以满足您使用角色授予对实例的存储桶访问权限的要求——您也不需要角色本身内的策略。

      那么,为什么不能访问内容?这是因为使用直接 CURL 无法识别您的角色/用户。 Amazon S3 接收请求并将其视为匿名的,因此不授予访问权限。

      尝试通过 CLI 或通过 SDK 调用以编程方式访问数据。例如,这个 CLI 命令会下载一个对象:

      aws s3 cp s3://web-deploy/foo.txt foo.txt
      

      CLI 将自动获取与您的角色相关的凭据,从而允许访问对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-22
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        相关资源
        最近更新 更多