如何保护S3存储桶到实例的角色?

时间:2016-04-24 07:36:03

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

使用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错误。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

有三种方法可以授予对Amazon S3中对象的访问权限:

  • 对象ACL:特定对象可以标记为&#34; Public&#34;,以便任何人都可以访问它们。
  • 广告投放管理政策:放置在广告位上的策略,用于确定对公开或特定用户的允许/拒绝访问权限。
  • IAM策略:放置在用户,组或角色上的策略,授予他们访问AWS资源(如Amazon S3存储桶)的权限。

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

在Amazon EC2实例上的角色

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

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

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

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

Amazon S3存储桶政策

您还创建了一个Bucket Policy,允许任何具有Production-WebRole-1G48DN4VC8840角色的内容检索web-deploy存储桶的内容。

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

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

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

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

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