

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

# 设置和使用 SFTP 连接器
<a name="sftp-connectors-tutorial"></a>

连接器的目的是在您的 AWS 存储设备和合作伙伴的 SFTP 服务器之间建立关系。您可以将文件从 Amazon S3 发送到合作伙伴拥有的外部目的地。您也可以使用 SFTP 连接器从合作伙伴的 SFTP 服务器检索文件。

本教程演示了如何使用服务托管和 VPC\_LATTICE 出口类型设置 SFTP 连接器，然后在 Amazon S3 存储和 SFTP 服务器之间传输文件。

SFTP 连接器从中检索 SFTP 凭据 AWS Secrets Manager ，以便对远程 SFTP 服务器进行身份验证并建立连接。连接器向远程服务器发送文件或从远程服务器检索文件，并将文件存储在 Amazon S3 中。您可以在服务托管出口（使用托 AWS 管基础设施）或 VPC 出口（使用 Cross-VPC 资源访问权限通过 VPC 路由）之间进行选择。IAM 角色用于允许访问 Amazon S3 存储桶和存储在 Secrets Manager 中的证书。而且你可以登录到亚马逊 CloudWatch。

![SFTP 连接器如何与 Secrets Manager、Amazon S3、 CloudWatch 日志、IAM 角色和远程 SFTP 服务器交互的架构图。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/sftp-connector-arch-diag.png)


以下博客文章提供了使用 SFTP 连接器构建 MFT 工作流程的参考架构，包括在使用 SFTP 连接器将文件发送到远程 SFTP 服务器之前使用 PGP 加密文件：使用 SFTP 连接器和 PGP [加密架构安全且合规的托管文件传输](https://aws.amazon.com/blogs//storage/architecting-secure-and-compliant-managed-file-transfers-with-aws-transfer-family-sftp-connectors-and-pgp-encryption/)。 AWS Transfer Family 

## 连接器出口类型
<a name="connector-egress-types"></a>

SFTP 连接器支持两种输出类型，它们决定了您的连接器如何将流量路由到远程 SFTP 服务器：
+ **SERVICE\_MAN** AGED（默认）：使用 AWS 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
+ **VPC**：使用 Cross-VPC 资源访问通过您的 VPC 路由流量，启用私有终端节点连接并使用您自己的 NAT 网关。

本教程涵盖了两种出口类型。需要时，选择 VPC 出口类型：
+ 连接到您的 VPC 中的私有 SFTP 服务器（私有 IP 地址）
+ 通过 Direct Connect 或 VPN 连接到本地 SFTP 服务器
+ 通过您的 VPC 路由公有终端节点流量以实现安全控制
+ 使用您自己的弹性 IP 地址进行出站连接

**Topics**
+ [连接器出口类型](#connector-egress-types)
+ [步骤 1：创建必要的支持资源](#create-prereq-resources)
+ [步骤 2：创建和测试 SFTP 连接器](#create-connector-tutorial)
+ [步骤 3：使用 SFTP 连接器发送和检索文件](#use-connector-tutorial)
+ [创建用作远程 SFTP 服务器的 Transfer Family 服务器的步骤](#non-standard-tutorial-procedures)

## 步骤 1：创建必要的支持资源
<a name="create-prereq-resources"></a>

您可以使用 SFTP 连接器在 Amazon S3 和任何远程 SFTP 服务器之间复制文件。在本教程中，我们使用 AWS Transfer Family 服务器作为远程 SFTP 服务器。我们需要创建和配置以下资源：
+ 创建 Amazon S3 存储桶以在您的 AWS 环境中存储文件，以及从远程 SFTP 服务器发送和检索文件：。[创建 Amazon S3 存储桶](#sftp-tutorial-s3-bucket)
+ 在 Secrets Manager 中创建用于访问 Amazon S3 存储空间和我们的密钥的 AWS Identity and Access Management 角色：[创建具有必要权限的 IAM 角色](#sftp-tutorial-role)。
+ 创建使用 SFTP 协议的 Transfer Family 服务器，以及使用 SFTP 连接器在 SFTP 服务器之间传输文件或从 SFTP 服务器传输文件的服务管理用户：。[创建 Transfer Family SFTP 服务器和一个用户](#sftp-tutorial-server)
+ 创建一个 AWS Secrets Manager 密钥来存储 SFTP 连接器用于登录远程 SFTP 服务器的凭据：。[创建密钥并将其存储在 AWS Secrets Manager](#sftp-tutorial-secret)

对于 VPC 出口类型连接器，您还需要：
+ 具有相应子网和安全组的 VPC
+ 资源网关（至少需要 2 个可用区）：[创建资源网关（仅限 VPC 出口类型）](#sftp-tutorial-resource-gateway)。
+ 指向您的 SFTP 服务器的资源配置：[创建资源配置（仅限 VPC 出口类型）](#sftp-tutorial-resource-config)。有关更多信息，请参阅《Amazon VPC Lattice User Guide》**中的 [Resource configurations](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html)。

### 创建 Amazon S3 存储桶
<a name="sftp-tutorial-s3-bucket"></a>

**创建 Amazon S3 存储桶**

1. 登录 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择一个地区并输入名称。

    在本教程中，我们的存储桶位于中**US East (N. Virginia) us-east-1**，名称为**sftp-server-storage-east**。

1. 接受默认值并选择**创建存储桶**。

有关创建 Amazon S3 存储桶的完整详细信息，请参阅[如何创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket-overview.html)？ 在 *Amazon 简单存储服务用户指南*中。

### 创建具有必要权限的 IAM 角色
<a name="sftp-tutorial-role"></a>

对于访问角色，创建具有以下权限的策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Sid": "AllowListingOfUserFolder",
        "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket"
        ]
    },
    {
        "Sid": "HomeDirObjectAccess",
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:GetObjectVersion",
            "s3:GetObjectACL",
            "s3:PutObjectACL"
        ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
    },
    {
        "Sid": "GetConnectorSecretValue",
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetSecretValue"
        ],
        "Resource": "arn:aws:secretsmanager:{{us-west-2}}:{{111122223333}}:secret:aws/transfer/{{SecretName-6RandomCharacters}}"
    }
  ]
}
```

------

按如下方式替换项目：
+ 对于`amzn-s3-demo-bucket`，本教程使用**sftp-server-storage-east**。
+ 对于{{region}}，本教程使用**us-east-1**。
+ 对于{{account-id}}，请使用您的 AWS 账户 身份证。
+ 因为{{SecretName-6RandomCharacters}}，我们**using sftp-connector1**支持这个名字（你将有自己的六个随机字符作为你的秘密）。

您还必须确保此角色包含信任关系，允许连接器在处理用户的转移请求时访问您的资源。有关建立信任关系的详细信息，请参阅 [建立信任关系](requirements-roles.md#establish-trust-transfer)。

**注意**  
要查看我们在本教程中使用的角色的详细信息，请参阅[用户和访问角色的组合](#sftp-tutorial-combined-role)。

### 创建密钥并将其存储在 AWS Secrets Manager
<a name="sftp-tutorial-secret"></a>

我们需要在 Secrets Manager 中存储一个密钥来存储你的 SFTP 连接器的用户凭证。您可以使用密码、SSH 私钥或两者兼而有之。在本教程中，我们使用的是私钥。

**注意**  
当你在 Secret AWS 账户 s Manager 中存储密钥时，会产生费用。有关定价的信息，请参阅[AWS Secrets Manager 定价](https://aws.amazon.com/secrets-manager/pricing)。

在开始存储密钥的过程之前，请检索并格式化您的私钥。私钥必须与在远程 SFTP 服务器上为用户配置的公钥相对应。在本教程中，私钥必须对应于我们用作远程服务器的 Transfer Family SFTP 服务器上为测试用户存储的公钥。

为此，请运行以下命令：

```
jq -sR . {{path-to-private-key-file}}
```

例如，如果您的私钥文件位于中`~/.ssh/sftp-testuser-privatekey`，则命令如下所示。

```
jq -sR . ~/.ssh/sftp-testuser-privatekey
```

这会将正确格式的密钥（带有嵌入的换行符）输出到标准输出。将此文本复制到某个地方，因为您需要将其粘贴到以下步骤中（在步骤 6 中）。

**若要在 Secrets Manager 中存储 SFTP 连接器的用户凭证**

1. 登录 AWS 管理控制台 并打开 AWS Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在左侧导航窗格中，选择**密钥**。

1. 在**密钥**页面，选择**存储新密钥**。

1. 在**选择密钥类型**页面上，对于**密钥类型**，选择**其他类型密钥**。

1. 在**Key/value 配对**部分中，选择**Key/value**选项卡。
   + **密钥**-输入**Username**。
   + **valu** e — 输入我们的用户名**sftp-testuser**。

1. 要输入密钥，我们建议您使用**纯文本选项卡**。

   1. 选择**添加行**，然后输入**PrivateKey**。

   1. 选择**纯文本**选项卡。该字段现在包含以下文本：

      ```
      {"Username":"sftp-testuser","PrivateKey":""}
      ```

   1. 在空双引号 (“”) 之间粘贴私钥文本（之前保存）。

      屏幕应如下所示（关键数据显示为灰色）。  
![以纯文本形式显示的密钥，显示用户名和私钥。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/sftp-tutorial-secret.png)

1. 选择**下一步**。

1. 在**配置密钥**页面上，输入您的密钥的名称。在本教程中，我们命名了秘密**aws/transfer/sftp-connector1**。

1. 选择**下一步**，接受**配置轮换**页面的默认设置。然后选择**下一步**。

1. 在**审核**页面，选择**存储**以创建和存储密钥。

### 创建资源网关（仅限 VPC 出口类型）
<a name="sftp-tutorial-resource-gateway"></a>

对于 VPC 出口类型连接器，您需要在 VPC 中创建资源网关。资源网关是 Cross-VPC 资源访问的入口点。

**创建资源网关**

1. 运行以下命令创建资源网关（将 VPC ID 和子网 ID 替换为您的值）：

   ```
   aws vpc-lattice create-resource-gateway \
       --name my-sftp-resource-gateway \
       --vpc-identifier vpc-12345678 \
       --subnet-ids subnet-12345678 subnet-87654321
   ```
**注意**  
资源网关要求子网位于至少 2 个可用区。

1. 记下响应中的资源网关 ID，以便在下一步中使用。

### 创建资源配置（仅限 VPC 出口类型）
<a name="sftp-tutorial-resource-config"></a>

创建指向您的 SFTP 服务器的资源配置。这可以是您的 VPC 中服务器的私有 IP 地址，也可以是外部服务器的公有 DNS 名称。有关资源配置的更多信息，请参阅 *Amazon VPC Lattice 用户指南*中的[资源配置](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html)。

**创建资源配置**

1. 对于私有 SFTP 服务器，请运行：

   ```
   aws vpc-lattice create-resource-configuration \
       --name my-sftp-resource-config \
       --port-ranges 22 \
       --type SINGLE \
       --resource-gateway-identifier rgw-12345678 \
       --resource-configuration-definition ipResource={ipAddress="10.0.1.100"}
   ```

1. 对于公共 SFTP 服务器（仅限 DNS 名称），请运行：

   ```
   aws vpc-lattice create-resource-configuration \
       --name my-public-sftp-resource-config \
       --port-ranges 22 \
       --type SINGLE \
       --resource-gateway-identifier rgw-12345678 \
       --resource-configuration-definition dnsResource={domainName="sftp.example.com"}
   ```
**注意**  
公共端点必须使用 DNS 名称，而不是 IP 地址。

1. 记下响应中的资源配置 ARN，以便在创建连接器时使用。

## 步骤 2：创建和测试 SFTP 连接器
<a name="create-connector-tutorial"></a>

在本节中，我们将创建一个使用我们之前创建的所有资源的 SFTP 连接器。有关更多详细信息，请参阅[创建 SFTP 连接器](configure-sftp-connector.md)。

**若要创建 SFTP 连接器**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格中，选择 **SFTP 连接器**，然后选择**创建 SFTP** 连接器。

1. 对于 **Egress 类型**，请选择以下选项之一：
   + **服务托管**（默认）：使用 AWS 带有静态 IP 地址的 Transfer Family 托管基础设施进行出站连接。
   + **VPC Lattice**：使用 Cross-VPC 资源访问通过您的 VPC 路由流量。选择此选项进行私有终端节点连接或使用您自己的 NAT 网关。
**重要**  
创建连接器后，您无法更改出口类型。请根据您的连接要求谨慎选择。

1. 在**连接器配置**部分中，提供以下信息：
   + 在 **URL** 中，输入远程 SFTP 服务器的 URL。在本教程中，我们输入用作远程 SFTP 服务器的 Transfer Family 服务器的 URL。

     ```
     sftp://s-{{1111aaaa2222bbbb3}}.server.transfer.us-east-1.amazonaws.com
     ```

     {{1111aaaa2222bbbb3}}替换为您的 Transfer Family 服务器 ID。
   + 对于**访问角色**，请输入我们之前创建的角色**sftp-connector-role**。
   + 对于**资源配置 ARN（仅限** VPC Lattice 出口类型），请输入您之前创建的资源配置的 ARN：

     ```
     arn:aws:vpc-lattice:us-east-1:{{account-id}}:resourceconfiguration/rcfg-{{12345678}}
     ```
   + 对于**日志记录角色**，请选择一个在 Principal 元素`transfer.amazonaws.com`中包含信任策略的角色。

     **提示：**除了将 Transfer Family 添加为可信实体外，您还可以将**AWSTransferLoggingAccess** AWS 托管策略添加到角色中。中详细介绍了该政策[AWSTransferLoggingAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSTransferLoggingAccess.html)。  
![Transfer Family SFTP 连接器控制台，显示连接器配置设置。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/create-connector-example-config.png)

1. 在 **SFTP 配置**面板中提供以下信息：
   + 对于**连接器凭据**，请选择包含 SFTP 凭据的 Secrets Manager 资源的名称。在本教程中，选择**aws/transfer/sftp-connector1**。
   + 对于**受信任的主机密钥**，请粘贴主机密钥的公共部分。您可以通过`ssh-keyscan`为 SFTP 服务器运行来检索此密钥。有关如何格式化和存储可信主机密钥的详细信息，请参阅[https://docs.aws.amazon.com//transfer/latest/APIReference/API_SftpConnectorConfig.html](https://docs.aws.amazon.com//transfer/latest/APIReference/API_SftpConnectorConfig.html)数据类型文档。
   + 在 “**最大并发连接**数” 中，选择 1 到 5 之间的整数值：默认值为 5。  
![Transfer Family SFTP 连接器控制台，显示了 SFTP 配置设置。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/create-connector-example-sftp-config.png)

1. 确认所有设置后，选择**创建连接器**以创建 SFTP 连接器。

您也可以使用创建连接器 AWS Command Line Interface。
+ 要创建具有服务管理出口的 SFTP 连接器，请运行以下命令：

  ```
  aws transfer create-connector \
      --url "sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com" \
      --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \
      --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..."
  ```
+ 要创建带 VPC-based 出口的 SFTP 连接器，请运行以下命令：

  ```
  aws transfer create-connector \
     --url "sftp://my.sftp.server.com:22" \
     --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \
     --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..." \
     --egress-config VpcLattice={ResourceConfigurationArn="arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678",PortNumber=22}
  ```

创建 SFTP 连接器后，我们建议您在尝试使用新连接器传输任何文件之前对其进行测试。

**注意**  
对于 VPC 出口类型连接器，DNS 解析在创建后可能需要几分钟时间。在此期间，连接器状态将为，`PENDING``TestConnection`并将返回 “连接器不可用”。等待状态变为`ACTIVE`后再尝试文件传输。

------
#### [ Test a connector using the console ]

**若要测试 SFTP 连接器**

1. 打开 AWS Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

1. 在左侧导航窗格中，选择 **SFTP 连接器**，然后选择一个连接器。

1. 从**操作**菜单中选择**测试连接**。  
![Transfer Family 控制台显示了选定的 SFTP 连接器，并突出显示了“测试连接”操作。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/connector-test-choose.png)

系统会返回一条消息，指示测试是通过还是失败。如果测试失败，系统会根据测试失败的原因提供错误消息。

![SFTP 连接器测试连接面板，显示测试成功。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/connector-test-success.png)


![SFTP 连接器测试连接面板显示测试失败：错误消息表明连接器的访问角色不正确。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/connector-test-fail-role.png)


------
#### [ Test a connector using the CLI ]

要使用测试连接器 AWS Command Line Interface，请在命令提示符下运行以下命令（{{connector-id}}替换为实际的连接器 ID）：

```
aws transfer test-connection --connector-id c-{{connector-id}}
```

如果测试成功，则返回以下几行：

```
{
   "Status": "OK",
   "StatusMessage": "Connection succeeded"
}
```

如果测试失败，您会收到一条描述性错误消息，例如：

```
{
   "Status": "ERROR",
   "StatusMessage": "Unable to assume the configured access role"
}
```

------

当您描述 VPC 出口类型连接器时，响应将包含新字段：

```
{
   "Connector": { 
      "AccessRole": "arn:aws:iam::219573224423:role/sftp-connector-role",
      "Arn": "arn:aws:transfer:us-east-1:219573224423:connector/c-5dfa309ccabf40759",
      "ConnectorId": "c-5dfa309ccabf40759",
      "Status": "ACTIVE",
      "EgressConfig": {
        "ResourceConfigurationArn": "arn:aws:vpc-lattice:us-east-1:025066256552:resourceconfiguration/rcfg-079259b27a357a190"
      },
      "EgressType": "VPC",
      "ServiceManagedEgressIpAddresses": null,
      "SftpConfig": { 
         "TrustedHostKeys": [ "ssh-rsa AAAAB3NzaC..." ],
         "UserSecretId": "aws/transfer/sftp-connector1"
      },
      "Url": "sftp://my.sftp.server.com:22"
   }
}
```

请注意，`ServiceManagedEgressIpAddresses`对于 VPC 出口类型连接器，该值为空，因为流量通过您的 VPC 而不是 AWS 托管基础设施路由。

## 步骤 3：使用 SFTP 连接器发送和检索文件
<a name="use-connector-tutorial"></a>

为简单起见，我们假设您的 Amazon S3 存储桶中已经有文件。

**注意**  
本教程使用了 Amazon S3 存储桶作为源存储位置和目标存储位置。如果您的 SFTP 服务器不使用 Amazon S3 存储，那么无论您在以下命令`sftp-server-storage-east`中看到的任何地方，都可以将路径替换为可从 SFTP 服务器访问的文件位置的路径。
+ 我们将名为 Amazon S3 存储的文件发送`SEND-to-SERVER.txt`到 SFTP 服务器。
+ 我们将名为的文件`RETRIEVE-to-S3.txt`从 SFTP 服务器检索到 Amazon S3 存储空间。

**注意**  
在以下命令中，{{connector-id}}替换为您的连接器 ID。

首先，我们将文件从 Amazon S3 存储桶发送到远程 SFTP 服务器。在命令提示符下，运行以下命令：

```
aws transfer start-file-transfer --connector-id c-{{connector-id}} --send-file-paths "/sftp-server-storage-east/SEND-to-SERVER.txt" /
   --remote-directory-path "/sftp-server-storage-east/incoming"
```

你的`sftp-server-storage-east`存储桶现在应该是这样的。

![包含新传输文件的 SFTP 服务器存储桶。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/sftp-tutorial-bucket-2.png)


如果您没有按预期看到该文件，请检查您的 CloudWatch 日志。

**查看您的 CloudWatch 日志**

1. 打开 Amazon CloudWatch 控制台，网址为 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. 从左侧导航菜单中选择 “**日志组**”。

1. 在搜索栏中输入您的连接器 ID 以查找您的日志。

1. 选择从搜索中返回的日志流。

1. 展开最新的日志条目。

如果成功，则日志条目如下所示：

```
{
    "operation": "SEND",
    "timestamp": "2023-12-18T15:26:57.346283Z",
    "connector-id": "{{connector-id}}",
    "transfer-id": "{{transfer-id}}",
    "file-transfer-id": "{{transfer-id}}/{{file-transfer-id}}",
    "url": "sftp://{{server-id}}.server.transfer.us-east-1.amazonaws.com",
    "file-path": "/sftp-server-storage-east/SEND-to-SERVER.txt",
    "status-code": "COMPLETED",
    "start-time": "2023-12-18T15:26:56.915864Z",
    "end-time": "2023-12-18T15:26:57.298122Z",
    "account-id": "{{account-id}}",
    "connector-arn": "arn:aws:transfer:us-east-1:{{account-id}}:connector/{{connector-id}}",
    "remote-directory-path": "/sftp-server-storage-east/incoming"
}
```

如果文件传输失败，则日志条目将包含一条指明问题的错误消息。常见的错误原因是 IAM 权限问题和文件路径不正确。

接下来，我们将文件从 SFTP 服务器检索到 Amazon S3 存储桶中。在命令提示符下，运行以下命令：

```
aws transfer start-file-transfer --connector-id c-{{connector-id}} --retrieve-file-paths "/sftp-server-storage-east/RETRIEVE-to-S3.txt" --local-directory-path "/sftp-server-storage-east/incoming"
```

如果传输成功，则您的 Amazon S3 存储桶将包含传输的文件，如下所示。

![包含新传输文件的 Amazon S3 存储桶。](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/sftp-tutorial-bucket-1.png)


如果成功，则日志条目如下所示：

```
{
    "operation": "RETRIEVE",
    "timestamp": "2023-12-18T15:36:40.017800Z",
    "connector-id": "c-{{connector-id}}",
    "transfer-id": "{{transfer-id}}",
    "file-transfer-id": "{{transfer-id}}/{{file-transfer-id}}",
    "url": "sftp://s-{{server-id}}.server.transfer.us-east-1.amazonaws.com",
    "file-path": "/sftp-server-storage-east/RETRIEVE-to-S3.txt",
    "status-code": "COMPLETED",
    "start-time": "2023-12-18T15:36:39.727626Z",
    "end-time": "2023-12-18T15:36:39.895726Z",
    "account-id": "{{account-id}}",
    "connector-arn": "arn:aws:transfer:us-east-1:{{account-id}}:connector/c-{{connector-id}}",
    "local-directory-path": "/sftp-server-storage-east/incoming"
}
```

### VPC 出口类型连接器故障排除
<a name="vpc-connector-troubleshooting"></a>

如果您在使用 VPC 出口类型连接器时遇到问题，请检查以下内容：
+ **连接器状态为 “待处理**”：VPC 连接器的 DNS 解析可能需要几分钟时间。等待状态变为 “活动” 后再尝试连接。
+ **连接超时**：验证安全组是否允许您的资源网关子网和目标 SFTP 服务器之间的端口 22 上的流量。
+ **资源配置错误**：确保您的资源配置指向正确的 IP 地址或 DNS 名称，并且资源网关与您的 SFTP 服务器（用于私有终端节点）位于同一个 VPC 中。有关更多信息，请参阅《Amazon VPC Lattice User Guide》**中的 [Resource configurations](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html)。
+ **公共终端节点问题**：对于公共终端节点，请确保在资源配置中使用的是 DNS 名称，而不是 IP 地址。确认您的 VPC 具有用于出站互联网访问的 NAT 网关。
+ **可用区可用性**：资源网关要求子网位于至少 2 个可用区。并非所有可用区都支持 VPC Lattice，请查看您所在地区支持的可用区。

**VPC 出口类型的成本注意事项：**
+ VPC Lattice 收费 0 美元。 006/GB 作为资源提供者进行数据处理（由 VPC Lattice 直接计费）
+ AWS Transfer Family 吸收了 0 美元。 01/GB 资源使用者成本（前 1 PB）
+ 对于通过 VPC 的公共终端节点，可能会收取额外的 NAT 网关和数据传输费用
+ 除了标准的 0 美元之外，Transfer Family 不会收取额外的费用。 40/GB 数据处理费

## 创建用作远程 SFTP 服务器的 Transfer Family 服务器的步骤
<a name="non-standard-tutorial-procedures"></a>

接下来，我们将概述创建用作本教程远程 SFTP 服务器的 Transfer Family 服务器的步骤。注意以下几点：
+ 我们使用 Transfer Family 服务器来表示远程 SFTP 服务器。典型的 SFTP 连接器用户都有自己的远程 SFTP 服务器。请参阅[创建 Transfer Family SFTP 服务器和一个用户](#sftp-tutorial-server)。
+ 因为我们使用的是 Transfer Family 服务器，所以我们也使用的是服务管理的 SFTP 用户。而且，为简单起见，我们将该用户访问 Transfer Family 服务器所需的权限与他们使用连接器所需的权限相结合。同样，大多数 SFTP 连接器用例都有单独的 SFTP 用户，该用户与 Transfer Family 服务器无关。请参阅[创建 Transfer Family SFTP 服务器和一个用户](#sftp-tutorial-server)。
+ 在本教程中，由于我们在远程 SFTP 服务器上使用 Amazon S3 存储，因此我们需要创建第二个存储桶**sftp-server-storage-east**，以便我们可以将文件从一个存储桶传输到另一个存储桶。

### 创建 Transfer Family SFTP 服务器和一个用户
<a name="sftp-tutorial-server"></a>

大多数用户不需要创建 Transfer Family SFTP 服务器和用户，因为您已经有一台包含用户的 SFTP 服务器，并且您可以使用此服务器来往传输文件。但是，在本教程中，为了简单起见，我们使用了 Transfer Family 服务器来充当远程 SFTP 服务器。

按照中所述[创建 SFTP-enabled 服务器](create-server-sftp.md)的步骤创建服务器和[步骤 3：添加服务托管用户](getting-started.md#getting-started-user)添加用户。以下是我们在本教程中使用的用户详细信息：
+ 创建您的服务管理用户，`sftp-testuser`。
  + 将主目录设置为 `/sftp-server-storage-east/sftp-testuser`
  + 创建用户时，即存储公钥。稍后，当你在 Secrets Manager 中创建密钥时，你需要提供相应的私钥。
+ 角色：`sftp-connector-role`。在本教程中，我们对 SFTP 用户和访问 SFTP 连接器使用相同的 IAM 角色。在为组织创建连接器时，您可能有不同的用户和访问角色。
+ 服务器主机密钥：创建连接器时需要使用服务器主机密钥。您可以通过`ssh-keyscan`为服务器运行来检索此密钥。例如，如果您的服务器 ID 为`s-1111aaaa2222bbbb3`，且其端点位于中`us-east-1`，则以下命令将检索服务器主机密钥：

  ```
  ssh-keyscan s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com
  ```

  将此文本复制到某个地方，因为您需要将其粘贴到[步骤 2：创建和测试 SFTP 连接器](#create-connector-tutorial)程序中。

### 用户和访问角色的组合
<a name="sftp-tutorial-combined-role"></a>

在本教程中，我们使用的是单一的组合角色。我们既对 SFTP 用户使用此角色，也用于访问连接器。以下示例包含此角色的详细信息，以备您要执行本教程中的任务时使用。

以下示例授予访问我们在 Amazon S3 中的两个存储桶以及存储在 Secrets Manager 中的名为`aws/transfer/sftp-connector1`的密钥所需的权限。在本教程中，这个角色被命名为`sftp-connector-role`。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListingOfUserFolder",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::sftp-server-storage-east",
                "arn:aws:s3:::sftp-server-storage-east"
            ]
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObjectVersion",
                "s3:GetObjectACL",
                "s3:PutObjectACL"
            ],
            "Resource": [
                "arn:aws:s3:::sftp-server-storage-east/*",
                "arn:aws:s3:::sftp-server-storage-east/*"
            ]
        },
        {
            "Sid": "GetConnectorSecretValue",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:{{111122223333}}:secret:aws/transfer/sftp-connector1-{{6RandomCharacters}}"
        }
    ]
}
```

有关为 Transfer Family 创建角色的完整详细信息，请按照中的[创建用户角色](requirements-roles.md#role-create-procedure)步骤创建角色。