為 Amazon S3 儲存貯體建立工作階段政策 - AWS Transfer Family

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

為 Amazon S3 儲存貯體建立工作階段政策

工作階段政策是 AWS Identity and Access Management (IAM) 政策,將使用者限制為 Amazon S3 儲存貯體的特定部分。它會透過即時評估存取來執行此作業。

注意

工作階段政策僅適用於 Amazon S3。對於 Amazon EFS,您可以使用 POSIX 檔案許可來限制存取。

當您需要將相同存取權授予使用者群組給 Amazon S3 儲存貯體的特定部分時,您可以使用工作階段政策。例如,使用者群組可能只需要存取 home 目錄。該使用者群組共用相同的 IAM 角色。

注意

工作階段政策的長度上限為 2048 個字元。如需詳細資訊,請參閱 API 參考CreateUser動作的政策請求參數

若要建立工作階段政策,請在 IAM 政策中使用下列政策變數:

  • ${transfer:HomeBucket}

  • ${transfer:HomeDirectory}

  • ${transfer:HomeFolder}

  • ${transfer:UserName}

重要

您無法在 受管政策中使用上述變數。您也無法在 IAM 角色定義中使用它們做為政策變數。您可以在 IAM 政策中建立這些變數,並在設定使用者時直接提供這些變數。此外,您無法在此工作階段政策中使用 ${aws:Username}變數。此變數是指 IAM 使用者名稱,而不是 所需的使用者名稱 AWS Transfer Family。

工作階段政策範例

下列程式碼顯示範例工作階段政策。

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::${transfer:HomeBucket}" ], "Condition": { "StringLike": { "s3:prefix": [ "${transfer:HomeFolder}/*", "${transfer:HomeFolder}" ] } } }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*" } ] }
注意

上述政策範例假設使用者已將主目錄設定為包含結尾斜線,以表示它是目錄。另一方面,如果您設定使用者的 而HomeDirectory沒有結尾斜線,則應該將其包含在政策中。

在先前的範例政策中,請注意 transfer:HomeFoldertransfer:HomeBuckettransfer:HomeDirectory政策參數的使用方式。這些參數是針對為使用者設定的 HomeDirectory 所設定,如 HomeDirectory 和 中所述實作您的 API Gateway 方法。這些參數具有下列定義:

  • transfer:HomeBucket 參數會取代為 的第一個元件HomeDirectory

  • transfer:HomeFolder 參數會取代為HomeDirectory參數的剩餘部分。

  • transfer:HomeDirectory 參數已移除正斜線 (/),因此可以做為Resource陳述式中 S3 Amazon Resource Name (ARN) 的一部分。

注意

如果您使用的是邏輯目錄,也就是使用者的 homeDirectoryTypeLOGICAL,則不支援這些政策參數 (HomeBucketHomeDirectoryHomeFolder)。

例如,假設為 Transfer Family 使用者設定的 HomeDirectory 參數為 /home/bob/amazon/stuff/

  • transfer:HomeBucket 設定為 /home

  • transfer:HomeFolder 設定為 /bob/amazon/stuff/

  • transfer:HomeDirectory 會變成 home/bob/amazon/stuff/

第一個"Sid"允許使用者列出從 開始的所有目錄/home/bob/amazon/stuff/

第二個"Sid"限制使用者對相同路徑 的putget存取/home/bob/amazon/stuff/

實施上述政策後,當使用者登入時,他們只能存取主目錄中的物件。在連線時間, 會將這些變數 AWS Transfer Family 取代為使用者的適當值。這樣做可讓將相同政策文件套用到多名使用者的過程變得更為容易。此方法可減少管理使用者存取 Amazon S3 儲存貯體的 IAM 角色和政策管理的額外負荷。

您也可以使用工作階段政策,根據您的業務需求自訂每位使用者的存取權。如需詳細資訊,請參閱《IAM 使用者指南》中的 AssumeRole、AssumeRoleWithSAML 和 AssumeRoleWithWebIdentity 的許可

注意

AWS Transfer Family 會儲存政策 JSON,而不是政策的 Amazon Resource Name (ARN)。因此,當您在 IAM 主控台中變更政策時,您需要返回 AWS Transfer Family 主控台並使用最新的政策內容更新使用者。您可以在使用者組態區段的政策資訊索引標籤上更新使用者。

如果您使用的是 AWS CLI,您可以使用下列命令來更新政策。

aws transfer update-user --server-id server --user-name user --policy \ "$(aws iam get-policy-version --policy-arn policy --version-id version --output json)"

工作階段政策的巢狀取代

巢狀取代不會在 Transfer Family 工作階段政策中執行。工作階段政策可以使用巢狀變數,例如 ${transfer:HomeDirectory}。處理政策時,外部變數 (例如 ${transfer:HomeDirectory}) 可能會取代為包含另一個變數 (例如 {amzn-s3-demo-bucket:/$(transfer:UserName}) 的值。不過,巢狀變數不會進一步以實際使用者名稱 (例如 johndoe) 取代。

這表示在為 Transfer Family 建立工作階段政策時,您需要考慮此行為,並確保相應地設計政策結構和變數用量。巢狀變數可能無法如預期解析,且政策可能不會授予預期的許可。請務必徹底測試和驗證工作階段政策,以確保它們如預期般運作。此行為是實作 Transfer Family 環境的存取控制和許可時的重要考量。

此問題的一個解決方法是在工作階段政策中使用實際的 Amazon S3 儲存貯體名稱。因此,例如,使用${transfer:HomeDirectory}下列 ,其中 amzn-s3-demo-bucket 是您的實際儲存貯體:${amzn-s3-demo-bucket/transfer:UserName}