

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

# 設定用於解密檔案的受管工作流程
<a name="workflow-decrypt-tutorial"></a>

本教學課程說明如何設定包含解密步驟的受管工作流程。本教學課程也會示範如何將加密檔案上傳至 Amazon S3 儲存貯體，然後檢視相同儲存貯體中的解密檔案。

**注意**  
 AWS 儲存部落格有一篇文章，說明如何簡單地解密檔案，而無需使用 Transfer Family Managed 工作流程撰寫任何程式碼、[使用 PGP 和 加密和解密檔案 AWS Transfer Family](https://aws.amazon.com/blogs/storage/encrypt-and-decrypt-files-with-pgp-and-aws-transfer-family/)。

**Topics**
+ [步驟 1：設定執行角色](#create-example-execution-role)
+ [步驟 2：建立受管工作流程](#create-example-workflow)
+ [步驟 3：將工作流程新增至伺服器並建立使用者](#add-workflow-to-server)
+ [步驟 4：建立 PGP 金鑰對](#create-example-pgp-key-pair)
+ [步驟 5：將 PGP 私有金鑰存放在 AWS Secrets Manager](#output-private-key-to-secrets)
+ [步驟 6：加密檔案](#encrypt-example-file)
+ [步驟 7：執行工作流程並檢視結果](#test-decrypt-workflow)

## 步驟 1：設定執行角色
<a name="create-example-execution-role"></a>

建立 Transfer Family 可用來啟動工作流程的 AWS Identity and Access Management (IAM) 執行角色。中說明建立執行角色的程序[工作流程的 IAM 政策](workflow-execution-role.md)。

**注意**  
在建立執行角色的過程中，請務必在執行角色與 Transfer Family 之間建立信任關係，如中所述[建立信任關係](requirements-roles.md#establish-trust-transfer)。

下列執行角色政策包含啟動您在本教學課程中建立的工作流程所需的所有必要許可。若要使用此範例政策，請以您自己的資訊取代 `user input placeholders`。`amzn-s3-demo-bucket` 將 取代為您上傳加密檔案的 Amazon S3 儲存貯體名稱。

**注意**  
並非每個工作流程都需要此範例中列出的每個許可。您可以根據特定工作流程中的步驟類型來限制許可。每個預先定義步驟類型所需的許可如 中所述[使用預先定義的步驟](nominal-steps-workflow.md)。自訂步驟所需的許可如 中所述[自訂步驟的 IAM 許可](custom-step-details.md#custom-step-iam)。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "WorkflowsS3Permissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:ListBucket",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "DecryptSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:aws/transfer/*"
        }
    ]
}
```

## 步驟 2：建立受管工作流程
<a name="create-example-workflow"></a>

現在您需要建立包含解密步驟的工作流程。

**建立包含解密步驟的工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**工作流程**，然後選擇**建立工作流程**。

1. 輸入下列詳細資訊：
   + 輸入描述，例如 **Decrypt workflow example**。
   + 在**名義步驟**區段中，選擇**新增步驟**。

1. 針對**選擇步驟類型**，選擇**解密檔案**，然後選擇**下一步**。

1. <a name="configure-destination-details"></a>在**設定參數**對話方塊中，指定下列項目：
   + 輸入描述性步驟名稱，例如 **decrypt-step**。步驟名稱中不允許空格。
   + 針對**解密檔案的目的地**，選擇 Amazon S3。
   + 針對**目的地儲存貯體名稱**，選擇您在步驟 1 中建立的 IAM 政策`amzn-s3-demo-bucket`中指定為 的相同 Amazon S3 儲存貯體。
   + 針對**目的地金鑰字**首，輸入您要在目的地儲存貯體中存放解密檔案的字首 （資料夾） 名稱，例如 **decrypted-files/**。
**注意**  
請務必將結尾斜線 (**/**) 新增至字首。
   + 在本教學課程中，請清除**覆寫現有的** 。清除此設定時，如果您嘗試解密具有現有檔案相同名稱的檔案，工作流程處理會停止，而且不會處理新檔案。

   選擇**下一步**以移至檢閱畫面。

1. 檢閱步驟的詳細資訊。如果一切正確，請選擇**建立步驟**。

1. 您的工作流程只需要單一解密步驟，因此無需設定其他步驟。選擇**建立工作流程**以建立新的工作流程。

請注意新工作流程的工作流程 ID。下一個步驟將需要此 ID。本教學課程使用 *`w-1234abcd5678efghi`*作為範例工作流程 ID。

## 步驟 3：將工作流程新增至伺服器並建立使用者
<a name="add-workflow-to-server"></a>

現在您已有一個具有解密步驟的工作流程，您必須將其與 Transfer Family 伺服器建立關聯。本教學課程說明如何將工作流程連接至現有的 Transfer Family 伺服器。或者，您可以建立新的伺服器以搭配工作流程使用。

將工作流程連接到伺服器之後，您必須建立可 SFTP 到伺服器的使用者，並觸發工作流程執行。

**設定 Transfer Family 伺服器以執行工作流程**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**伺服器**，然後從清單中選擇伺服器。請確定此伺服器支援 SFTP 通訊協定。

1. 在伺服器的詳細資訊頁面上，向下捲動至**其他詳細資訊**區段，然後選擇**編輯**。

1. 在**編輯其他詳細資訊**頁面的**受管工作流程**區段中，選擇您的工作流程，然後選擇對應的執行角色。
   + 針對**完整檔案上傳的工作流程**，請選擇您在 中建立的工作流程[步驟 2：建立受管工作流程](#create-example-workflow)，例如 **w-1234abcd5678efghi**。
   + 針對**受管工作流程執行角色**，選擇您在 中建立的 IAM 角色[步驟 1：設定執行角色](#create-example-execution-role)。

1. 捲動至頁面底部，然後選擇**儲存**以儲存變更。

請注意您正在使用的伺服器的 ID。您用來存放 PGP 金鑰的 AWS Secrets Manager 秘密名稱部分是以伺服器 ID 為基礎。

**新增可觸發工作流程的使用者**

1. 在 https：//[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 開啟 AWS Transfer Family 主控台。

1. 在左側導覽窗格中，選擇**伺服器**，然後選擇您用於解密工作流程的伺服器。

1. 在伺服器詳細資訊頁面上，向下捲動至**使用者**區段，然後選擇**新增使用者**。

1. 針對您的新使用者，輸入下列詳細資訊：
   + 對於 **User name** (使用者名稱)，請輸入 **decrypt-user**。
   + 針對**角色**，選擇可存取您伺服器的使用者角色。
   + 針對**主目錄**，選擇您先前使用的 Amazon S3 儲存貯體，例如 `amzn-s3-demo-bucket`。
   + 對於 **SSH 公有金鑰**，請將 貼入對應至您擁有之私有金鑰的公有金鑰。如需詳細資訊，請參閱[為服務受管使用者產生 SSH 金鑰](sshkeygen.md)。

1. 選擇**新增**以儲存您的新使用者。

請注意此伺服器的 Transfer Family 使用者名稱。秘密部分取決於使用者的名稱。為了簡化，本教學課程使用預設秘密，可供伺服器的任何使用者使用。

## 步驟 4：建立 PGP 金鑰對
<a name="create-example-pgp-key-pair"></a>

使用其中一個[支援的 PGP 用戶端](pgp-key-clients.md)來產生 PGP 金鑰對。此程序會在 中詳細說明[產生 PGP 金鑰](generate-pgp-keys.md)。

**產生 PGP 金鑰對**

1. 在本教學課程中，您可以使用 `gpg`(`GnuPG`) 2.0.22 版用戶端來產生使用 RSA 做為加密演算法的 PGP 金鑰對。針對此用戶端，請執行下列命令，並提供電子郵件地址和密碼短語。您可以使用任何您喜歡的名稱或電子郵件地址。請務必記住您使用的值，因為您稍後需要在教學課程中輸入這些值。

   ```
   gpg --gen-key
   ```
**注意**  
如果您使用的是 2`GnuPG`.3.0 版或更新版本，則必須執行 `gpg --full-gen-key`。當系統提示要建立的金鑰類型時，請選擇 RSA 或 ECC。如果您選擇 **ECC**，您可以從 中選擇橢圓曲線Curve25519的 NISTBrainPool和 。

1. 執行下列命令來匯出私有金鑰。`user@example.com` 將 取代為您產生金鑰時使用的電子郵件地址。

   ```
   gpg --output workflow-tutorial-key.pgp --armor --export-secret-key user@example.com
   ```

   此命令會將私有金鑰匯出至 **workflow-tutorial-key.pgp** 檔案。您可以為輸出檔案命名任何您喜歡的名稱。您也可以在新增私有金鑰檔案後將其刪除 AWS Secrets Manager。

## 步驟 5：將 PGP 私有金鑰存放在 AWS Secrets Manager
<a name="output-private-key-to-secrets"></a>

您需要以非常具體的方式將私有金鑰存放在 Secrets Manager 中，以便在工作流程對上傳的檔案執行解密步驟時，工作流程可以找到私有金鑰。

**注意**  
當您將秘密存放在 Secrets Manager 時， AWS 帳戶 會產生費用。如需關於定價的資訊，請參閱[AWS Secrets Manager 定價](https://aws.amazon.com/secrets-manager/pricing)。

**在 Secrets Manager 中存放 PGP 私有金鑰**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 開啟 AWS Secrets Manager 主控台。

1. 在左側導覽窗格中，選擇**秘密**。

1. 在**秘密**頁面上，選擇**儲存新的秘密**。

1. 在**選擇秘密類型**頁面上，針對**秘密類型**，選擇**其他類型的秘密**。

1. 在**鍵/值對**區段中，選擇**鍵/值**索引標籤。
   + **金鑰** – 輸入 **PGPPrivateKey**。
   + **value** – 將私有金鑰的文字貼到值欄位中。

1. 選擇**新增資料列**，然後在**鍵/值對**區段中，選擇**鍵/值**索引標籤。
   + **金鑰** – 輸入 **PGPPassphrase**。
   + **value** – 輸入您在 中產生 PGP 金鑰對時所使用的密碼短語[步驟 4：建立 PGP 金鑰對](#create-example-pgp-key-pair)。

1. 選擇**下一步**。

1. 在**設定秘密**頁面上，輸入秘密的名稱和描述。您可以為特定使用者或可供所有使用者使用的秘密建立秘密。如果您的伺服器 ID 為 *`s-11112222333344445`*，您可以如下所示命名秘密。
   + 若要為所有使用者建立預設秘密，請命名秘密 **aws/transfer/*s-11112222333344445*/@pgp-default**。
   + 若要僅為您先前建立的使用者建立秘密，請將秘密命名為 **aws/transfer/*s-11112222333344445*/decrypt-user**。

1. 選擇**下一步**，然後在**設定輪換**頁面上接受預設值。然後選擇**下一步**。

1. 在**檢閱**頁面上，選擇**存放**以建立和存放秘密。

如需將 PGP 私有金鑰新增至 Secrets Manager 的詳細資訊，請參閱[使用 AWS Secrets Manager 來存放 PGP 金鑰](manage-pgp-keys.md#store-pgp-key-details)。

## 步驟 6：加密檔案
<a name="encrypt-example-file"></a>

使用 `gpg`程式來加密要在工作流程中使用的檔案。執行下列命令來加密檔案：

```
gpg -e -r marymajor@example.com --openpgp testfile.txt
```

執行此命令之前，請注意下列事項：
+ 對於 `-r`引數，請將 `marymajor@example.com`取代為您建立 PGP 金鑰對時使用的電子郵件地址。
+ `--openpgp` 旗標為選用。此旗標可讓加密的檔案符合 [OpenPGP RFC4880](https://www.rfc-editor.org/rfc/rfc4880) 標準。
+ 此命令會在**testfile.txt.gpg**與 相同的位置建立名為 的檔案**testfile.txt**。

**重要**  
加密檔案以搭配 AWS Transfer Family 工作流程使用時，請務必使用 `-r` 參數來指定非匿名收件人。匿名加密 （未指定收件人） 可能會導致工作流程中的解密失敗，因為系統無法識別要用於解密的金鑰。此問題的偵錯資訊可在 取得[對匿名收件人加密問題進行故障診斷](workflow-issues.md#workflows-decrypt-anonymous)。

## 步驟 7：執行工作流程並檢視結果
<a name="test-decrypt-workflow"></a>

若要執行工作流程，您可以使用您在步驟 3 中建立的使用者連線到 Transfer Family 伺服器。然後，您可以查看您在步驟 2.5 中指定的 Amazon S3 儲存貯體，設定目的地參數以查看解密的檔案。 [Step 5](#configure-destination-details)

**執行解密工作流程**

1. 開啟命令終端機。

1. 執行下列命令，`your-endpoint`將 取代為您實際的端點，並將 `transfer-key`取代為您使用者的 SSH 私有金鑰：

   ```
   sftp -i transfer-key decrypt-user@your-endpoint
   ```

   例如，如果私有金鑰存放在 中`~/.ssh/decrypt-user`，且您的端點為 `s-11112222333344445.server.transfer.us-east-2.amazonaws.com`，則命令如下：

   ```
   sftp -i  ~/.ssh/decrypt-user decrypt-user@s-11112222333344445.server.transfer.us-east-2.amazonaws.com
   ```

1. 執行 `pwd` 命令。如果成功，此命令將傳回下列項目：

   ```
   Remote working directory: /amzn-s3-demo-bucket/decrypt-user
   ```

   您的目錄會反映 Amazon S3 儲存貯體的名稱。

1. 執行下列命令來上傳檔案並觸發工作流程以執行：

   ```
   put testfile.txt.gpg
   ```

1. 對於解密檔案的目的地，您在建立工作流程時指定 `decrypted-files/` 資料夾。現在，您可以導覽至該資料夾並列出內容。

   ```
   cd ../decrypted-files/
   ls
   ```

   如果成功，`ls`命令會列出 `testfile.txt` 檔案。您可以下載此檔案，並確認它與您先前加密的原始檔案相同。