创建访问点 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

创建访问点

Amazon S3 提供了创建和管理访问点的功能。默认情况下,您可为每个 AWS 账户在每个区域创建最多 1,000 个访问点。如果您需要在单个区域为一个账户使用超过 1,000 个访问点,则可以请求增加服务配额。有关服务配额和请求增加的详细信息,请参阅 AWS服务配额AWS General Reference.

您可以使用 AWS 管理控制台, AWS Command Line Interface (AWS CLI), AWS SDK,或 Amazon S3 RESTAPI。以下示例展示如何使用 AWS CLI 和 AWS Java的SDK。

有关如何使用 AWS 管理控制台,参见 介绍 Amazon S3 接入点Amazon Simple Storage Service 控制台用户指南. 有关如何使用RESTAPI创建接入点的详细信息,请参阅 创建访问权限Amazon Simple Storage Service API Reference.

注意

由于您可能希望公布您的访问点名称以允许用户使用访问点,因此我们建议您避免在访问点名称中包含敏感信息。

命名 Amazon S3 访问点的规则

访问点名称必须符合以下条件:

  • 在单个 AWS 账户和区域内必须是唯一的

  • 必须遵守 DNS 命名限制

  • 必须以数字或小写字母开头

  • 长度必须介于 3-50 个字符之间

  • 不能以短划线开头或结尾

  • 不能包含下划线、大写字母或句点

示例:创建 访问点

以下示例创建名为 example-ap 对于桶 example-bucket 账户 123456789012...要创建接入点,您将请求发送到 Amazon S3,指定接入点名称、要关联接入点的存储区的名称,以及用于 AWS 拥有桶的帐户。有关命名规则的信息,请参阅命名 Amazon S3 访问点的规则.

AWS CLI
aws s3control create-access-point --name example-ap --account-id 123456789012 --bucket example-bucket

创建限制到 Virtual Private Cloud 的访问点

创建访问点时,您可以选择让访问点可从 Internet 访问,也可以指定通过该访问点发出的所有请求都必须来自特定 Virtual Private Cloud (VPC)。因互联网可访问的接入点被称为 Internet...它可以从互联网上的任何地方使用,受访问点、底层桶以及相关资源的任何其他访问限制约束,比如请求的对象。仅可从指定的VPC访问的接入点的网络起始地为 VPC,和 Amazon S3 拒绝对未来自VPC的接入点的任何请求。

重要

您只能在创建访问点时指定访问点的网络起源。创建访问点后,无法更改其网络起源。

要将访问点限制为仅限于 VPC 访问,请在创建访问点的请求中包括 VpcConfiguration 参数。在 VpcConfiguration 参数,指定要使用接入点的vPCID。 Amazon S3 然后拒绝通过接入点进行的请求,除非它们源自VPC。

您可以使用 AWS CLI, AWS SDK或RESTAPI。如果接入点具有指定的VPC配置,则其网络起源为 VPC...否则,接入点的网络源是 Internet.

示例:创建限于VPC访问的接入点

以下示例创建名为 example-vpc-ap 对于桶 example-bucket 账户 123456789012 仅允许从VPC访问 vpc-1a2b3c...然后,该示例验证新接入点是否具有网络起点 VPC.

AWS CLI
aws s3control create-access-point --name example-vpc-ap --account-id 123456789012 --bucket example-bucket --vpc-configuration VpcId=vpc-1a2b3c
aws s3control get-access-point --name example-vpc-ap --account-id 123456789012 { "Name": "example-vpc-ap", "Bucket": "example-bucket", "NetworkOrigin": "VPC", "VpcConfiguration": { "VpcId": "vpc-1a2b3c" }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true }, "CreationDate": "2019-11-27T00:00:00Z" }

要将访问点与 VPC 搭配使用,您必须修改 VPC 终端节点的访问策略。VPC 终端节点允许流量从您的 VPC 流向 Amazon S3. 它们具有访问控制策略,用于控制如何允许 VPC 内的资源与 S3 交互。仅当 VPC 终端节点策略同时对访问点和底层存储桶授予访问权限时,从 VPC 通过访问点到 S3 的请求才会成功。

以下示例策略声明配置vpc端点,以允许调用 GetObject 对于名为 awsexamplebucket1 以及名为 example-vpc-ap.

{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::awsexamplebucket1/*", "arn:aws:s3:us-west-2:123456789012:accesspoint/example-vpc-ap/object/*" ] }] }
注意

此示例中的 "Resource" 声明使用 Amazon 资源名称 (ARN) 指定访问点。有关访问点 ARN 的更多信息,请参阅使用访问点.

有关VPC端点策略的更多信息,请参阅 使用端点策略 Amazon S3Amazon Virtual Private Cloud 用户指南.

管理访问点的公有访问

Amazon S3 接入点支持独立 阻止公众访问 每个接入点的设置。创建访问点时,可以指定应用于该访问点的阻止公有访问设置。对于通过访问点发出的任何请求,Amazon S3 会评估该访问点、底层存储桶和存储桶拥有者账户的阻止公有访问设置。如果这些设置中的任何一个指示应阻止请求,则 Amazon S3 会拒绝请求。

有关 S3 阻止公有访问功能的更多信息,请参阅使用 Amazon S3 阻止公有访问.

重要
  • 默认情况下为访问点启用所有阻止公有访问设置。您必须明确禁用不希望应用于访问点的任何设置。

  • Amazon S3 当前不支持在创建访问点之后更改访问点的阻止公有访问设置。

示例:使用自定义块公共访问设置创建接入点

此示例创建名为 example-ap 对于桶 example-bucket 账户 123456789012 使用非默认阻止公共访问设置。然后,该示例检索新访问点的配置,以验证其“阻止公有访问”设置。

AWS CLI
aws s3control create-access-point --name example-ap --account-id 123456789012 --bucket example-bucket --public-access-block-configuration BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3control get-access-point --name example-ap --account-id 123456789012 { "Name": "example-ap", "Bucket": "example-bucket", "NetworkOrigin": "Internet", "PublicAccessBlockConfiguration": { "BlockPublicAcls": false, "IgnorePublicAcls": false, "BlockPublicPolicy": true, "RestrictPublicBuckets": true }, "CreationDate": "2019-11-27T00:00:00Z" }

配置使用访问点的 IAM 策略

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

重要

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

条件键

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

s3:DataAccessPointArn

这是一个您可以用来匹配访问点 ARN 的字符串。以下示例匹配所有接入点 AWS 账户 123456789012 地区 us-west-2:

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

这是一个字符串运算符,您可以使用它匹配访问点拥有者的账户 ID。以下示例匹配所有接入点 AWS 账户 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. 将访问点策略中包含的权限添加到底层存储桶的策略中。第一个访问点策略示例说明了如何修改底层存储桶策略以允许必要的访问。

例 访问点策略授予

以下接入点策略授予iam用户 Alice 账户 123456789012 权限 GETPUT 带前缀的对象 Alice/ 通过接入点 my-access-point 账户 123456789012.

{ "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/*" }] }

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

以下接入点策略授予iam用户 Bob 账户 123456789012 权限 GET 通过接入点对象 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" } } }] }

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

以下接入点策略允许iam用户 Charles 账户 123456789012 权限以查看存储桶底层接入点中包含的对象 my-access-point 账户 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", "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" } } } ] }