本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用逻辑目录简化 Transfer Family 目录结构
为了简化你的Amazon Transfer Family服务器目录结构,你可以使用逻辑目录。使用逻辑目录,您可以使用用户友好的名称来构建虚拟目录结构,用户在连接到您的 Amazon S3 存储桶或 Amazon EFS 文件系统时可以浏览这些名称。使用逻辑目录时,可以避免向最终用户泄露绝对目录路径、Amazon S3 存储桶名称和 EFS 文件系统名称。
您可以使用逻辑目录将用户的根目录设置到存储层次结构中的所需位置,方法是执行所谓的chroot操作。在此模式下,用户无法导航到您为其配置的主目录或根目录之外的目录。
例如,尽管 Amazon S3 用户的范围已缩小为只能访问/
,有些客户端允许用户向上遍历文件夹mybucket
/home
/${transfer:UserName
}/
. 在这种情况下,只有在注销并重新登录 Transfer Family 服务器后,用户才会回到预定的主目录。执行一段chroot操作可以防止这种情况发生。mybucket
/home
您可以创建跨存储段和前缀创建自己的目录结构。如果您的工作流程需要特定的目录结构,而您无法通过存储桶前缀进行复制,则此功能非常有用。您也可以链接到 Amazon S3 中的多个非连续位置,类似于在 Linux 文件系统中创建符号链接,其中的目录路径引用文件系统中的不同位置。
使用逻辑目录的规则
在您创建逻辑目录映射之前,应了解以下规则:
-
当
Entry
是"/"
,只能有一个映射,因为不允许重叠路径。 -
目标可以使用
${transfer:UserName}
如果已根据用户名对存储桶或文件系统路径进行了参数化,则变量。 -
目标可以是不同存储桶或文件系统中的路径,但必须确保映射的 IAM 角色(
Role
响应中的参数)提供对这些存储桶或文件系统的访问权限。 -
请勿指定此段
HomeDirectory
参数,因为这个值是隐含的Entry
Target
使用时配对LOGICAL
字段HomeDirectoryType
参数。 -
目标应以斜杠 (/) 字符开头,但在指定
Target
. 例如,/DOC-EXAMPLE-BUCKET/images
是可以接受的,而DOC-EXAMPLE-BUCKET/images
和/DOC-EXAMPLE-BUCKET/images/
不是。
启动时根目录必须存在。对于 Amazon S3,这意味着您必须已经创建了一个以结尾的空字节对象/
创建根文件夹。
实现逻辑目录和 chroot
使用逻辑目录和chroot功能,您必须执行以下操作:
为每个用户打开逻辑目录。通过设置来执行此操作HomeDirectoryType
参数为LOGICAL
您创建或更新用户时。
"HomeDirectoryType": "LOGICAL"
Chroot
对于chroot,创建一个由单个目录构成的目录结构Entry
和Target
为每个用户配对。根文件夹是Entry
点,还有Target
是存储桶或文件系统中要映射到的位置。
您可以像前面的示例一样使用绝对路径,也可以使用动态替换用户名${transfer:UserName}
,如下例所示。
[{"Entry": "/", "Target": "/mybucket/${transfer:UserName}"}]
在前面的示例中,用户被锁定在其根目录中,无法在层次结构中向上遍历。
虚拟目录结构
对于虚拟目录结构,可以创建多个Entry
Target
配对,目标位于 S3 存储区或 EFS 文件系统中的任何位置,包括多个存储区或文件系统,前提是用户的 IAM 角色映射有权访问它们。
在以下虚拟结构示例中,当用户登录到AmazonSFTP,它们位于根目录中,子目录为/pics
,/doc
,/reporting
,以及/anotherpath/subpath/financials
.
[ {"Entry": "/pics", "Target": "/bucket1/pics"}, {"Entry": "/doc", "Target": "/bucket1/anotherpath/docs"}, {"Entry": "/reporting", "Target": "/reportingbucket/Q1"}, {"Entry": "/anotherpath/subpath/financials", "Target": "/reportingbucket/financials"}]
您只可以将文件上传到您映射的特定文件夹。这意味着在前面的示例中,您无法上传到/anotherpath
要么anotherpath/subpath
目录;仅限anotherpath/subpath/financials
. 您也不能直接映射到这些路径,因为不允许重叠路径。
例如,假设您创建以下映射:
{ "Entry": "/pics", "Target": "/mybucket/pics" }, { "Entry": "/doc", "Target": "/mybucket/mydocs" }, { "Entry": "/temp", "Target": "/mybucket" }
您只可以将文件上传到这些存储段。当你第一次通过连接时sftp
,你被拖到根目录中,/
. 如果您尝试将文件上传到该目录,则上传失败。以下命令显示了示例序列:
sftp> pwd Remote working directory: / sftp> put file Uploading file to /file remote open("/file"): No such file or directory
要上传到任何directory/sub-directory
,你必须明确地将路径映射到sub-directory
.
有关配置逻辑目录的更多信息,以及chroot为您的用户提供,包括Amazon CloudFormation您可以下载和使用的模板,请参阅简化您的Amazon包含 chroot 和逻辑目录的 SFTP 结构
CustomAmazon Lambda反应
您可以将逻辑目录与连接到您的自定义身份提供商的 Lambda 函数配合使用。为此,请在您的 Lambda 函数中指定HomeDirectoryType
如同LOGICAL
,然后添加Entry
和Target
字段HomeDirectoryDetails
参数。例如:
HomDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/
DOC-EXAMPLE-BUCKET
/theRealFolder"}]"
以下代码是来自自定义 Lambda 身份验证调用的成功响应示例。
aws transfer test-identity-provider --server-id s-1234567890abcdef0 --user-name myuser { "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", "Message": "", "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",\"HomeDirectoryType\": \"LOGICAL\",\"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/
DOC-EXAMPLE-BUCKET
/theRealFolder\\\"}]\",\"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", "StatusCode": 200 }
这些区域有:"Url":
仅当您使用 API Gateway 方法作为自定义身份提供商时,才会返回行。