适用于 Amazon S3 的网关端点 - Amazon Virtual Private Cloud

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Amazon S3 的网关端点

您可以使用网关 VPC 端点从 VPC 访问 Amazon S3。创建网关端点后,您可以将其添加为从您的 VPC 流向 Amazon S3 的流量的路由表中的目标。

使用网关端点不会发生任何额外费用。

Amazon S3 同时支持网关端点和接口端点。借助网关端点,您可以从 VPC 访问 Amazon S3,而无需为 VPC 配备互联网网关或 NAT 设备,也无需任何额外费用。但是,网关端点不允许从本地网络、其他 AWS 区域的对等 VPC 或通过传输网关进行访问。对于这些场景,您必须使用接口端点,后者需要额外付费。有关更多信息,请参阅《Amazon S3 用户指南》中的适用于 Amazon S3 的 VPC 端点类型

注意事项

  • 网关端点仅在您创建该端点所在的区域可用。请务必在您的 S3 存储桶所在的区域内创建网关端点。

  • 如果您使用的是 Amazon DNS 服务器,则必须为您的 VPC 同时启用 DNS 主机名和 DNS 解析。如果您使用自己的 DNS 服务器,请确保将针对 Amazon S3 的请求正确解析为 AWS 维护的 IP 地址。

  • 对于通过网关端点访问 Amazon S3 的实例,安全组的出站规则必须允许进出 Amazon S3 的流量。您可以在安全组规则中引用 Amazon S3 的前缀列表的 ID。

  • 对于通过网关端点访问 Amazon S3 的实例,子网的网络 ACL 必须允许进出 Amazon S3 的流量。您不能在网络 ACL 规则中引用前缀列表,但可以从 Amazon S3 的前缀列表中获取 Amazon S3 的 IP 地址范围。

  • 检查您使用的 AWS 服务 是否需要访问 S3 存储桶。例如,某项服务可能需要访问包含日志文件的存储桶,或者可能需要您将驱动程序或代理下载到 EC2 实例。如果是,请确保端点策略允许 AWS 服务 或资源使用 s3:GetObject 操作访问这些存储桶。

  • 对于通过 VPC 端点向 Amazon S3 发出的请求,不能在身份策略或存储桶策略中使用 aws:SourceIp 条件。改为使用 aws:VpcSourceIp 条件。或者,您可以使用路由表来控制哪些 EC2 实例可以通过 VPC 端点访问 Amazon S3。

  • 网关端点仅支持 IPv4 流量。

  • Amazon S3 从受影响子网的实例收到的源 IPv4 地址将从公有 IPv4 地址变为您的 VPC 中的私有 IPv4 地址。端点将切换网络路由,并断开打开的 TCP 连接。以前使用公有 IPv4 地址的连接不会恢复。建议您在创建或修改端点时不要运行任何重要任务;或进行测试以确保您的软件在连接中断后可自动重新连接到 Amazon S3。

  • 无法将端点连接扩展到 VPC 之外。VPC 中的 VPN 连接、VPC 对等连接、中转网关或 AWS Direct Connect 连接的另一端的资源,不能使用网关端点来与 Amazon S3 通信。

  • 您的账户的默认配额为每个区域 20 个网关端点,该配额可调整。每个 VPC 的网关端点限制为 255 个。

私有 DNS

在为 Amazon S3 创建网关端点和接口端点时,您可以配置私有 DNS 以优化成本。

Route 53 Resolver

Amazon 为您的 VPC 提供 DNS 服务器,称为 Route 53 Resolver。Route 53 Resolver 自动解析私有托管区域中的本地 VPC 域名和记录。但是,您不能从 VPC 外部使用 Route 53 Resolver。Route 53 提供解析器端点和解析器规则,以便您可从 VPC 外部使用 Route 53 Resolver。入站解析器端点将来自本地网络的 DNS 查询转发到 Route 53 Resolver。出站解析器端点将来自 Route 53 Resolver 的 DNS 查询转发到本地网络。

当您将 Amazon S3 的接口端点配置为仅对入站解析器端点使用私有 DNS 时,我们会创建入站解析器端点。对于 Amazon S3 的 DNS 查询,入站解析器端点会将其从本地解析到接口端点的私有 IP 地址。我们还将 Route 53 Resolver 的 ALIAS 记录添加到 Amazon S3 的公共托管区域,这样来自 VPC 的 DNS 查询便会解析到 Amazon S3 公有 IP 地址,从而将流量路由到网关端点。

私有 DNS

如果您为 Amazon S3 的接口端点配置私有 DNS,但并非仅为入站解析器端点配置私有 DNS,则来自您的本地网络和 VPC 的请求都使用接口端点访问 Amazon S3。因此,您需要付费使用接口端点处理来自 VPC 的流量,而不是免费使用网关端点。

使用两种端点类型的 Amazon S3 请求路由。
私有 DNS 仅适用于入站解析器端点

如果您仅为入站解析器端点配置私有 DNS,则来自您的本地网络的请求会使用接口端点访问 Amazon S3,而来自 VPC 的请求会使用网关端点访问 Amazon S3。因此,您可以优化成本,因为您只需为无法使用网关端点的流量,付费使用接口端点。

使用私有 DNS 和入站解析器端点的 Amazon S3 请求路由。
配置私有 DNS

您可以在创建 Amazon S3 的接口端点时或在创建后,为其配置私有 DNS。有关更多信息,请参阅 创建 VPC 终端节点(创建期间配置)或 启用私有 DNS 名称(创建后配置)。

创建网关端点

使用以下过程创建连接到 Amazon S3 的网关端点。

使用控制台创建网关端点
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Endpoints(端点)。

  3. 选择 Create endpoint(创建端点)。

  4. 对于 Service category(服务类别),选择 AWS 服务

  5. Services(服务)中,添加筛选条件 Type = Gateway(类型 = 网关)并选择 com.amazonaws.region.s3

  6. VPC 选项中,选择要创建端点的 VPC。

  7. 对于 Route tables(路由表),选择端点要使用的路由表。我们将自动添加一个路由,将以服务为目的地的流量指向端点网络接口。

  8. 对于 Policy(策略),选择 Full access(完全访问权限)以允许所有主体通过 VPC 端点对所有资源执行所有操作。否则,选择 Custom(自定义)以附加 VPC 端点策略,该策略控制主体通过 VPC 端点对资源执行操作的权限。

  9. (可选)若要添加标签,请选择 Add new tag(添加新标签),然后输入该标签的键和值。

  10. 选择 Create endpoint(创建端点)。

使用命令行创建网关端点

使用存储桶策略控制访问

您可以使用存储桶策略来控制从特定端点、VPC、IP 地址范围和 AWS 账户 对存储桶的访问。这些示例假设还有一个允许您的使用案例所需访问权限的策略语句。

例 示例:限制对特定端点的访问

您可以使用 aws:sourceVpce 条件键来创建限制对特定端点的访问的存储桶策略。除非使用了指定的网关端点,否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意,此策略通过 AWS Management Console 使用指定的操作阻止对指定桶的访问。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPCE", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }
例 示例:限制对特定 VPC 的访问

您可以使用 aws:sourceVpc 条件键来创建存储桶策略,用于限制对特定 VPC 的访问。如果您在同一 VPC 中配置了多个端点,这会非常有用。除非请求来自指定的 VPC,否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意,此策略通过 AWS Management Console 使用指定的操作阻止对指定桶的访问。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPC", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }
例 示例:限制对特定 IP 地址范围的访问

您可以使用 aws:VpcSourceIp 条件键来创建策略,用于限制对特定 IP 地址范围的访问。除非请求来自指定的 IP 地址,否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意,此策略通过 AWS Management Console 使用指定的操作阻止对指定桶的访问。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPC-CIDR", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*"], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": "172.31.0.0/16" } } } ] }
例 示例:限制对特定 AWS 账户 中存储桶的访问

您可以使用 s3:ResourceAccount 条件键来创建策略,用于限制对特定 AWS 账户 中 S3 存储桶的访问。除非 S3 桶归指定的 AWS 账户 所有,否则以下策略会使用指定的操作拒绝对这些桶的访问。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-bucket-in-specific-account", "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }

关联路由表

您可以更改与网关端点关联的路由表。当您关联路由表时,我们将自动添加一个路由,将以服务为目的地的流量指向端点网络接口。当您取消关联路由表时,我们会自动从路由表中删除端点路由。

使用控制台关联路由表
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Endpoints(端点)。

  3. 选择网关端点。

  4. 选择 ActionsManage route tables

  5. 根据需要选择或取消选择路由表。

  6. 选择 Modify route tables(修改路由表)。

使用命令行关联路由表

编辑 VPC 端点策略

您可以为网关端点编辑端点策略,以此控制通过端点从 VPC 对 Amazon S3 进行的访问。默认策略允许完全访问。有关更多信息,请参阅 端点策略

使用控制台更改端点策略
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Endpoints(端点)。

  3. 选择网关端点。

  4. 依次选择 Actions(操作)、Manage policy(管理策略)。

  5. 选择 Full Access(完全访问)以允许对服务进行完全访问,或者选择 Custom(自定义)并附加自定义策略。

  6. 选择 Save(保存)。

下面是访问 Amazon S3 的端点策略示例。

例 示例:限制对特定存储桶的访问

您可以创建一个策略来仅允许访问特定 S3 存储桶。如果您的 VPC 中有使用 S3 存储桶的其他 AWS 服务,这会非常有用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-bucket", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*" ] } ] }
例 示例:限制对特定 IAM 角色的访问权限

您可以创建限制对特定 IAM 角色的访问权限的策略。必须使用 aws:PrincipalArn 向主体授予访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-IAM-role", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/role_name" } } } ] }
例 示例:限制对特定账户中用户的访问

您可以创建限制对特定账户的访问权限的策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-callers-from-specific-account", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalAccount": "111122223333" } } } ] }

删除网关端点

用完网关端点后可以将其删除。当您删除网关端点时,我们会从子网路由表中删除端点路由。

如果私有 DNS 已启用,则无法删除网关端点。

使用控制台删除网关端点
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Endpoints(端点)。

  3. 选择网关端点。

  4. 选择 Actions(操作)、Delete VPC Endpoint(删除 VPC 端点)。

  5. 当系统提示进行确认时,输入 delete

  6. 选择删除

使用命令行删除网关端点