Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon S3 的终端节点

如果您已设置从 VPC 访问 Amazon S3 资源的权限,则在您设置终端节点后可继续使用 Amazon S3 DNS 名称来访问这些资源。但请注意以下几点:

  • 您的终端节点具有可控制使用终端节点访问 Amazon S3 资源的策略。默认策略允许 VPC 中的任何用户或服务使用来自任何 AWS 账户的凭证访问任何 Amazon S3 资源;包括与 VPC 关联的账户之外的其他 AWS 账户的 Amazon S3 资源。有关更多信息,请参阅 控制对服务的访问

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

  • 您不能使用 IAM 策略或存储桶策略允许从 VPC IPv4 CIDR 范围 (私有 IPv4 地址范围) 进行访问。VPC CIDR 块可能重叠或相同,这可能会导致意外结果。因此,对于通过 VPC 终端节点向 Amazon S3 发出的请求,无法在 IAM 策略中使用 aws:SourceIp 条件。这适用于用户和角色的 IAM 策略以及任何存储桶策略。如果语句包含 aws:SourceIp 条件,则该值不与任何提供的 IP 地址或范围匹配。您可以改而执行以下操作:

    • 使用路由表来控制哪些实例可以通过终端节点访问 Amazon S3 中的资源。

    • 对于存储桶策略,您可以限制对特定终端节点或特定 VPC 的访问。有关更多信息,请参阅 使用 Amazon S3 存储桶策略

  • 终端节点当前不支持跨区域请求 - 确保在您的存储桶所在的区域内创建终端节点。您可以使用 Amazon S3 控制台或 get-bucket-location 命令来查找存储桶的位置。使用区域特定的 Amazon S3 终端节点访问存储桶;例如,mybucket.s3-us-west-2.amazonaws.com。有关 Amazon S3 的区域特定的终端节点的更多信息,请参阅 Amazon Web Services 一般参考 中的 Amazon Simple Storage Service (S3)。如果您使用 AWS CLI 向 Amazon S3 发起请求,请将默认区域设置为您的存储桶所在的区域,或在请求中使用 --region 参数。

    注意

    将 Amazon S3 的美国标准区域视为已映射到 us-east-1 区域。

  • 终端节点目前只支持 IPv4 流量。

在对 Amazon S3 使用终端节点之前,确保您已阅读下面的一般限制:终端节点限制

如果您在 VPC 中使用其他 AWS 服务,它们可能会对特定任务使用 S3 存储桶。确保终端节点策略允许对 Amazon S3 进行完全访问 (默认策略),或允许对这些服务所使用的特定存储桶进行访问。或者,仅在未由这些服务中的任一服务使用的子网中创建终端节点,以允许这些服务继续使用公有 IP 地址访问 S3 存储桶。

下表列出了可能受终端节点影响的 AWS 服务,以及每项服务的任何具体信息。

AWS 服务 注意
Amazon AppStream 2.0 您的终端节点策略必须允许访问 AppStream 2.0 用于存储用户内容的特定存储桶。有关更多信息,请参阅 Amazon AppStream 2.0 开发人员指南 中的主文件夹和 VPC 终端节点
AWS CloudFormation 如果您的 VPC 中的资源必须响应等待条件或自定义资源请求,则您的终端节点策略必须至少允许对这些资源所使用的特定存储桶的访问。有关更多信息,请参阅 AWS CloudFormation 和 VPC 终端节点
AWS CodeDeploy 您的终端节点策略必须允许对 Amazon S3 进行完全访问,或允许对您已为 AWS CodeDeploy 部署创建的任何 S3 存储桶进行访问。
Elastic Beanstalk 您的终端节点策略必须至少允许对用于 Elastic Beanstalk 应用程序的任何 S3 存储桶进行访问。有关更多信息,请参阅 AWS Elastic Beanstalk 开发人员指南 中的将 Elastic Beanstalk 与 Amazon S3 配合使用
AWS OpsWorks 您的终端节点策略必须至少允许对 AWS OpsWorks 使用的特定存储桶进行访问。有关更多信息,请参阅 AWS OpsWorks 用户指南 中的在 VPC 中运行堆栈
Amazon WorkDocs 如果您在 Amazon WorkSpaces 或 EC2 实例中使用 Amazon WorkDocs 客户端,则您的终端节点策略必须允许对 Amazon S3 进行完全访问。
Amazon WorkSpaces Amazon WorkSpaces 不直接取决于 Amazon S3;但如果您向 Amazon WorkSpaces 用户提供 Internet 访问权,则请记住,来自其他公司的网站、HTML 电子邮件和 Internet 服务可能取决于 Amazon S3。确保您的终端节点策略允许对 Amazon S3 进行完全访问,以便这些服务能够继续正常运行。

您的 VPC 和 S3 存储桶之间的流量不会脱离 Amazon 网络。

对 Amazon S3 使用终端节点策略

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

重要

所有类型的策略 - IAM 用户策略、终端节点策略、S3 存储桶策略和 Amazon S3 ACL 策略 (如果有) - 都必须授予必要权限以便成功访问 Amazon S3。

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

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

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::my_secure_bucket",
                   "arn:aws:s3:::my_secure_bucket/*"]
    }
  ]
}		

例 示例:允许对 Amazon Linux AMI 存储库的访问

每个区域中的 Amazon Linux AMI 存储库都是 Amazon S3 存储桶。如果您希望 VPC 中的实例通过终端节点访问该存储库,则可创建终端节点策略以允许对这些存储桶进行访问。

Copy
{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::packages.*.amazonaws.com/*", "arn:aws:s3:::repo.*.amazonaws.com/*" ] } ] }

使用 Amazon S3 存储桶策略

您可以使用存储桶策略来控制从特定终端节点或特定 VPC 对存储桶的访问。

对于通过 VPC 终端节点向 Amazon S3 发出的请求,无法在存储桶策略中使用 aws:SourceIp 条件。此条件未匹配任何指定的 IP 地址或 IP 地址范围,如果您向 Amazon S3 存储桶发出请求,可能不会有预期的效果。例如:

  • 您的存储桶策略具有 Deny 效果和 NotIpAddress 条件,即仅从单个 IP 地址或有限 IP 地址范围获得访问权。对于通过终端节点向存储桶发出的请求,始终匹配 NotIpAddress 条件,并且语句的效果适用 (假定策略中的其他限制匹配)。对存储桶的访问被拒绝。

  • 您的存储桶策略具有 Deny 效果和 IpAddress 条件,即仅拒绝对单个 IP 地址或有限 IP 地址范围的访问。对于通过终端节点向存储桶发出的请求,条件不匹配,并且语句不适用。假定有其他语句允许在无 IpAddress 条件时访问,则允许对存储桶的访问。

请改为调整存储桶策略以限制对特定 VPC 或特定终端节点的访问。

有关 Amazon S3 的存储桶策略的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的使用存储桶策略和用户策略

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

下面是一个仅允许从终端节点 vpce-1a2b3c4d 访问特定存储桶 my_secure_bucket 的 S3 存储桶策略的示例。如果未使用指定的终端节点,则该策略拒绝对存储桶的所有访问。aws:sourceVpce 条件用于指定终端节点。aws:sourceVpce 条件不需要 VPC 终端节点资源的 ARN,而只需要终端节点 ID。

Copy
{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::my_secure_bucket", "arn:aws:s3:::my_secure_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }

例 示例:限制对特定 VPC 的访问

可以使用 aws:sourceVpc 条件来创建用于限制对特定 VPC 的访问的存储桶策略。如果您在同一 VPC 中配置了多个终端节点,并且您希望管理对所有终端节点的 S3 存储桶的访问,这会非常有用。下面是允许 VPC vpc-111bbb22 访问 my_secure_bucket 及其对象的策略的示例。如果未使用指定的 VPC,则该策略拒绝对存储桶的所有访问。aws:sourceVpc 条件不需要 VPC 资源的 ARN,而只需要 VPC ID。

Copy
{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPC-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::my_secure_bucket", "arn:aws:s3:::my_secure_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }