使用邏輯目錄來簡化 Transfer Family 目錄結構 - AWS Transfer Family

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用邏輯目錄來簡化 Transfer Family 目錄結構

邏輯目錄可簡化您的 AWS Transfer Family 伺服器目錄結構。使用邏輯目錄,您可以使用使用者易用的名稱建立虛擬目錄結構,使用者可在連線至 Amazon S3 儲存貯體或 Amazon EFS 檔案系統時導覽。這可防止使用者查看實際的目錄路徑、儲存貯體名稱和檔案系統名稱。

注意

您應該使用工作階段政策,讓您的最終使用者只能執行您允許他們執行的操作。

您應該使用邏輯目錄為最終使用者建立易於使用的虛擬目錄,並抽象化儲存貯體名稱。邏輯目錄映射只允許使用者存取其指定的邏輯路徑和子目錄,並禁止周遊邏輯根的相對路徑。

Transfer Family 會驗證每個可能包含相對元素的路徑,並在我們將這些路徑傳遞至 Amazon S3 之前主動阻止這些路徑解析;這可防止您的使用者超越其邏輯映射。

即使 Transfer Family 防止最終使用者存取其邏輯目錄以外的目錄,我們也建議您使用唯一角色或工作階段政策,在儲存層級強制執行最低權限。

了解 chroot 和目錄結構

chroot 操作可讓您將使用者的根目錄設定為儲存階層中的任何位置。這會將使用者限制為其設定的主目錄或根目錄,防止存取更高層級的目錄。

請考慮 Amazon S3 使用者僅限於 的情況amzn-s3-demo-bucket/home/${transfer:UserName}。如果沒有色彩,某些用戶端可能會允許使用者移至 /amzn-s3-demo-bucket/home,需要登出和登入才能返回其適當的目錄。執行 chroot 操作可避免此問題。

您可以跨多個儲存貯體和字首建立自訂目錄結構。如果您的工作流程需要儲存貯體字首本身無法提供的特定目錄配置,這會很有用。您也可以連結到 Amazon S3 中的多個非連續位置,類似於在 Linux 檔案系統中建立符號連結,其中您的目錄路徑參考檔案系統中的不同位置。

使用邏輯目錄的規則

本節說明使用邏輯目錄的一些規則和其他考量事項。

映射限制

  • Entry為 時,僅允許一個映射 "/"(不允許重疊路徑)。

  • 邏輯目錄支援自訂 IDP 和 AD 使用者最多 2.1 MB 的映射,以及服務受管使用者最多 2,000 個項目。您可以計算映射大小,如下所示:

    1. 以 格式寫入典型映射{"Entry":"/entry-path","Target":"/target-path"},其中 entry-pathtarget-path是您將使用的實際值。

    2. 計算該字串中的字元,然後新增一個 (1)。

    3. 將該數字乘以您為伺服器擁有的大約映射數量。

    如果您在步驟 3 中估計的數字小於 2.1 MB,則您的映射在可接受的限制內。

目標路徑需求

  • 如果儲存貯體或檔案系統路徑已根據使用者名稱進行參數化,請使用 ${transfer:UserName}變數。

  • 目標可以設定為指向不同的 Amazon S3 儲存貯體或檔案系統,只要相關聯的 IAM 角色具有存取這些儲存位置的必要許可。

  • 所有目標必須以正斜線 (/) 開頭,但不能以正斜線結尾。例如, /amzn-s3-demo-bucket/images 是正確的,而 amzn-s3-demo-bucket/images /amzn-s3-demo-bucket/images/ 不是正確的。

儲存考量

  • Amazon S3 是物件存放區,其中資料夾僅以虛擬概念存在。使用 Amazon S3 儲存體時,Transfer Family 會在 STAT 操作中將字首報告為目錄,即使沒有帶有斜線的零位元組物件。在 STAT 操作中,具有結尾斜線的適當零位元組物件也會報告為目錄。此行為在《Amazon Simple Storage Service 使用者指南》中的使用資料夾在 Amazon S3 主控台中組織物件中描述。

  • 對於需要區分檔案和資料夾的應用程式,請使用 Amazon Elastic File System (Amazon EFS) 作為 Transfer Family 儲存選項。

  • 如果您要為使用者指定邏輯目錄值,您使用的 參數取決於使用者的類型:

    • 對於服務受管使用者,請在 中提供邏輯目錄值HomeDirectoryMappings

    • 對於自訂身分提供者使用者,請在 中提供邏輯目錄值HomeDirectoryDetails

使用者目錄值

  • 指定邏輯目錄值的 參數取決於您的使用者類型:

    • 對於服務受管使用者,請在 中提供邏輯目錄值HomeDirectoryMappings

    • 對於自訂身分提供者使用者,請在 中提供邏輯目錄值HomeDirectoryDetails

  • 使用 LOGICAL HomeDirectoryType 時,您可以為回應中提供 HomeDirectory HomeDirectoryDetails 值。如果未指定,HomeDirectory 會預設為 /

如需如何實作邏輯目錄的詳細資訊,請參閱 實作邏輯目錄

設定 Amazon EFS 的邏輯目錄

如果您的 Transfer Family 伺服器使用 Amazon EFS,則必須使用讀取和寫入存取權建立使用者的主目錄,使用者才能在其邏輯主目錄中工作。使用者無法自行建立此目錄,因為他們在其邏輯主目錄mkdir上缺少 的許可。

如果使用者的主目錄不存在,而且他們執行 ls命令,系統會回應,如下所示:

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

具有父目錄管理存取權的使用者需要建立使用者的邏輯主目錄。

自訂 AWS Lambda 回應

您可以使用邏輯目錄搭配連線至自訂身分提供者的 Lambda 函數。若要這樣做,請在 Lambda 函數中指定 HomeDirectoryTypeLOGICAL,並新增 HomeDirectoryDetails 參數的 EntryTarget值。例如:

HomeDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/amzn-s3-demo-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\\\":\\\"/amzn-s3-demo-bucket/theRealFolder\\\"}]\", \"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", "StatusCode": 200 }
注意

只有在您使用 API Gateway 方法做為自訂身分提供者時,才會傳回此"Url":行。