Amazon S3 策略操作 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon S3 策略操作

注意

本页面介绍面向通用存储桶的 Amazon S3 策略操作。要了解有关面向目录存储桶的 Amazon S3 策略操作的更多信息,请参阅适用于 S3 Express One Zone 的操作

Amazon S3 定义了可在策略中指定的一组权限。要授予执行 S3 API 操作的权限,您必须撰写有效的策略(例如 S3 存储桶策略或基于 IAM 身份的策略),并在策略的 Action 元素中指定相应的操作。这些操作称为策略操作。下图显示了 S3 API 操作和所需策略操作之间不同类型的映射关系。

  • 同名一对一映射。例如,要使用 PutBucketPolicy API 操作,需要执行 s3:PutBucketPolicy 策略操作。

  • 具有不同名称的一对一映射。例如,要使用 ListObjectsV2 API 操作,需要执行 s3:ListBucket 策略操作。

  • 一对多映射。例如,要使用 HeadObject API 操作,则需要执行 s3:GetObject。此外,当您使用 S3 对象锁定并想要获取对象的法定保留状态或保留设置时,还需要执行相应的 s3:GetObjectLegalHolds3:GetObjectRetention 策略操作,然后才能使用 HeadObject API 操作。

  • 多对一映射。例如,要使用 ListObjectsV2HeadBucket API 操作,需要执行 s3:ListBucket 策略操作。

要编写有效的 S3 存储桶策略,除了 Action 元素之外,还必须指定 EffectPrincipalResource 元素。此外,为了更精细地控制 S3 API 操作,您可以指定 Condition 元素。

要编写有效的基于 IAM 身份的策略,除了 Action 元素之外,您还必须指定 EffectResource 元素。基于 IAM 身份的有效策略不包含 Principal 元素。

有关策略中使用的 Amazon S3 策略操作、资源和条件键的完整列表,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3

在撰写策略时,必须根据相应的 Amazon S3 策略操作所需的正确资源类型来指定 Resource 元素。此页面按资源类型对 S3 API 操作权限进行了分类。有关资源类型的更多信息,请参阅《Service Authorization Reference》Resource types defined by Amazon S3。有关 Amazon S3 API 操作的完整列表,请参阅《Amazon Simple Storage Service API Reference》中的 Amazon S3 API Actions

存储桶操作是在存储桶资源类型上执行的 S3 API 操作。例如:CreateBucketListObjectsV2PutBucketPolicy。针对存储桶操作的 S3 策略操作要求存储桶策略或基于 IAM 身份的策略中的 Resource 元素必须是采用以下示例格式的 S3 存储桶类型 Amazon 资源名称 (ARN) 标识符。

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"

以下存储桶策略向账户 12345678901 的用户 Akua 授予执行 ListObjectsV2 API 操作和列出 S3 存储桶中对象的 s3:ListBucket 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to list objects in the bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }
接入点策略中的存储桶操作

在接入点策略中授予的权限仅在底层存储桶支持相同的权限时才有效。使用 S3 接入点时,必须将访问控制权从存储桶委托给接入点,或者将接入点策略中的相同权限添加到底层存储桶策略中。有关更多信息,请参阅配置使用接入点的 IAM 策略。在接入点策略中,针对存储桶操作的 S3 策略操作要求您对 Resource 元素使用以下格式的 accesspoint ARN。

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT"

以下接入点策略向账户 12345678901 的用户 Akua 授予通过 S3 接入点 DOC-EXAMPLE-ACCESS-POINT 执行 ListObjectsV2 API 操作,以列出接入点关联存储桶中对象的 s3:ListBucket 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to list objects in the bucket through access point", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT" } ] }
注意

并非所有存储桶操作都受 S3 接入点支持。有关更多信息,请参阅接入点与 S3 操作的兼容性

对象操作是按对象资源类型执行的 S3 API 操作。例如:GetObjectPutObjectDeleteObject。用于对象操作的 S3 策略操作要求策略中的 Resource 元素为采用以下示例格式的 S3 对象 ARN。

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/*"
注意

对象 ARN 必须在存储桶名称后面包含正斜杠,如前面的示例所示。

以下存储桶策略向账户 12345678901 的用户 Akua 授予执行 PutObject API 操作以将对象上传到 S3 存储桶的 s3:PutObject 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to upload objects", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
接入点策略中的对象操作

使用 S3 接入点控制对对象操作的访问时,可以使用接入点策略。当您使用接入点策略时,用于对象操作的 S3 策略操作要求您对 Resource 元素使用以下格式的 accesspoint ARN:arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource。对于使用接入点的对象操作,必须在 Resource 元素中整个接入点 ARN 的后面包含 /object/ 值。下面是一些示例。

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/*"
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/prefix/*"

以下接入点策略向账户 12345678901 的用户 Akua 授予通过接入点 DOC-EXAMPLE-ACCESS-POINT 对接入点关联存储桶中的所有对象执行 GetObject API 操作的 s3:GetObject 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Akua to get objects through access point", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Akua" }, "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT/object/*" } ] }
注意

并非所有对象操作都受 S3 接入点的支持。有关更多信息,请参阅接入点与 S3 操作的兼容性

接入点操作是在 accesspoint 资源类型上执行的 S3 API 操作。例如:CreateAccessPointDeleteAccessPointGetAccessPointPolicy。用于接入点操作的 S3 策略操作只能在基于 IAM 身份的策略中使用,不能用于存储桶策略或接入点策略。接入点操作要求 Resource 元素必须是采用以下示例格式的 accesspoint ARN。

"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/DOC-EXAMPLE-ACCESS-POINT"

以下基于 IAM 身份的策略授予在 S3 接入点 DOC-EXAMPLE-ACCESS-POINT 上执行 GetAccessPointPolicy API 操作的 s3:GetAccessPointPolicy 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Grant permission to retrieve the access point policy of access point DOC-EXAMPLE-ACCESS-POINT", "Effect": "Allow", "Action": [ "s3:GetAccessPointPolicy" ], "Resource": "arn:aws:s3:*:123456789012:access point/DOC-EXAMPLE-ACCESS-POINT" } ] }

使用接入点时,要控制对存储桶操作的访问权限,请参阅接入点策略中的存储桶操作;要控制对对象操作的访问权限,请参阅接入点策略中的对象操作。有关如何配置接入点策略的更多信息,请参阅配置使用接入点的 IAM 策略

有关如何为对象 Lambda 接入点操作配置策略的更多信息,请参阅为对象 Lambda 接入点配置 IAM 策略

有关如何为多区域接入点操作配置策略的更多信息,请参阅多区域接入点策略示例

(批量操作)作业操作是在作业资源类型上执行的 S3 API 操作。例如,DescribeJobCreateJob。用于作业操作的 S3 策略操作只能在基于 IAM 身份的策略中使用,不能用于存储桶策略。此外,作业操作要求基于 IAM 身份的策略中的 Resource 元素必须是采用以下示例格式的 job ARN。

"Resource": "arn:aws:s3:*:123456789012:job/*"

以下基于 IAM 身份的策略授予对 S3 Batch Operations 作业 DOC-EXAMPLE-JOB 执行 DescribeJob API 操作的 s3:DescribeJob 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow describing the Batch operation job DOC-EXAMPLE-JOB", "Effect": "Allow", "Action": [ "s3:DescribeJob" ], "Resource": "arn:aws:s3:*:123456789012:job/DOC-EXAMPLE-JOB" } ] }

有关如何配置 S3 Storage Lens 存储分析功能配置操作的更多信息,请参阅Amazon S3 Storage Lens 存储统计管理工具权限

账户操作是在账户级别执行的 S3 API 操作。例如,GetPublicAccessBlock(用于账户)。账户不是 Amazon S3 定义的资源类型。用于账户操作的 S3 策略操作只能在基于 IAM 身份的策略中使用,不能用于存储桶策略。此外,账户操作要求基于 IAM 身份的策略中的 Resource 元素必须是 "*"

以下基于 IAM 身份的策略授予执行账户级别 GetPublicAccessBlock API 操作和检索账户级公共访问权限屏蔽设置的 s3:GetAccountPublicAccessBlock 权限。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"Allow retrieving the account-level Public Access Block settings", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }