问题排查 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

问题排查

本节介绍使用时可能出现的一些常见问题Amazon Transfer Family以及如何解决这些问题。

对服务管理的用户进行故障排除

本节介绍了以下问题的可能解决方案

解决 Amazon EFS 服务托管用户的问题

描述

您运行sftp命令后提示符不出现,而是会看到以下消息:

Couldn't canonicalize: Permission denied Need cwd

原因

您的Amazon Identity and Access Management (IAM) 用户的角色没有访问Amazon Elastic File System EFS的权限。

解决方案

增加用户角色的策略权限。您可以添加Amazon托管策略,例如AmazonElasticFileSystemClientFullAccess

对公钥正文进行故障排除时间过长

描述

您在尝试创建服务管理用户时收到以下错误:

Failed to create user (1 validation error detected: 'sshPublicKeyBody' failed to satisfy constraint: Member must have length less than or equal to 2048)

原因

您可能正在为公钥正文输入 PGP 密钥,但Amazon Transfer Family不支持服务管理用户的 PGP 密钥。

解决方案

如果 PGP 密钥基于 RSA,则可以将其转换为 PEM 格式。例如,Ubuntu 在这里提供了一个转换工具:https://manpages.ubuntu.com/manpages/xenial/man1/openpgp2ssh.1.html

解决Amazon API Gateway 问题

本节介绍以下问题的可能解决方案:

身份验证失败次数太多

描述

当你尝试使用安全外壳 (SSH) 文件传输协议 (SFTP) 连接到服务器时,会出现以下错误:

Received disconnect from 3.15.127.197 port 22:2: Too many authentication failures Authentication failed. Couldn't read packet: Connection reset by peer

原因

您为用户输入的密码可能不正确。再试一次输入正确的密码。

如果密码正确,则问题可能是由无效的亚马逊资源名称 (ARN) 角色引起的。要确认这是问题所在,请测试服务器的身份提供商。如果您看到类似于以下内容的响应,则角色 ARN 仅是占位符,由全零的角色 ID 值表示:

{ "Response": "{\"Role\": \"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\": \"/\"}", "StatusCode": 200, "Message": "", "Url": "https://api-gateway-ID.execute-api.us-east-1.amazonaws.com/prod/servers/transfer-server-ID/users/myuser/config" }

解决方案

将占位角色 ARN 替换为有权访问服务器的实际角色。

更新角色
  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 在左侧导航窗格中,选择 Stacks (堆栈)

  3. 堆栈列表中,选择您的堆栈,然后选择参数选项卡。

  4. 选择 Update(更新)。在 “更新堆栈” 页面上,选择 “使用当前模板”,然后选择 “下一步”。

  5. 替换为UserRoleArn具有足够权限访问您的 Transfer Family 服务器的角色 ARN。

    注意

    要授予必要的权限,您也可以将AmazonAPIGatewayAdministratorAmazonS3FullAccess托管策略添加到您的角色中。

  6. 选择 “下一步”,然后再次选择 “下一步”。在 “查看堆栈” 页面上,选择 “我确认Amazon CloudFormation可能创建 IAM 资源”,然后选择 “更新堆栈”。

连接已关闭

描述

当你尝试使用安全外壳 (SSH) 文件传输协议 (SFTP) 连接到服务器时,会出现以下错误:

Connection closed

原因

此问题的一个可能原因是您的亚马逊 CloudWatch 日志记录角色与 Transfer Family 没有信任关系。

解决方案

确保服务器的日志角色与 Transfer Family 具有信任关系。有关更多信息,请参阅建立信任关系

对加密 Amazon S3 存储桶的策略进行故障

描述

您有一个加密的 Amazon S3 存储桶,用作 Transfer Family 服务器的存储空间。如果您尝试将文件上传到服务器,则会收到错误Couldn't close file: Permission denied

而且,如果您查看服务器日志,则会看到以下错误:

ERROR Message="Access denied" Operation=CLOSE Path=/bucket/user/test.txt BytesIn=13 ERROR Message="Access denied"

原因

您的 IAM 用户的策略没有访问加密存储桶的权限。

解决方案

您必须在策略中指定其他权限才能授予所需的Amazon Key Management Service (Amazon KMS) 权限。有关详细信息,请参阅数据加密

排查身份验证问题

本节介绍以下问题的可能解决方案:

身份验证失败 — SSH/sftp

描述

当您尝试使用安全外壳 (SSH) 文件传输协议 (SFTP) 连接到服务器时,您会收到一条类似于以下内容的消息:

Received disconnect from 3.130.115.105 port 22:2: Too many authentication failures Authentication failed.
注意

如果您使用的是 API Gateway 并收到此错误,请参阅身份验证失败次数太多

原因

您尚未为用户添加 RSA key pair,因此必须改用密码进行身份验证。

解决方案

运行sftp命令时,请指定-o PubkeyAuthentication=no选项。此选项强制系统请求您的密码。例如:

sftp -o PubkeyAuthentication=no sftp-user@server-id.server.transfer.region-id.amazonaws.com

其他身份验证问题

原因

如果您收到身份验证错误而其他故障排除方法均无效,则您可能已为包含前导或结尾斜杠 (/) 的逻辑目录指定了目标。

解决方案

更新您的逻辑目录目标,确保它以斜杠开头,并且不包含末尾的斜杠。例如,可以接受/DOC-EXAMPLE-BUCKET/images,而DOC-EXAMPLE-BUCKET/images/DOC-EXAMPLE-BUCKET/images/不可接受。

使用 Amazon 解决与工作流程相关的错误 CloudWatch

描述

如果您的工作流程有问题,可以使用 Amazon CloudWatch 调查原因。

原因

可能有多种原因。使用亚马逊 CloudWatch 日志进行调查。

解决方案

Transfer Family 将工作流程执行状态发送到 CloudWatch 日志中。 CloudWatch 日志中可能会出现以下类型的工作流错误:

  • "type": "StepErrored"

  • "type": "ExecutionErrored"

  • "type": "ExecutionThrottled"

  • "Service failure on starting workflow"

您可以使用不同的过滤器和模式语法筛选工作流程的执行日志。例如,您可以在日志中创建日志筛选器来捕获包含该ExecutionErrored消息的工作流程执行日志。 CloudWatch 有关详细信息,请参阅 Amazon Log CloudWatch s 用户指南中的使用订阅和过滤器和模式语法实时处理日志数据

StepErrored

2021-10-29T12:57:26.272-05:00 {"type":"StepErrored","details":{"errorType":"BAD_REQUEST","errorMessage":"Cannot tag Efs file","stepType":"TAG","stepName":"successful_tag_step"}, "workflowId":"w-abcdef01234567890","executionId":"1234abcd-56ef-78gh-90ij-1234klmno567", "transferDetails":{"serverId":"s-1234567890abcdef0","username":"lhr","sessionId":"1234567890abcdef0"}

此处StepErrored表示工作流程中的某个步骤已生成错误。在单个工作流程中,您可以配置多个步骤。此错误告诉您错误发生在哪个步骤中,并提供错误消息。在此特定示例中,该步骤被配置为标记文件;但是,不支持在 Amazon EFS 文件系统中标记文件,因此该步骤生成了一个错误。

ExecutionErrored

2021-10-29T12:57:26.618-05:00 {"type":"ExecutionErrored","details":{},"workflowId":"w-w-abcdef01234567890", "executionId":"1234abcd-56ef-78gh-90ij-1234klmno567","transferDetails":{"serverId":"s-1234567890abcdef0", "username":"lhr","sessionId":"1234567890abcdef0"}}

当工作流无法执行任何步骤时,它会生成一条ExecutionErrored消息。例如,如果您在给定工作流中配置了单个步骤,并且该步骤无法执行,则整个工作流程将失败。

执行受到限制

如果工作流程的触发速度超过系统所能支持的速度,则执行会受到限制。此日志消息表明您必须降低工作流程的执行速度。如果您无法降低工作流程执行率,请通过 ConAmazon Web Services Support tact 联系Amazon

启动工作流程时服务失败

如果从服务器上移除工作流并将其替换为新的工作流,则必须等待大约 10 分钟才能执行新工作流。Transfer Family 服务器缓存工作流详细信息,服务器刷新其缓存需要 10 分钟。

解决工作流程复制错误

描述

如果您正在执行的工作流程包含复制上传文件的步骤,则可能会遇到以下错误:

{ "type": "StepErrored", "details": { "errorType": "BAD_REQUEST", "errorMessage": "Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: request-ID; S3 Extended Request ID: request-ID Proxy: null)", "stepType": "COPY", "stepName": "copy-step-name" }, "workflowId": "workflow-ID", "executionId": "execution-ID", "transferDetails": { "serverId": "server-ID", "username": "user-name", "sessionId": "session-ID" } }

原因

源文件位于与目标存储桶不同Amazon Web Services 区域的 Amazon S3 存储桶中。

解决方案

如果您正在执行包含复制步骤的工作流程,请确保源存储桶和目标存储桶位于同一位置Amazon Web Services 区域。

解决丢失的 POSIX 配置文件问题

描述

如果您在服务器上使用 Amazon EFS 存储,并且使用自定义身份提供商,则必须为您的Amazon Lambda函数提供 POSIX 配置文件。

原因

一个可能的原因是,我们为创建Amazon Lambda支持的 Amazon API Gateway 方法而提供的模板目前不包含 POSIX 信息。

如果您确实提供了 POSIX 信息,则 Transfer Family 可能无法正确解析您用于提供 POSIX 信息的格式。

解决方案

确保为PosixProfile参数提供 JSON 元素给 Transfer Family。

例如,如果您使用的是 Python,则可以在解析PosixProfile参数时添加以下行:

if PosixProfile: response_data["PosixProfile"] = json.loads(PosixProfile)

或者 JavaScript,在中,您可以添加以下行,其中uid-valuegid-value是整数,0 或更大,分别表示用户 ID (UID) 和组 ID (GID):

PosixProfile: {"Uid": uid-value, "Gid": gid-value},

这些代码示例将PosixProfile参数作为 JSON 对象而不是字符串发送到 Transfer Family。

此外,在内部Amazon Secrets Manager,必须按如下方式存储PosixProfile参数。将your-uidyour-gid替换为 GID 和 UID 的实际值。

{"Uid": your-uid, "Gid": your-gid, "SecondaryGids": []}

排除测试身份提供商的故障

描述

如果您使用控制台或TestIdentityProvider API 调用测试身份提供商,则返回的消息为空。

原因

最可能的原因是用户名或密码不正确导致身份验证失败。

解决方案

确保为用户使用正确的凭据,并在必要时更新用户名或密码。

解决文件上传问题

本节介绍以下问题的可能解决方案:

解决 Amazon S3 文件上传错误

描述

当您尝试使用 Transfer Family 将文件上传到 Amazon S3 存储时,您会收到以下错误消息:Amazon传输不支持对 S3 对象进行随机访问写入。

原因

当您使用 Amazon S3 作为服务器存储时,Transfer Family 不支持单次传输的多个连接。

解决方案

如果您的 Transfer Family 服务器使用 Amazon S3 进行存储,请禁用客户端软件中任何提及使用多个连接进行单次传输的选项。

排查无法读取的文件名称

描述

您在上传的某些文件中看到文件名已损坏。用户有时会遇到 FTP 和 SFTP 传输问题,这些问题会导致文件名中的某些字符出现乱码,例如变音符号、重音字母或某些脚本,例如中文或阿拉伯语。

原因

尽管 FTP 和 SFTP 协议允许客户端协商文件名的字符编码,但 Amazon S3 和 Amazon EFS 不允许。相反,它们需要 UTF-8 字符编码。因此,某些字符无法正确呈现。

解决方案

要解决此问题,请检查您的客户端应用程序中的文件名字符编码,并确保将其设置为 UTF-8。

解决 AS2 问题

此处描述了启用适用性声明 2 (AS2) 的服务器的错误消息和故障排除提示:AS2 错误代码.