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

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

配置要与使用的存储 Amazon Transfer Family

本主题介绍可以与配合使用的存储选项 Amazon Transfer Family。你可以使用 Amazon S3 或 Amazon EFS 作为 Transfer Family 服务器的存储。

配置 Amazon S3 存储桶

Amazon Transfer Family 访问您的 Amazon S3 存储桶以处理用户的传输请求,因此在设置支持文件传输协议的服务器时,您需要提供 Amazon S3 存储桶。您可以使用现有存储桶或新建一个存储桶。

注意

您不必使用位于相同 Amazon 区域中的服务器和 Amazon S3 存储桶,但是我们建议将此作为最佳实践。

在设置用户时,您可以为每个用户分配一个 IAM 角色。此角色决定了用户对 Amazon S3 存储桶的访问级别。

有关创建新存储桶的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的如何创建 S3 存储桶?

注意

您可以​使用 Amazon S3 对象锁定在固定的时间段内或无限期内阻止对象被覆盖。Transfer Family 的工作方式与其他服务相同。如果对象存在且受保护,则不允许写入或删除该文件。有关 Amazon S3 对象锁定的更多详细信息,请参阅《Amazon 简单存储服务用户指南》中的使用 Amazon S3 对象锁定

Amazon S3 接入点

Amazon Transfer Family 支持 Amazon S3 接入点,这是 Amazon S3 的一项功能,可让您轻松管理对共享数据集的精细访问。您可以在任何使用 S3 存储桶名称的地方使用 S3 接入点别名。您可以在 Amazon S3 中为拥有不同权限的用户创建数百个访问点,以访问 Amazon S3 存储桶中的共享数据。

例如,您可以使用接入点允许三个不同的团队访问同一个共享数据集,其中一个团队可以从 S3 读取数据,第二个团队可以将数据写入 S3,第三个团队可以从 S3 读取、写入和删除数据。要实现如上所述的精细访问控制,您可以创建一个 S3 接入点,该接入点包含向不同团队提供非对称访问权限的策略。您可以将 S3 接入点与 Transfer Family 服务器配合使用来实现精细的访问控制,而无需创建涵盖数百个用例的复杂 S3 存储桶策略。要详细了解如何在 Transfer Family 服务器上使用 S3 接入点,请参阅使用Amazon Transfer Family 和 Amazon S3 增强数据访问控制博客文章。

注意

Amazon Transfer Family 目前不支持 Amazon S3 多区域接入点。

亚马逊 S3 的 HeadObject 行为

注意

在创建或更新 Transfer Family 服务器时,您可以优化 Amazon S3 目录的性能,从而消除HeadObject调用。

在 Amazon S3 中,存储桶和对象是主要资源,并且对象存储在存储桶中。Amazon S3 可以模仿分层文件系统,但有时行为可能与典型文件系统不同。例如,在 Amazon S3 中,目录不是头等概念,而是基于对象密钥。 Amazon Transfer Family 推断出目录路径的方法是:用正斜杠字符 (/) 分割对象的密钥,将最后一个元素视为文件名,然后将具有相同前缀的文件名分组到同一路径下。当您使用mkdir或使用 Amazon S3 控制台创建空目录时,创建零字节对象是为了表示文件夹的路径。这些对象的密钥以尾随的正斜杠结尾。Amazon S3 用户指南中的使用文件夹在 Amazon S3 控制台中组织对象中描述了这些零字节对象。

当您运行ls命令时,如果某些结果是 Amazon S3 零字节对象(这些对象的密钥以正斜杠字符结尾),Transfer Family 会针对每个对象HeadObject发出请求(详情请参阅《亚马逊简单存储服务 API 参考HeadObject中)。使用 Amazon S3 作为 Transfer Family 的存储空间时,这可能会导致以下问题。

授予仅写入和列出文件的权限

在某些情况下,您可能只想提供对 Amazon S3 对象的写入权限。例如,您可能希望提供写入(或上传)和列出存储桶中对象的权限,但不提供读取(下载)对象的权限。要使用文件传输客户端执行lsmkdir命令,您必须拥有 Amazon S3 ListObjectsPutObject权限。但是,当 Transfer Family 需要HeadObject调用写入文件或列出文件时,呼叫失败并显示拒绝访问的错误,因为此调用需要GetObject权限。

注意

在创建或更新 Transfer Family 服务器时,您可以优化 Amazon S3 目录的性能,从而消除HeadObject调用。

在这种情况下,您可以通过添加 Amazon Identity and Access Management (IAM) 策略条件来授予访问GetObject权限,该条件仅为以斜杠 (/) 结尾的对象添加权限。此条件可防止GetObject调用文件(因此无法读取文件),但允许用户列出和遍历文件夹。以下示例策略仅提供对您的 Amazon S3 存储桶的写入和列出权限。要使用此策略,请DOC-EXAMPLE-BUCKET替换为存储桶的名称。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListing", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, { "Sid": "AllowReadWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "DenyIfNotFolder", "Effect": "Deny", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "NotResource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*/" ] } ] }
注意

此策略不允许用户追加文件。换句话说,分配了此策略的用户无法打开文件来向其添加内容或修改文件。此外,如果您的用例要求在上传文件之前进行HeadObject调用,则此策略对您不起作用。

大量零字节对象导致延迟问题

如果您的 Amazon S3 存储桶包含大量这样的零字节对象,Transfer Family 会发出大量HeadObject调用,这可能会导致处理延迟。

解决此问题的一种可能方法是删除所有零字节对象。请注意以下几点:

  • 空目录将不再存在。只有当目录的名称位于对象的密钥中时,才会存在目录。

  • 不会阻止某人再次调用mkdir并破坏事务处理。您可以通过制定阻止目录创建的策略来缓解这种情况。

  • 有些场景会使用这些 0 字节的对象。例如,您有一个像 /inboxes/customer1000 这样的结构,每天都会清理收件箱目录。

另一种可能的解决方案是通过策略条件限制可见的对象数量,以减少HeadObject调用次数。要使之成为可行的解决方案,您需要接受这样一个事实,即您可能只能查看有限的一组子目录。

配置 Amazon EFS 文件系统

Amazon Transfer Family 访问亚马逊 Elastic File System (Amazon EFS),为用户的传输请求提供服务。因此,在设置支持文件传输协议的服务器时,您必须提供 Amazon EFS 文件系统。您可以使用现有文件系统或新建一个文件系统。

请注意以下几点:

  • 当您使用 Transfer Family 服务器和 Amazon EFS 文件系统时,服务器和文件系统必须处于同一位置 Amazon Web Services 区域。

  • 服务器和文件系统不必位于同一个账户中。如果服务器和文件系统不在同一个账户中,则文件系统策略必须为用户角色提供明确的权限。

    有关如何设置多个账户的信息,请参阅Amazon Organizations 用户指南中的管理组织中的 Amazon 账户

  • 在设置用户时,您可以为每个用户分配一个 IAM 角色。此角色决定了用户对 Amazon EFS 文件系统的访问级别。

  • 有关挂载 Amazon EFS 文件系统的详细信息,请参阅挂载 Amazon EFS 文件系统

有关如何 Amazon Transfer Family 与 Amazon EFS 协同工作的更多详细信息,请参阅《亚马逊弹性文件系统用户指南》中的 “使用 Amazon Transfer Family 访问您的 Amazon E FS 文件系统中的文件”。

Amazon EFS 文件所有权

Amazon EFS 使用便携式操作系统接口 (POSIX) 文件权限模型来表示文件所有权。

在 POSIX 中,系统中的用户分为三个不同的权限类别:当您允许用户使用访问存储在 Amazon EFS 文件系统中的文件时 Amazon Transfer Family,必须为他们分配一个 “POSIX 配置文件”。此配置文件用于确定他们对 Amazon EFS 文件系统中文件和目录的访问权限。

  • 用户 (u):文件或目录的所有者。通常,文件或目录的创建者也是所有者。

  • 组 (g):一组需要对他们共享的文件和目录具有相同访问权限的用户。

  • 其他 (o):除所有者和群组成员外,有权访问系统的所有其他用户。此权限类别也称为“公有”类别。

在 POSIX 权限模型中,每个文件系统对象(文件、目录、符号链接、命名管道和套接字)都与前面提到的三组权限相关联。Amazon EFS 对象具有关联的 Unix 风格模式。此模式值定义了对该对象执行操作的权限。

此外,在 Unix 风格的系统上,用户和组被映射到数字标识符,Amazon EFS 使用这些标识符来表示文件所有权。对于 AmazonEFS,对象由单个所有者和单个组所有。当用户尝试访问文件系统对象时,Amazon EFS 使用映射的数字 ID 来检查权限。

为 Transfer Family 设置 Amazon EFS 用户

设置 Amazon EFS 用户之前,您可以执行以下操作之一:

注意

Transfer Family 服务器不支持 Amazon EFS 接入点来设置 POSIX 权限。Transfer Family 用户的 POSIX 配置文件(如上一节所述)提供了设置 POSIX 权限的功能。这些权限是在用户级别设置的,用于基于 UID、GID 和辅助 GID 的精细访问。

在 Amazon EFS 上配置 Transfer Family 用户

Transfer Family 会将用户映射到您指定的 UID/GID 和目录。如果 UID/GID/目录在 EFS 中尚不存在,则应先创建它们,然后再在 Transfer 中将其分配给用户。有关创建 Amazon EFS 用户的详细信息,请参阅 Amazon Elastic File System 用户指南中的在网络文件系统 (NFS) 级别处理用户、组和权限

在 Transfer Family 中设置亚 Amazon EFS 用户的步骤
  1. 使用 PosixProfile 字段在 Transfer Family 中为用户映射 EFS UID 和 GID。

  2. 如果您希望用户在登录时在特定文件夹中启动,则可以在HomeDirectory字段下指定 EFS 目录。

您可以使用 CloudWatch 规则和 Lambda 函数自动执行该过程。有关与 EFS 交互的 Lambda 函数示例,请参阅Amazon Lambda 在您的无服务器应用程序中使用 Amazon EFS

此外,您还可以为 Transfer Family 用户配置逻辑目录。有关详细信息,请参阅使用逻辑目录简化您的 Transfer Family 目录结构主题中的为 Amazon EFS 配置逻辑目录章节。

创建 Amazon EFS 根用户

如果您的组织愿意通过 SFTP/FTPS 为用户配置启用根用户访问权限,则可以创建一个 UID 和 GID 为 0 的用户(根用户),然后使用该根用户创建文件夹,为其余用户分配 POSIX ID 所有者。此选项的优点是,无需挂载 Amazon EFS 文件系统。

执行添加 Amazon EFS 服务托管用户中描述的步骤,为用户 ID 和组 ID 输入 0(零)。

受支持的 Amazon EFS 命令

对于 Amazon Transfer Family,Amazon EFS 支持以下命令。

  • cd

  • ls/dir

  • pwd

  • put

  • get

  • rename

  • chown: 只有根用户(即 uid 为 0 的用户)可以更改文件和目录的所有权和权限。

  • chmod:只有根用户可以更改文件和目录的所有权和权限。

  • chgrp:根用户或只能将文件组更改为次要组之一的文件所有者支持。

  • ln -s/symlink

  • mkdir

  • rm/delete

  • rmdir

  • chmtime