配置要与使用的存储 AWS Transfer Family - AWS Transfer Family

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

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

本主题介绍可以与配合使用的存储选项 AWS Transfer Family。您可以使用亚马逊 S3 或亚马逊EFS作为 Transfer Family 服务器的存储空间。

配置 Amazon S3 存储桶

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

注意

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

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

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

注意

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

Amazon S3 接入点

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

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

注意

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

亚马逊 S3 的 HeadObject 行为

注意

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

在 Amazon S3 中,存储桶和对象是主要资源,并且对象存储在存储桶中。Amazon S3 可以模仿分层文件系统,但有时行为可能与典型文件系统不同。例如,在 Amazon S3 中,目录不是头等概念,而是基于对象密钥。 AWS 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调用。

在这种情况下,您可以通过添加 AWS 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 文件系统

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

请注意以下几点:

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

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

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

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

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

有关如何 AWS Transfer Family 与亚马逊EFS合作的更多详情,请参阅《亚马逊弹性EFS文件系统用户指南》中的 “使用 AWS Transfer Family 访问亚马逊文件系统中的文件”。

Amazon EFS 文件所有权

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

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

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

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

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

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

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

为 Transfer Family 设置亚马逊EFS用户

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

注意

Transfer Family 服务器不支持EFS使用亚马逊接入点来设置POSIX权限。Transfer Family 用户的POSIX个人资料(如上一节所述)提供了设置POSIX权限的功能。这些权限是在用户级别设置的,用于基于UIDGID、和次要GIDs的精细访问。

在亚马逊上配置 Transfer Family 用户 EFS

Transfer Family 会将用户映射到中尚UID/GID and directories you specify. If the UID/GID/directories不存在的EFS,则应先创建这些用户,然后再在 Transfer 中将其分配给用户。Amazon EFS Elastic File Sy stem 用户指南的 “使用网络文件系统 (NFS) 级别的用户、群组和权限” 中描述了创建亚马逊用户的详细信息。

在 Transfer Famil EFS y 中设置亚马逊用户的步骤
  1. 使用PosixProfile字段在 T EFS UID ransfer Family 中GID为你的用户映射和。

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

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

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

创建 Amazon EFS 根用户

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

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

支持的亚马逊EFS命令

Amazon EFS 支持以下命令 AWS Transfer Family。

  • cd

  • ls/dir

  • pwd

  • put

  • get

  • rename

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

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

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

  • ln -s/symlink

  • mkdir

  • rm/delete

  • rmdir

  • chmtime