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

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

故障排除 Amazon Transfer Family

使用以下信息来帮助您诊断和修复在处理时可能遇到的常见问题 Amazon Transfer Family。

有关 Transfer Family 中的 IAM 问题,请参阅对 Amazon Transfer Family 身份和访问进行故障排除

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

本部分介绍了以下问题的可能解决方案。

对 Amazon EFS 服务托管用户进行故障排除

描述

运行sftp命令时,但提示符未出现,而是会看到以下消息:

Couldn't canonicalize: Permission denied Need cwd

原因

您的 Amazon Identity and Access Management (IAM) 用户的角色无权访问亚马逊 Elastic File System (Amazon 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

对添加 SSH 公有密钥失败进行故障排除

描述

您在尝试为服务托管用户添加公有密钥时收到以下错误:

Failed to add SSH public key (Unsupported or invalid SSH public key format)

原因

您可能正在尝试导入 SSH2 格式的公钥,但服务托管用户 Amazon Transfer Family 不支持 SSH2 格式的公钥。

解决方案

您需要将密钥转换为 OpenSSH 格式。将 SSH2 公钥转换至 PEM 格式 中介绍了此过程。

对 Amazon API Gateway 问题进行故障排除

本节介绍以下 API Gateway 问题的可能解决方案。

身份验证失败次数过多

描述

当您尝试使用 Secure Shell (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

原因

您可能输入了错误的用户密码。请重试输入正确的密码。

如果密码正确,则问题可能是由角色 Amazon 资源名称 (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. 选择更新。在更新堆栈页面上,选择使用当前模板,然后选择下一步

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

    注意

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

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

连接关闭

描述

当您尝试使用 Secure Shell (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) 权限。有关更多信息,请参阅 Amazon S3 中的数据加密

对身份认证问题进行故障排除

本节介绍以下身份验证问题的可能解决方案。

身份验证失败 — SSH/SFTP

描述

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

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

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

原因

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

解决方案

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

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

托管 AD 领域不匹配问题

描述

用户的领域和他们的组领域必须匹配。它们必须都在默认领域中,或者它们都必须位于可信领域。

原因

如果用户及其组不匹配,则无法通过 Transfer Family 对该用户进行身份验证。如果您测试用户的身份提供商,则会收到错误找不到用户组的关联访问权限

解决方案

引用用户领域中与组领域(默认或可信)相匹配的组。

其他身份验证问题

描述

您收到身份验证错误,但其他故障排除均无效

原因

您可能已经为包含前导或尾部斜杠 (/) 的逻辑目录指定了目标。

解决方案

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

对托管工作流程问题进行故障排除

本节介绍以下工作流程问题的可能解决方案。

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

描述

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

原因

可能有多种原因。使用 Amazon 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消息。例如,如果您在给定工作流程中配置了单个步骤,并且该步骤无法执行,则整个工作流程将失败。

Executionthrottled

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

启动工作流程时服务失败

无论何时从服务器上移除工作流程并用新的工作流程替换它,或者更新服务器配置(这会影响工作流程的执行角色),都必须等待大约 10 分钟才能执行新的工作流程。Transfer Family 服务器会缓存工作流程细节,服务器需要 10 分钟才能刷新其缓存。

此外,您必须注销所有活动的 SFTP 会话,然后等待 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 区域存储桶中。

对工作流程解密问题进行故障排除

描述

解密工作流程失败,日志消息如下所示:

{ "type": "StepErrored", "details": { "errorType": "BAD_REQUEST", "errorMessage": "File encryption algorithm not supported with FIPS mode enabled.", "stepType": "DECRYPT", "stepName": "step-name" }, "workflowId": "workflow-ID", "executionId": "execution-ID", "transferDetails": { "serverId": "server-ID", "username": "user-name", "sessionId": "session-ID" } }

原因

Transfer Family 服务器已启用 FIPS 模式和相关的解密工作流程步骤。在上传到 Transfer Family 服务器之前对文件进行加密时,加密客户端可能会生成使用非 FIPS 批准的对称加密算法的加密文件。在这种情况下,工作流程无法解密文件。在以下示例中,GnuPG 版本 2.4.0 使用 OCB(一种非 FIPS 分组密码模式)来加密文件:这会导致工作流程失败。

解决方案

您必须编辑用于加密文件的 GPG 密钥,然后对其重新加密。以下过程描述了您必须采取的步骤。

编辑 PGP 密钥
  1. 通过运行gpg ‐‐list-keys来确定必须编辑的密钥

    这将返回密钥列表。每个密钥的详细信息类似于以下内容:

    pub ed25519 2022-07-07 [SC] wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY uid [ultimate] Mary Major <marymajor@example.com> sub cv25519 2022-07-07 [E]
  2. 标识要编辑的密钥。在上一步所示的示例中,ID 为wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

  3. 运行 gpg ‐‐edit-key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

    系统以有关 GnuPG 程序和指定密钥的详细信息进行响应。

  4. gpg>提示符下,输入showpref。将返回以下详细信息:

    [ultimate] (1). Mary Major <marymajor@example.com> Cipher: AES256, AES192, AES, 3DES AEAD: OCB Digest: SHA512, SHA384, SHA256, SHA224, SHA1 Compression: ZLIB, BZIP2, ZIP, Uncompressed Features: MDC, AEAD, Keyserver no-modify

    请注意,已列出存储在密钥上的首选算法。

  5. 我们希望编辑密钥以保留除 OCB 之外的所有算法。运行setpref命令,指定要保留的所有算法:

    gpg> setpref AES256, AES192,AES,3DES,SHA512, SHA384, SHA256, SHA224, SHA1,ZLIB, BZIP2, ZIP, Uncompressed

    这将返回以下详细信息:

    Set preference list to: Cipher: AES256, AES192, AES, 3DES AEAD: Digest: SHA512, SHA384, SHA256, SHA224, SHA1 Compression: ZLIB, BZIP2, ZIP, Uncompressed Features: MDC, Keyserver no-modify Really update the preferences? (y/N)
  6. 输入y进行更新,然后在系统提示确认更改时输入密码。

  7. 保存更改。

    gpg> save

在重新运行解密工作流程之前,必须使用编辑后的密钥重新加密文件。

对 Amazon EFS 问题进行故障排除

本节介绍以下 Amazon EFS 问题的可能解决方案。

对缺失 POSIX 配置文件进行故障排除

描述

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

原因

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

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

解决方案

请务必向 Transfer Family 提供PosixProfile参数的 JSON 元素。

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

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

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

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": []}

使用 Amazon EFS 逻辑目录进行故障排除

描述

如果用户的主目录不存在,并且他们运行了ls命令,则系统会按如下方式做出响应:

sftp> ls remote readdir ("/"): No such file or directory

原因

如果 Transfer Family 服务器使用 Amazon EFS,则必须先创建具有读写访问权限的用户主目录,然后用户才能在其逻辑主目录中工作。用户无法自己创建此目录,因为他们将缺乏mkdir对逻辑主目录的权限。

解决方案

对父目录具有管理访问权限的用户需要创建该用户的逻辑主目录。

对测试您的身份提供商进行故障排除

描述

如果您使用控制台或TestIdentityProvider API 调用测试身份提供商,则该Response字段为空。例如:

{ "Response": "{}", "StatusCode": 200, "Message": "" }

原因

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

解决方案

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

为您的 SFTP 连接器添加可信主机密钥进行故障排除

描述

创建或编辑 SFTP 连接器并添加可信主机密钥时,您会收到以下错误:Failed to edit connector details (Invalid host key format.)

原因

如果您粘贴了正确的公钥,则问题可能是您包含了密钥的comment部分。 Amazon Transfer Family 目前不接受密钥的注释部分。

解决方案

将密钥的注释部分粘贴到文本字段中时,将其删除。例如,假设您的密钥可能如下所示:

ssh-rsa AAAA...== marymajor@dev-dsk-marymajor-1d-c1234567.us-east-1.amazon.com

删除==字符后面的文本,然后仅粘贴密钥中直至并包括==的部分。

ssh-rsa AAAA...==

文件上传问题进行故障排除

本节介绍以下文件上传问题的可能解决方案。

对 Amazon S3 文件上传错误进行故障排除

描述

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

原因

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

解决方案

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

对无法读取的文件名称进行故障排除

描述

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

原因

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

解决方案

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

ResourceNotFound异常进行故障排除

描述

您会收到一条找不到资源的错误。例如,如果您运行UpdateServer,可能会收到如下错误:

An error occurred (ResourceNotFoundException) when calling the UpdateServer operation: Unknown server

原因

收到ResourceNotFoundException消息的原因有多种。在大多数情况下,您在 API 命令中指定的资源不存在。如果您确实指定了现有资源,那么最有可能的原因是您的默认区域与资源的区域不同。例如,如果您的默认区域为 us-east-1,而您的 Transfer Family 服务器在 us-east-2 中,则您将收到未知资源异常。

有关设置默认区域的详细信息,请参阅使用aws configure进行快速配置

解决方案

在 API 命令中添加区域参数,以明确指定在何处查找特定资源。

aws transfer -describe-server --server-id server-id --region us-east-2

对 SFTP 连接器问题进行故障排除

本节介绍以下 SFTP 连接器问题的可能解决方案。

密钥协商失败

描述

您会收到密钥交换协商失败的错误。例如:

Key exchange negotiation failed due to incompatible host key algorithms. Client offered: [ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, rsa-sha2-512, rsa-sha2-256] Server offered: [ssh-rsa]

原因

出现此错误是因为服务器支持的主机密钥算法与连接器支持的主机密钥算法之间没有重叠。

解决方案

确保远程服务器支持错误消息中列出的至少一种客户端主机密钥算法。有关支持的算法列表,请参阅 SFTP 连接器算法

其他 SFTP 连接器问题

描述

运行后您会收到错误StartFileTransfer,但不知道问题的原因,并且在 API 调用后只返回连接器 ID。

原因

此错误可能有多种原因。要排除故障,我们建议您测试连接器并搜索 CloudWatch 日志。

解决方案

  • 测试您的连接器:请参阅测试 SFTP 连接器。如果测试失败,系统会根据测试失败的原因提供错误消息。该部分介绍如何通过控制台或使用 TestConnectionAPI 命令测试您的连接器。

  • 查看您的连接器的 CloudWatch 日志:请参阅SFTP 连接器的日志条目示例。本主题提供了 SFTP 连接器日志条目的示例,以及命名惯例,以帮助您找到相应的日志。

对 AS2 问题进行故障排除

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