如何授予用户的 Amazon S3 控制台仅访问某个存储桶或文件夹的权限?

上次更新时间:2020 年 8 月 6 日

我想授予用户的 Amazon Simple Storage Service (Amazon S3) 控制台访问某个存储桶或文件夹(前缀)的权限。但是,我不希望用户能够查看其他账户中的存储桶或其他存储桶中的文件夹。如何限制用户的控制台访问权限,使之只能访问某个存储桶或文件夹?

简短描述

要限制用户的 Amazon S3 控制台访问权限,使之只能访问某个存储桶或文件夹(前缀),请在用户的 AWS Identity and Access Management (IAM) 权限中更改以下内容:

  1. 删除 s3:ListAllMyBuckets 操作权限。
  2. 仅为您希望用户访问的存储桶或文件夹添加 s3:ListBucket 权限。
    注意:要允许用户上传和下载存储桶或文件夹中的对象,您还必须包括 s3:PutObjects3:GetObject

警告:在您更改这些权限后,用户在访问主 Amazon S3 控制台时会收到“访问被拒绝”错误。用户必须使用指向存储桶或文件夹的直接控制台链接访问存储桶。指向存储桶的直接控制台链接与以下类似:

https://s3.console.aws.amazon.com/s3/buckets/AWSDOC-EXAMPLE-BUCKET/

指向文件夹(如示例 folder2)的直接控制台链接与以下类似:

https://s3.console.aws.amazon.com/s3/buckets/AWSDOC-EXAMPLE-BUCKET/folder1/folder2/

注意:Amazon S3 使用平面数据结构,而不是文件层次结构。控制台支持以文件夹方式分组和组织文件的概念。

解决方法

按照以下步骤更新用户控制台仅访问某个存储桶或文件夹的 IAM 权限:

1.    打开 IAM 控制台

2.    在控制台中,打开仅应具有对某个存储桶的访问权限的 IAM 用户或角色。

3.    在 IAM 用户或角色的权限选项卡中,展开每个策略以查看其 JSON 策略文档。

4.    在 JSON 策略文档中,搜索授予用户 s3:ListAllMyBuckets 操作或 s3:* 操作(所有 S3 操作)权限的策略。

5.    修改策略以删除 s3:ListAllMyBuckets 操作权限。

6.    然后,仅为您希望用户从控制台访问的存储桶或文件夹添加 s3:ListBucket 权限。

以下示例策略用于访问存储桶。该策略允许用户仅对 AWSDOC-EXAMPLE-BUCKET 执行 s3:ListBucket、s3:PutObject 和 s3:GetObject 操作:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      }
   ]
}

以下示例策略用于访问文件夹。例如,以下策略允许用户对 AWSDOC-EXAMPLE-BUCKET中的 folder2 执行 s3:ListBucket、s3:PutObject 和 s3:GetObject 操作:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUsersToAccessFolder2Only",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:PutObject*"
            ],
            "Resource": [
                "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/folder1/folder2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket*"
            ],
            "Resource": [
                "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "folder1/folder2/*"
                    ]
                }
            }
        }
    ]
}

7.    为用户提供指向存储桶或文件夹的直接控制台链接。指向存储桶的直接控制台链接与以下类似:

https://s3.console.aws.amazon.com/s3/buckets/AWSDOC-EXAMPLE-BUCKET/

指向文件夹的直接控制台链接与以下类似: 

https://s3.console.aws.amazon.com/s3/buckets/AWSDOC-EXAMPLE-BUCKET/folder1/folder2/

用户必须使用直接链接才能从控制台访问存储桶或文件夹。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?