配置使用访问点的 IAM 策略 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

配置使用访问点的 IAM 策略

Amazon S3 访问点支持 Amazon Identity and Access Management (IAM) 资源策略,这些策略允许您按资源、用户或其他条件控制访问点的使用。要使应用程序或用户能够通过访问点访问对象,访问点和底层存储桶都必须允许请求。

重要

向存储桶添加 S3 访问点不会更改存储桶在通过现有存储桶名称或 ARN 访问时的行为。针对存储桶的所有现有操作将继续像以前一样运行。您在访问点策略中包括的限制仅适用于通过该访问点发出的请求。

条件键

S3 访问点引入了三个新的条件键,这些键可在 IAM 策略中用来控制对资源的访问:

s3:DataAccessPointArn

这是一个您可以用来匹配访问点 ARN 的字符串。以下示例匹配区域 us-west-2 中 Amazon Web Services 账户 123456789012 的所有访问点:

"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*" } }
s3:DataAccessPointAccount

这是一个字符串运算符,您可以使用它匹配访问点拥有者的账户 ID。以下示例匹配 Amazon Web Services 账户 123456789012 拥有的所有访问点。

"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "123456789012" } }
s3:AccessPointNetworkOrigin

这是一个字符串运算符,您可以使用它来匹配网络起源(InternetVPC)。以下示例仅匹配起源为 VPC 的访问点。

"Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }

有关将条件键与 Amazon S3 结合使用的更多信息,请参阅 Amazon S3 的操作、资源和条件键

将访问控制委派到访问点

您可以将存储桶的访问控制委托给存储桶的访问点。以下示例存储桶策略允许对存储桶拥有者账户所拥有的所有访问点进行完全访问。因此,对此存储桶的所有访问都由附加到其访问点的策略控制。我们建议您以这种方式为所有不需要直接访问存储桶的使用案例配置存储桶。

例 将访问控制委派给访问点的存储桶策略

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "Bucket ARN", "Bucket ARN/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }

访问点策略示例

以下示例演示如何创建 IAM 策略来控制通过访问点发出的请求。

注意

在访问点策略中授予的权限仅在底层存储桶也允许相同的访问时才有效。您可以通过两种方式实现这一点:

  1. (推荐)将存储桶的访问控制委派到访问点,如将访问控制委派到访问点中所述。

  2. 将访问点策略中包含的权限添加到底层存储桶的策略中。第一个访问点策略示例说明了如何修改底层存储桶策略以允许必要的访问。

例 访问点策略授予

以下访问点策略通过账户 Alice 中的访问点 123456789012 向账户 GET 中的 IAM 用户 PUT 授予对具有前缀 Alice/my-access-point123456789012 对象的权限。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Alice/*" }] }
注意

要使访问点策略有效地向 Alice 授予访问权限,底层存储桶也必须对 Alice 允许相同的访问权限。可以将存储桶的访问控制委派到访问点,如将访问控制委派到访问点中所述。或者,您也可以将以下策略添加到底层存储桶中,以便向 Alice 授予必要的权限。请注意,访问点策略和存储桶策略的 Resource 条目不同。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::awsexamplebucket1/Alice/*" }] }

例 带标签条件的访问点策略

以下访问点策略通过账户 Bob 中的访问点 123456789012 向账户 GET 中的 IAM 用户 my-access-point 授予对 123456789012 对象的权限,这些权限具有值设为 data 的标签键 finance

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::123456789012:user/Bob" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/data": "finance" } } }] }

例 允许查看存储桶列示内容的访问点策略

以下访问点策略通过账户 Charles 中的访问点 123456789012 授予账户 my-access-point 中的 IAM 用户 123456789012 查看底层存储桶中包含的对象的权限。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Charles" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point" }] }

例 服务控制策略

以下服务控制策略要求使用 VPC 网络起源创建所有新访问点。实施此策略时,组织中的用户无法创建可从 Internet 访问的新访问点。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }

例 将 S3 操作限制为 VPC 网络起源的存储桶策略

以下存储桶策略限制为只能通过具有 VPC 网络起源的访问点来访问存储桶 examplebucket 的所有 S3 对象操作。

重要

在使用类似此示例的语句之前,请确保您不需要使用访问点不支持的功能,例如跨区域复制。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }