Amazon web services 如何将S3存储桶保护到实例';谁的角色?

Amazon web services 如何将S3存储桶保护到实例';谁的角色?,amazon-web-services,amazon-s3,amazon-iam,amazon-cloudformation,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",

使用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/*"
    }
]
}
当我登录到实例并尝试将我上传的任何对象卷曲到bucket中(没有acl修改)时,我收到了未经授权的403错误


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

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

  • 对象ACL:特定对象可以标记为“公共”,以便任何人都可以访问它们
  • 存储桶策略:放置在存储桶上的策略,用于确定公开或特定用户允许/拒绝哪些访问
  • IAM策略:放置在用户、组或角色上的策略,授予他们访问AWS资源(如Amazon S3 bucket)的权限
如果这些策略中的任何一个授予访问权限,则用户可以访问AmazonS3中的对象。一个例外是,如果存在一个拒绝策略,它会覆盖一个允许策略

亚马逊EC2实例上的角色

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

{"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]}
这将为实例提供凭据,该实例可由或任何使用AWS SDK的应用程序访问。他们将拥有对Amazon S3的无限访问权限,除非另有拒绝策略限制访问

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

亚马逊S3存储桶策略

您还创建了一个Bucket策略,该策略允许任何假定为
Production-WebRole-1G48DN4VC8840
角色的对象检索
web部署
Bucket的内容

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

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

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

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

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

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

  • 对象ACL:特定对象可以标记为“公共”,以便任何人都可以访问它们
  • 存储桶策略:放置在存储桶上的策略,用于确定公开或特定用户允许/拒绝哪些访问
  • IAM策略:放置在用户、组或角色上的策略,授予他们访问AWS资源(如Amazon S3 bucket)的权限
如果这些策略中的任何一个授予访问权限,则用户可以访问AmazonS3中的对象。一个例外是,如果存在一个拒绝策略,它会覆盖一个允许策略

亚马逊EC2实例上的角色

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

{"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]}
这将为实例提供凭据,该实例可由或任何使用AWS SDK的应用程序访问。他们将拥有对Amazon S3的无限访问权限,除非另有拒绝策略限制访问

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

亚马逊S3存储桶策略

您还创建了一个Bucket策略,该策略允许任何假定为
Production-WebRole-1G48DN4VC8840
角色的对象检索
web部署
Bucket的内容

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

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

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

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

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

EC2实例角色足以放入/读取任何S3存储桶,但您需要使用实例角色,而curl不会自动执行此操作


例如,您应该使用aws s3 cp s3://,它将自动使用实例角色。

EC2实例角色足以放入/读取任何s3存储桶,但您需要使用实例角色,而curl不会自动执行此操作

你应该使用examp