

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

# 動態許可管理方法
<a name="dynamic-permission-management"></a>

## 了解 Transfer Family 許可架構
<a name="permission-architecture-overview"></a>

AWS Transfer Family 透過工作階段政策支援動態許可管理，可讓您在執行時間限制 IAM 角色的有效許可。此方法適用於服務受管使用者和自訂身分提供者使用者，但只有在將檔案傳輸到 Amazon S3 （而非 Amazon EFS) 時受支援。

每個 AWS Transfer Family 使用者都使用包含下列項目的許可模型來操作：

1. *基本 IAM 角色* - 定義使用者的基本許可

1. *選用工作階段政策* - 在執行時間限制 （範圍縮小） 基本許可

有效許可是基本角色許可和工作階段政策許可的交集。工作階段政策只能限制許可；他們不能授予基本角色允許以外的其他許可。

此架構適用於這兩種使用者類型：
+ *服務受管使用者* - 工作階段政策可以直接在使用者設定中設定
+ *自訂身分提供者使用者* - 工作階段政策可以作為身分驗證回應的一部分傳回或存放在 中 AWS Secrets Manager

## 許可管理的兩種方法
<a name="permission-management-approaches"></a>

為需要唯一存取模式的 Transfer Family 使用者設計許可時，您可以選擇兩種主要方法：

每位使用者一個角色  
為每個 Transfer Family 使用者建立個別的 IAM 角色，具有專為該使用者需求量身打造的特定許可。在下列情況下使用此方法：  
+ 每個使用者都需要非常不同的許可
+ 許可管理是由組織中的不同人員處理
+ 您需要對個別使用者存取進行精細控制

具有工作階段政策的共用角色  
使用具有廣泛許可的單一 IAM 角色 （例如存取包含多個使用者主目錄的整個 Amazon S3 儲存貯體），並套用工作階段政策，將每位使用者限制為其特定區域。相較於管理每個使用者的個別角色，此方法可大幅降低管理開銷。在下列情況下使用此方法：  
+ 使用者需要類似類型的存取權，但需要不同的資源 （例如，所有使用者都需要讀取/寫入存取權，但每個使用者都只需要自己的資料夾）
+ 您想要簡化角色管理，並避免建立數十或數百個個別角色
+ 使用者應該只在共用儲存貯體中存取其指定的主目錄
+ 在您的組織內集中管理許可
例如，您可以建立一個可存取整個`s3://company-transfers/`儲存貯體的角色，然後使用工作階段政策將 alice 限制為 `s3://company-transfers/alice/`、bob 限制為 等，而不是為使用者「alice」`s3://company-transfers/bob/`、「bob」和「charlie」建立個別角色。

## 實作工作階段政策
<a name="session-policy-implementation"></a>

工作階段政策的運作方式是限制指派給使用者的基本 IAM 角色的有效許可。最終許可是角色許可和工作階段政策許可的交集。

您可以透過兩種方式實作動態工作階段政策：

變數替換  
在工作階段政策`${transfer:HomeBucket}`中使用 Transfer Family 政策變數`${transfer:Username}`，例如 `${transfer:HomeDirectory}`、 和 。這些變數會在執行時間自動取代為實際值。如需這些變數的詳細資訊，請參閱 [為 Amazon S3 儲存貯體建立工作階段政策](users-policies-session.md)。

動態產生  
對於自訂身分提供者，從您的 Lambda 函數或 API Gateway 方法的身分驗證回應中on-the-fly產生工作階段政策。此方法可讓您在身分驗證時，根據使用者屬性、群組成員資格或外部資料來源建立高度自訂的政策。  
您也可以將名為 的金鑰`Policy`與工作階段政策 JSON 作為值， AWS Secrets Manager 將預先產生的工作階段政策存放在 中。這可讓您跨多個使用者使用相同的廣泛 IAM 角色，同時維護使用者特定的存取控制。

**注意**  
只有往返 Amazon S3 的檔案傳輸才支援工作階段政策。它們不適用於 Amazon EFS 檔案系統。對於 Amazon EFS，許可由 UID/GID 和在檔案系統本身內套用的許可位元管理。

## 依使用者類型實作
<a name="implementation-by-user-type"></a>

服務受管使用者  
對於服務受管使用者，您可以透過 AWS Transfer Family 主控台、API 或 CLI，直接在使用者組態中指定工作階段政策。如需詳細資訊，請參閱[使用服務受管使用者](service-managed-users.md)。

自訂身分提供者使用者  
對於自訂身分提供者使用者，您可以透過兩種方式提供工作階段政策：  
+ 透過 ， AWS Secrets Manager 將名為 的金鑰`Policy`與工作階段政策作為值
+ 直接在 Lambda 函數回應或 API Gateway 回應中作為身分驗證結果的一部分
如需詳細資訊，請參閱[自訂身分提供者解決方案](custom-idp-toolkit.md)。

## 範例：使用工作階段政策簡化角色管理
<a name="dynamic-permission-example"></a>

此範例示範動態許可管理如何大幅降低管理開銷，同時維護安全性。

### 案例
<a name="scenario-description"></a>

您的組織有 50 位使用者需要 SFTP 存取權才能傳輸檔案。每個使用者都應該在名為 的共用 Amazon S3 儲存貯體中存取自己的資料夾`company-transfers`。如果沒有工作階段政策，您需要建立 50 個不同的 IAM 角色。

傳統方法 （不含工作階段政策）  
+ 建立 50 個 IAM 角色：`TransferRole-Alice`、`TransferRole-Charlie`、 `TransferRole-Bob`等。
+ 每個角色都有只有該使用者的資料夾的特定許可
+ 管理許可需要更新個別角色
+ 新增使用者需要建立新的角色

動態方法 （使用工作階段政策）  
+ 建立 1 個 IAM 角色：`TransferRole-Shared`具有整個儲存貯體的廣泛許可
+ 使用工作階段政策，將每位使用者限制在執行時間的特定資料夾
+ 管理許可需要更新一個角色或工作階段政策範本
+ 新增使用者不需要新的角色，只需要使用者組態

### 實作
<a name="implementation-example"></a>

以下是實作動態方法的方式 （使用 儲存`company-transfers`貯體做為以實際 Amazon S3 儲存貯體取代的範例）：

**實作動態許可管理**

1. 建立一個具有廣泛 Amazon S3 許可的共用 IAM 角色：  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::company-transfers/*"
       },
       {
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::company-transfers"
       }
     ]
   }
   ```

1. 建立工作階段政策範本，以限制對使用者資料夾的存取：  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::company-transfers/${transfer:Username}/*"
       },
       {
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::company-transfers",
         "Condition": {
           "StringLike": {
             "s3:prefix": "${transfer:Username}*"
           }
         }
       }
     ]
   }
   ```

1. 使用 設定每個使用者：
   + 共用的 IAM 角色
   + 套用的工作階段政策如下所示：
     + *服務受管使用者*：在建立或修改使用者時，使用 API 或 CLI 透過政策參數套用 JSON （主控台僅提供預先定義的政策選項）
     + *自訂身分提供者使用者*：在身分驗證期間將其作為 Lambda 函數回應的一部分傳回，或將其與使用者的登入資料一起存放 AWS Secrets Manager 為名為 "Policy" 的金鑰
   + 主目錄： `/company-transfers/${transfer:Username}/`