

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

# 建立 IAM 角色和政策
<a name="requirements-roles"></a>

本主題說明可搭配 使用的政策和角色類型 AWS Transfer Family，並逐步解說建立使用者角色的程序。它也說明工作階段政策的運作方式，並提供範例使用者角色。

AWS Transfer Family 使用下列類型的角色：
+ **使用者角色** – 允許服務受管使用者存取必要的 Transfer Family 資源。 會在 Transfer Family 使用者 ARN 的內容中 AWS Transfer Family 擔任此角色。
+ **存取角色** – 僅提供正在傳輸的 Amazon S3 檔案的存取權。對於傳入 AS2 傳輸，存取角色會使用協議的 Amazon Resource Name (ARN)。對於傳出 AS2 傳輸，存取角色會使用連接器的 ARN。
+ **調用角色** – 與 Amazon API Gateway 搭配使用，做為伺服器的自訂身分提供者。Transfer Family 會在 Transfer Family 伺服器 ARN 的內容中擔任此角色。
+ **記錄角色** – 用於將項目記錄到 Amazon CloudWatch。Transfer Family 使用此角色記錄成功和失敗詳細資訊，以及檔案傳輸的相關資訊。Transfer Family 會在 Transfer Family 伺服器 ARN 的內容中擔任此角色。對於傳出 AS2 傳輸，記錄角色會使用連接器 ARN。
+ **執行角色** – 允許 Transfer Family 使用者呼叫和啟動工作流程。Transfer Family 會在 Transfer Family 工作流程 ARN 的內容中擔任此角色。

除了這些角色之外，您也可以使用*工作階段政策*。工作階段政策用於在必要時限制存取。請注意，這些政策是獨立的：也就是說，您不將這些政策新增至角色。相反地，您可以將工作階段政策直接新增至 Transfer Family 使用者。

**注意**  
當您建立服務受管 Transfer Family 使用者時，您可以**根據主資料夾選取自動產生政策**。如果您想要限制使用者存取自己的資料夾，這是一個有用的捷徑。此外，您也可以在 中檢視工作階段政策和範例的詳細資訊[工作階段政策的運作方式](#session-policy)。您也可以在 *IAM 使用者指南*中的工作階段政策中找到[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)的詳細資訊。

**Topics**
+ [

## 建立使用者角色
](#role-create-procedure)
+ [

## 工作階段政策的運作方式
](#session-policy)
+ [

## 讀取/寫入存取政策範例
](#read-write-access)

## 建立使用者角色
<a name="role-create-procedure"></a>

當您建立使用者時，您會對使用者存取做出許多決策。這些決策包括使用者可以存取的 Amazon S3 儲存貯體或 Amazon EFS 檔案系統、每個 Amazon S3 儲存貯體的哪些部分，以及檔案系統中可存取哪些檔案，以及使用者擁有哪些許可 （例如， `PUT`或 `GET`)。

若要設定存取，您可以建立身分型 AWS Identity and Access Management (IAM) 政策和角色，以提供該存取資訊。在此程序中，您可以為使用者提供 Amazon S3 儲存貯體或 Amazon EFS 檔案系統的存取權，該系統是檔案操作的目標或來源。若要執行此作業，請遵循下列高層級步驟，稍後會詳細進行說明：

**建立使用者角色**

1. 建立 的 IAM 政策 AWS Transfer Family。如[為 建立 IAM 政策 AWS Transfer Family](#iam-policy-procedure)中所述。

1. 建立 IAM 角色並連接新的 IAM 政策。如需範例，請參閱 [讀取/寫入存取政策範例](#read-write-access)。

1. 在 AWS Transfer Family 和 IAM 角色之間建立信任關係。如[建立信任關係](#establish-trust-transfer)中所述。

下列程序說明如何建立 IAM 政策和角色。<a name="iam-policy-procedure"></a>

**為 建立 IAM 政策 AWS Transfer Family**

1. 在 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 中開啟 IAM 主控台。

1. 在導覽窗格中，選擇 **Policies (政策)**，然後選擇 **Create policy (建立政策)**。

1. 在 **Create Policy (建立政策)** 頁面上，選擇 **JSON** 標籤。

1. 在出現的編輯器中，將編輯器的內容取代為您要連接到 IAM 角色的 IAM 政策。

   您可以授予讀取/寫入存取權，或將使用者限制為其主目錄。如需詳細資訊，請參閱[讀取/寫入存取政策範例](#read-write-access)。

1. 選擇**檢閱政策**並提供政策的名稱和描述，然後選擇**建立政策**。

接下來，您會建立 IAM 角色並將新的 IAM 政策連接到它。<a name="iam-role-procedure"></a>

**為 建立 IAM 角色 AWS Transfer Family**

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   在**建立角色**頁面上，確定已選擇 **AWS 服務**。

1. 從服務清單選擇 **Transfer (傳輸)**，然後選擇 **Next: Permissions (下一步：許可)**。這會在 AWS Transfer Family 和 之間建立信任關係 AWS。

1. 在**連接許可政策**區段中，尋找並選擇您剛建立的政策，然後選擇**下一步：標籤**。

1. (選用) 輸入標籤的金鑰和值，然後選擇 **Next: Review (下一步：檢閱)**。

1. 在 **Review (檢閱)** 頁面上，輸入您新角色的名稱和描述，然後選擇 **Create role (建立角色)**。

接著，您可以在 AWS Transfer Family 和 之間建立信任關係 AWS。<a name="establish-trust-transfer"></a>

**建立信任關係**
**注意**  
在我們的範例中，我們同時使用 `ArnLike`和 `ArnEquals`。它們的功能相同，因此您可以在建構政策時使用。Transfer Family 文件會在條件包含萬用字元`ArnLike`時使用，`ArnEquals`並指出完全相符的條件。

1. 在 IAM 主控台中，選擇您剛建立的角色。

1. 在 **Summary (摘要)** 頁面上，選擇 **Trust relationships (信任關係)**，然後選擇 **Edit trust relationship (編輯信任關係)**。

1. 在**編輯信任關係**編輯器中，確定**服務**為 `"transfer.amazonaws.com"`。存取政策如下所示。  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "transfer.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

   建議您使用 `aws:SourceAccount` 和 `aws:SourceArn` 條件金鑰，保護自己免受混淆代理人問題的困擾。來源帳戶是伺服器的擁有者，而來源 ARN 是使用者的 ARN。例如：

   ```
   "Condition": {
       "StringEquals": {
           "aws:SourceAccount": "account_id"
       },
       "ArnLike": {
           "aws:SourceArn": "arn:aws:transfer:region:account_id:user/*"
       }
   }
   ```

   如果您想要限制特定伺服器，而不是使用者帳戶中的任何伺服器，您也可以使用 `ArnLike`條件。例如：

   ```
   "Condition": {    
       "ArnLike": {
           "aws:SourceArn": "arn:aws:transfer:region:account-id:user/server-id/*"
       }
   }
   ```
**注意**  
在上述範例中，將每個*使用者輸入預留位置*取代為您自己的資訊。

   如需混淆代理人問題的詳細資訊和更多範例，請參閱 [預防跨服務混淆代理人](confused-deputy.md)。

1. 選擇**更新信任政策**以更新存取政策。

您現在已建立 IAM 角色， AWS Transfer Family 允許 代表您呼叫 AWS 服務。您連接至您建立的 IAM 政策角色，以授予使用者存取權。在 [AWS Transfer Family 伺服器端點入門](getting-started.md)區段中，此角色和政策會指派給您的使用者。

**另請參閱**
+ 如需 IAM 角色的一般資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。
+ 若要進一步了解 Amazon S3 資源的身分型政策，請參閱《Amazon *Simple Storage Service 使用者指南*》[中的 Amazon S3 中的身分和存取管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。
+ 若要進一步了解 Amazon EFS 資源的身分型政策，請參閱《*Amazon Elastic File System 使用者指南》中的*[使用 IAM 控制檔案系統資料存取](https://docs.aws.amazon.com/efs/latest/ug/iam-access-control-nfs-efs.html)。

## 工作階段政策的運作方式
<a name="session-policy"></a>

當管理員建立角色時，該角色通常包含涵蓋多個使用案例或團隊成員的廣泛許可。如果管理員設定[主控台 URL](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)，則可以使用工作階段*政策*來減少產生工作階段的許可。例如，如果您建立具有[讀取/寫入存取權](#read-write-access)的角色，您可以設定 URL，限制使用者只能存取其主目錄。

當您以程式設計方式為角色或使用者建立臨時工作階段時，工作階段政策是做為參數傳遞的進階政策。工作階段政策有助於鎖定使用者，讓他們只能存取物件字首包含其使用者名稱的 儲存貯體部分。下圖顯示工作階段政策的許可是工作階段政策和資源型政策的交集，以及工作階段政策和身分型政策的交集。

![\[工作階段政策許可 Venn 圖表。顯示以資源為基礎的政策、以身分為基礎的政策和工作階段政策交集的有效許可。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/EffectivePermissions-session-rbp-id.png)


如需詳細資訊，請參閱《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

在 中 AWS Transfer Family，只有在您往返 Amazon S3 傳輸時，才支援工作階段政策。下列範例政策是工作階段政策，只會限制使用者對其`home`目錄的存取。注意下列事項：
+ 只有在您需要啟用跨帳戶存取時，才需要 `GetObjectACL`和 `PutObjectACL`陳述式。也就是說，您的 Transfer Family 伺服器需要存取不同帳戶中的儲存貯體。
+  工作階段政策的長度上限為 2048 個字元。如需詳細資訊，請參閱 *API 參考*中 `CreateUser`動作[的政策請求參數](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#API_CreateUser_RequestSyntax)。
+  如果您的 Amazon S3 儲存貯體使用 AWS Key Management Service (AWS KMS) 加密，您必須在政策中指定其他許可。如需詳細資訊，請參閱[資料保護和加密](encryption-at-rest.md)。
+ 若要使用工作階段政策根據使用者屬性建立存取許可，而不為每個使用者建立單獨的 IAM 角色，請參閱 [動態許可管理方法](dynamic-permission-management.md)。

****  

```
{
    "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:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObjectVersion",
                "s3:GetObjectACL",
                "s3:PutObjectACL"
            ],
            "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*"
        }
    ]
}
```

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

在先前的範例政策中，請注意 `transfer:HomeFolder`、 `transfer:HomeBucket`和 `transfer:HomeDirectory`政策參數的使用方式。這些參數是針對為使用者設定的 `HomeDirectory` 所設定，如 [HomeDirectory](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectory) 和 中所述[實作您的 API Gateway 方法](authentication-api-gateway.md#authentication-api-method)。這些參數具有下列定義：
+ `transfer:HomeBucket` 參數會取代為 的第一個元件`HomeDirectory`。
+ `transfer:HomeFolder` 參數會取代為`HomeDirectory`參數的剩餘部分。
+ `transfer:HomeDirectory` 參數已移除正斜線 (`/`)，因此可以做為`Resource`陳述式中 S3 Amazon Resource Name (ARN) 的一部分。

**注意**  
 如果您使用的是邏輯目錄，也就是使用者的 `homeDirectoryType`是 `LOGICAL`，則不支援這些政策參數 (`HomeBucket`、 `HomeDirectory`和 `HomeFolder`)。

例如，假設為 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"`限制使用者對相同路徑 的`put` 和 `get`存取`/home/bob/amazon/stuff/`。

## 讀取/寫入存取政策範例
<a name="read-write-access"></a>

**授予 Amazon S3 儲存貯體的讀取/寫入存取權**  
下列範例政策會 AWS Transfer Family 授予 Amazon S3 儲存貯體中物件的讀取/寫入存取權。

注意下列事項：
+ 將 `amzn-s3-demo-bucket` 取代為您的 Amazon S3 儲存貯體的名稱。
+ 只有在您需要啟用跨帳戶存取時，才需要 `GetObjectACL`和 `PutObjectACL`陳述式。也就是說，您的 Transfer Family 伺服器需要存取不同帳戶中的儲存貯體。
+ 只有在正在存取的 Amazon S3 儲存貯體上啟用版本控制時，才需要 `GetObjectVersion`和 `DeleteObjectVersion`陳述式。
**注意**  
如果您*曾經*為儲存貯體啟用版本控制，則需要這些許可，因為您只能在 Amazon S3 中暫停版本控制，無法將其完全關閉。如需詳細資訊，請參閱[「未版本控制」、「啟用版本控制」和「暫停版本控制」儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html#versioning-states)。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListingOfUserFolder",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "HomeDirObjectAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion", 
                "s3:GetObjectVersion",
                "s3:GetObjectVersionTagging",
                "s3:GetObjectACL",
                "s3:PutObjectACL"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

**授予檔案系統存取 Amazon EFS 檔案系統中的檔案**  


**注意**  
除了政策之外，您還必須確保 POSIX 檔案許可授予適當的存取權。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的[使用網路檔案系統 (NFS) 層級的使用者、群組和許可](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs-nfs-permissions.html)。

下列範例政策會授予 Amazon EFS 檔案系統中檔案的根檔案系統存取權。

**注意**  
在下列範例中，將*區域*取代為您的區域、將 *account-id* 取代為檔案所在的帳戶，並將 *file-system-id* 取代為 Amazon Elastic File System (Amazon EFS) 的 ID。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RootFileSystemAccess",
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientRootAccess",
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite"
            ],
            "Resource": "arn:aws:elasticfilesystem:us-east-1:123456789012:file-system/file-system-id"
        }
    ]
}
```

下列範例政策會授予使用者檔案系統存取 Amazon EFS 檔案系統中檔案的權限。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "UserFileSystemAccess",
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite"
            ],
            "Resource": "arn:aws:elasticfilesystem:us-east-1:123456789012:file-system/file-system-id"
        }
    ]
}
```