0

使用cloudformation我都推出了与具有S3的政策,它看起来像下面如何将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/*" 
    } 
] 
} 

当我登录到一个角色的EC2实例实例并尝试将我上传到存储桶中的任何对象(无acl修改)收到并且未经授权403错误。

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

回答

0

有三种方式授予访问亚马逊S3对象:

  • 对象ACL:特定对象可以被标记为“公开”,所以任何人都可以访问它们。
  • 存储桶策略:存储桶上的一项策略,用于确定公开或向特定用户允许/拒绝的访问权限。
  • IAM策略:针对用户,组或角色的策略,授予他们对AWS资源(例如Amazon S3存储桶)的访问权限。

如果这些政策的任何授予访问权限,用户可以访问在亚马逊S3中的(多个)对象。一个例外是,如果存在拒绝策略,该策略将覆盖允许策略。在Amazon EC2实例

角色

您授予这个角色的Amazon EC2实例:

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

这将提供凭据可由AWS Command-Line Interface (CLI)或任何访问该实例应用程序使用AWS SDK。他们将有无限制地访问亚马逊S3,除非还有一个拒绝策略,否则会限制访问。

如果有什么,该政策授予太多权限。它允许在该实例上的应用程序为您的Amazon S3存储提供任何想要的服务,包括将其全部删除!最好分配最小权限,只允许应用程序需要执行的操作

亚马逊S3斗政策

您还创建了一个斗策略,它允许任何已呈Production-WebRole-1G48DN4VC8840角色检索web-deploy桶的内容。

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

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

尝试通过CLI或以编程方式通过SDK调用访问数据。例如,此CLI命令将下载一个对象:CLI将自动获取与角色有关的凭据,以允许访问这些对象。

+0

这清除了我的误解,谢谢! – MikeW

2

EC2实例角色绰绰有余可以放入/读取到任何S3存储桶,但是您需要使用实例角色,而不是由curl自动完成。

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

相关问题