如何授予用户访问 Amazon S3 存储桶中特定文件夹的权限?

上次更新时间:2019 年 4 月 17 日

我想授予 AWS Identity and Access Management (IAM) 访问我的 Amazon Simple Storage Service (Amazon S3) 存储桶中特定文件夹的权限。该如何操作? 

解决方法

使用 IAM 策略授予用户对该文件夹的访问权限,并指定用户可以对该文件夹执行的 Amazon S3 操作。例如,以下 IAM 策略允许用户使用 Amazon S3 控制台下载文件夹 awsexamplebucket/media 中的对象。该策略包含以下语句:

  • AllowStatement1 允许用户列出属于其 AWS 账户的存储桶。用户需要此权限才能使用控制台导航到存储桶。
  • AllowStatement2A 允许用户列出 awsexamplebucket 中的文件夹,用户需要能够使用控制台导航到该文件夹。此语句还允许用户使用控制台搜索前缀 media/
  • AllowStatement3 允许用户列出 awsexamplebucket/media 中的内容。
  • AllowStatement4A 允许用户从文件夹 awsexamplebucket/media 下载对象 (s3:GetObject)。
{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2A",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::awsexamplebucket"],
     "Condition":{"StringEquals":{"s3:prefix":["","media"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::awsexamplebucket"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },    
   {
     "Sid": "AllowStatement4A",
     "Effect": "Allow",
     "Action": ["s3:GetObject"],
     "Resource": ["arn:aws:s3:::awsexamplebucket/media/*"]
   }
 ]
}

再例如,以下 IAM 策略授予用户使用控制台或编程方法(如 AWS 命令行界面 (AWS CLI) 或 Amazon S3 API)访问文件夹 awsexamplebucket/media 中所有 Amazon S3 操作的权限。与以前的 IAM 策略的区别在于:

  • AllowStatement2B 包括 "s3:delimiter":["/"],它指定正斜杠字符 (/) 作为对象路径中文件夹的分隔符。如果用户使用 AWS CLI 或 Amazon S3 API 提出请求,则最佳做法是指定分隔符。
  • AllowStatement4B 允许用户对文件夹 awsexamplebucket/media 执行所有对象级操作。
{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2B",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::awsexamplebucket"],
     "Condition":{"StringEquals":{"s3:prefix":["","media"],"s3:delimiter":["/"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::awsexamplebucket"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },
   {
     "Sid": "AllowStatement4B",
     "Effect": "Allow",
     "Action": ["s3:*"],
     "Resource": ["arn:aws:s3:::awsexamplebucket/media/*"]
   }
 ]
}

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?