

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

# 在 VPC 中创建 Transfer Family 网络应用程序
<a name="create-webapp-in-vpc"></a>

本节介绍在 VPC 中创建 Transfer Family 网络应用程序的过程。您可以将 Web 应用程序的终端节点托管在虚拟私有云 (VPC) 中，用于向 Amazon S3 存储桶传输数据和从中传输数据，而无需通过公共互联网。要分配可以使用您的 Web 应用程序的用户和群组，请参阅[在 Transfer Family 网络应用中分配或添加用户或群组](webapp-add-users.md)。

**注意**  
为了确保在使用 Transfer Family 网络应用程序 VPC 终端节点时的私密 end-to-end数据流，您必须实现三个额外的组件。首先，为 Amazon S3 控制 API 操作设置 PrivateLink 终端节点，这是调用 Amazon S3 访问授权 API 所必需的。其次，使用 Amazon S3 网关终端节点（用于来自您的 VPC 内部的流量）或 PrivateLink Amazon S3 接口终端节点（用于通过 VPN 或 Direct Connect 来自本地网络的流量）为访问 Amazon S3 数据配置终端节点。第三，将存储桶策略更新为仅允许来自这些 VPC 终端节点的流量，从而锁定您的 Amazon S3 存储桶访问权限。这种组合可确保所有数据传输都保留在您的专用网络基础设施中，并且永远不会通过公共互联网。

## 创建 Transfer Family 网络应用程序
<a name="webapp-vpce-create"></a>

**先决条件**
+ Amazon IAM Identity Center 使用已配置的身份提供商进行设置。请参阅[为 Transfer Family 网络应用程序配置您的身份提供商](webapp-identity-center.md)。
+ VPC 和网络组件已设置。请参阅[创建 VPC](https://docs.amazonaws.cn/vpc/latest/userguide/create-vpc.html#create-vpc-and-other-resources)。
+ 为 Amazon S3 控制操作设置的 API 终端节点。请参阅[访问 Amazon S3 接口终端节点](https://docs.amazonaws.cn/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#s3-creating-vpc)。
+ 为 Amazon S3（网关或接口）设置的 VPC 终端节点。请参阅 [Amazon S3 的 VPC 终端节点类型](https://docs.amazonaws.cn/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#types-of-vpc-endpoints-for-s3)。如果您使用的是接口终端节点，则必须启用私有 DNS。有关示例，请参阅[引入对 Amazon S3 的私有 DNS 支持 Amazon PrivateLink](https://www.amazonaws.cn/blogs/storage/introducing-private-dns-support-for-amazon-s3-with-aws-privatelink/)。

**注意**  
Amazon IAM Identity Center 不支持 VPC 终端节点；所有身份验证请求都通过公共互联网传输。此外，Transfer Family 网络应用程序需要互联网访问才能加载静态内容（例如 JavaScript CSS 和 HTML 文件）。公共互联网访问的要求与数据访问是分开的。您的 VPC 终端节点可确保连接通过您的 VPC 基础设施进行路由。

**创建 Transfer Family 网络应用程序**

1. 登录 Amazon Web Services 管理控制台 并打开 Amazon Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.amazonaws.cn/transfer/)。

1. 在左侧导航窗格中，选择 **Web 应用程序**。

1. 选择**创建 Web 应用程序**。对于身份验证访问，窗格填充如下。
   + 如果您已经在中创建了组织或账户实例 Amazon IAM Identity Center，则会看到以下消息：**您的 Amazon Transfer Family 应用程序已连接到 IAM Identity Center 的账户实例**。
   + 如果您已经拥有账户实例并且是组织实例的成员，则可以选择连接哪个实例。
   + 如果您还没有账户实例，或者您是组织实例的成员，则可以选择创建账户实例。

1. 在**终端节点配置**部分，选择您的用户访问您的 Web 应用程序的方式：
   + **可公开访问**：您可以通过 HTTPS 通过公众访问您的 Web 应用程序终端节点。此选项不需要任何 VPC 配置，因此设置起来很简单，适用于供广泛公众使用的应用程序。
   + **VPC 托管**：您的网络应用程序终端节点托管在您的虚拟私有云 (VPC) 中，通过您的 VPC 网络或 VPN 连接提供私有网络 Amazon Direct Connect访问权限。此选项通过网络隔离增强了安全性，建议用于内部应用程序。
**注意**  
您必须具有双堆栈 VPC 配置。有关更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南*中的[双栈 VPC 配置示例](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-migrate-ipv6-example.html)。

     配置 VPC 托管终端节点时，您需要指定：
     + **VPC**：选择一个现有 VPC 或创建一个新的 VPC。“创**建 VPC**” 按钮可用。
     + **可用区**：选择要部署终端节点的可用区。
     + **子网**：在每个选定的可用区内选择子网。
     + **安全组**：选择或创建安全组以根据源 IP 地址控制访问权限。如果未指定，则使用 VPC 的默认安全组。通过 VPC 控制台管理安全组。将您的 VPC 安全组配置为允许通过 TCP 端口 443 通过 HTTPS 从您的网络发送的入站流量。这是 IAM 身份中心身份验证和加载 Web 应用程序静态内容所必需的。
**注意**  
无法为 VPC 终端节点自定义访问终端节点。要添加自定义 URL，请使用公共端点。

## 创建后步骤
<a name="webapp-vpce-post-creation"></a>
+ 请务必为从 Web 应用程序终端节点访问的所有存储分区设置跨源资源共享 (CORS) 策略。请参阅[跨源资源共享 (CORS) 政策](#webapp-vpce-cors)。
+ 更新您的存储桶策略，仅允许来自您的 VPC 的流量通过您的 VPC 终端节点。请参阅[限制对特定 VPC 端点的访问](#webapp-vpce-bucket-policy)。
+ 向 Transfer Family 网络应用程序分配或添加用户或群组。请参阅[在 Transfer Family 网络应用中分配或添加用户或群组](webapp-add-users.md)。

## 跨源资源共享 (CORS) 政策
<a name="webapp-vpce-cors"></a>

您必须为 Web 应用程序使用的所有存储分区设置跨源资源共享 (CORS)。有关 CORS 的更多信息，请参阅 [为您的存储桶设置跨源资源共享 (CORS)](access-grant-cors.md)。

**重要**  
在使用以下示例策略之前，请将 Allowed Origin 替换为您的访问终端节点。否则，当您的最终用户尝试访问您的 Web 应用程序上的某个位置时，他们将收到错误消息。

**策略示例：**

```
[
  {
    "AllowedHeaders": [
      "*"
    ],
    "AllowedMethods": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "AllowedOrigins": [
      "https://vpce-1234567-example.vpce-mq.transfer-webapp.us-east-1.on.aws"
    ],
    "ExposeHeaders": [
      "last-modified",
      "content-length",
      "etag",
      "x-amz-version-id",
      "content-type",
      "x-amz-request-id",
      "x-amz-id-2",
      "date",
      "x-amz-cf-id",
      "x-amz-storage-class",
      "access-control-expose-headers"
    ],
    "MaxAgeSeconds": 3000
  }
]
```

## 限制对特定 VPC 端点的访问
<a name="webapp-vpce-bucket-policy"></a>

下面是限制仅从 ID 为 `amzn-s3-demo-bucket` 的 VPC 端点访问特定存储桶 `vpce-1a2b3c4d` 的 Amazon S3 存储桶策略示例。如果未使用指定的端点，则该策略会拒绝对存储桶的所有访问。`aws:SourceVpce` 条件指定端点。`aws:SourceVpce` 条件不需要 VPC 端点资源的 ARN，而只需要 VPC 端点 ID。有关更新存储桶策略以仅允许来自您的 VPC 的流量的更多信息，请参阅使用[存储桶策略控制来自 VPC 终端节点的访问](https://docs.amazonaws.cn/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)。有关在策略中使用条件的更多信息，请参阅[使用条件键的存储桶策略示例](https://docs.amazonaws.cn/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)。作为应用此策略的先决条件，您应该创建一个 [Amazon S3 VPC 终端节点](https://docs.amazonaws.cn/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)。

**重要**  
在使用以下示例策略之前，将 VPC 端点 ID 替换为适合您的使用案例的值。否则，您将无法访问您的存储桶。

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