

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

# 使用預先定義的步驟
<a name="nominal-steps-workflow"></a>

當您建立工作流程時，您可以選擇新增下列其中一個本主題中討論的預先定義步驟。您也可以選擇新增自己的自訂檔案處理步驟。如需詳細資訊，請參閱[使用自訂檔案處理步驟](custom-step-details.md)。

**Topics**
+ [複製檔案](#copy-step-details)
+ [解密檔案](#decrypt-step-details)
+ [標籤檔案](#tag-step-details)
+ [刪除檔案](#delete-step-details)
+ [工作流程的命名變數](#workflow-named-variables)
+ [範例標籤和刪除工作流程](#sourcefile-workflow)

## 複製檔案
<a name="copy-step-details"></a>

複製檔案步驟會在新的 Amazon S3 位置建立上傳檔案的副本。目前，您只能搭配 Amazon S3 使用複製檔案步驟。

下列複製檔案步驟會將檔案複製到 *amzn-s3-demo-destination-bucket* 中的 `test` 資料夾。

如果複製檔案步驟不是工作流程的第一個步驟，您可以指定**檔案位置**。透過指定檔案位置，您可以複製上一個步驟中使用的檔案或上傳的原始檔案。您可以使用此功能來製作原始檔案的多個副本，同時保持來源檔案完整，以供檔案封存和記錄保留。如需範例，請參閱 [範例標籤和刪除工作流程](#sourcefile-workflow)。

![\[工作流程畫面，已選取複製從上一個步驟...建立的檔案。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy.png)


### 提供儲存貯體和金鑰詳細資訊
<a name="copy-provide-bucket"></a>

您必須提供複製檔案步驟目的地的儲存貯體名稱和金鑰。金鑰可以是路徑名稱或檔案名稱。是否將金鑰視為路徑名稱或檔案名稱，取決於您是否以正斜線 (`/`) 字元結束金鑰。

如果最後一個字元是 `/`，您的檔案會複製到 資料夾，且其名稱不會變更。如果最後一個字元是英數字元，您上傳的檔案會重新命名為金鑰值。在這種情況下，如果具有該名稱的檔案已存在，則行為取決於**覆寫現有**欄位的設定。
+ 如果選取**覆寫現有**檔案，則會將現有檔案取代為正在處理的檔案。
+ 如果未選取**覆寫現有** ，則不會發生任何情況，且工作流程處理會停止。
**提示**  
如果在相同的檔案路徑上執行並行寫入，可能會在覆寫檔案時產生非預期的行為。

例如，如果您的金鑰值為 `test/`，您上傳的檔案會複製到 `test` 資料夾。如果您的金鑰值為 `test/today`，則您上傳****的每個檔案都會複製到 `today` `test` 資料夾中名為 的檔案，而每個後續檔案都會覆寫先前的檔案。

**注意**  
Amazon S3 支援儲存貯體與物件，且沒有任何階層。不過，您可以在物件金鑰名稱中使用字首和分隔符號來暗示階層，並以類似於資料夾的方式整理資料。

### 在複製檔案步驟中使用具名變數
<a name="named-variable-copy"></a>

在複製檔案步驟中，您可以使用 變數，將檔案動態複製到使用者特定的資料夾。目前，您可以使用 `${transfer:UserName}`或 `${transfer:UploadDate}`作為變數，將檔案複製到上傳檔案之特定使用者的目的地位置，或根據目前日期。

在下列範例中，如果使用者`richard-roe`上傳檔案，則會將其複製到 `amzn-s3-demo-destination-bucket/richard-roe/processed/` 資料夾。如果使用者`mary-major`上傳檔案，則會將其複製到 `amzn-s3-demo-destination-bucket/mary-major/processed/` 資料夾。

![\[複製步驟的參數畫面，顯示使用 參數化的儲存貯體和金鑰UserName。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-dynamic.png)


同樣地，您可以使用 `${transfer:UploadDate}`做為變數，將檔案複製到目前日期名為 的目的地位置。在下列範例中，如果您在 2022 年 2 月 1 `${transfer:UploadDate}/processed` 日將目的地設定為 ，上傳的檔案會複製到 `amzn-s3-demo-destination-bucket/2022-02-01/processed/` 資料夾。

![\[複製步驟的參數畫面，顯示使用 參數化的儲存貯體和金鑰UploadDate。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-dynamic-date.png)


您也可以結合這兩個變數的功能。例如，您可以將**目的地金鑰字首**設定為 **folder/\$1\$1transfer:UserName\$1/\$1\$1transfer:UploadDate\$1/**，這會建立巢狀資料夾，例如 `folder/marymajor/2023-01-05/`。

### 複製步驟的 IAM 許可
<a name="copy-step-iam"></a>

若要允許複製步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
```

**注意**  
只有在您未選取**覆寫現有**時，才需要 `s3:ListBucket`許可。此許可會檢查您的儲存貯體，以查看是否有同名的檔案已存在。如果您已選取**覆寫現有**檔案，則工作流程不需要檢查檔案，而且只能寫入檔案。  
如果您的 Amazon S3 檔案有標籤，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 解密檔案
<a name="decrypt-step-details"></a>

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

### 支援的對稱加密演算法
<a name="symmetric-algorithms"></a>

對於 PGP 解密，Transfer Family 支援對稱加密演算法，這些演算法用於加密 PGP 檔案中的實際檔案資料。
+ 如需支援對稱加密演算法的詳細資訊，請參閱 [PGP 對稱加密演算法](key-management.md#pgp-symmetric-algorithms)。
+ 如需有關搭配這些對稱演算法使用的 PGP 金鑰對演算法的資訊，請參閱 [PGP 金鑰對演算法](key-management.md#pgp-key-algorithms)。

### 在工作流程中使用 PGP 解密
<a name="configure-decryption"></a>

Transfer Family 內建支援 Pretty Good Privacy (PGP) 解密。您可以在透過 SFTP、FTPS 或 FTP 上傳到 Amazon Simple Storage Service (Amazon S3) 或 Amazon Elastic File System (Amazon EFS) 的檔案上使用 PGP 解密。

若要使用 PGP 解密，您必須建立和存放用於檔案解密的 PGP 私有金鑰。然後，您的使用者可以在將檔案上傳至 Transfer Family 伺服器之前，使用對應的 PGP 加密金鑰來加密檔案。收到加密的檔案後，您可以在工作流程中解密這些檔案。如需詳細教學，請參閱[設定用於解密檔案的受管工作流程](workflow-decrypt-tutorial.md)。

如需支援的 PGP 演算法和建議的相關資訊，請參閱 [PGP 加密和解密演算法](key-management.md#pgp-encryption-algorithms)。

**在工作流程中使用 PGP 解密**

1. 識別 Transfer Family 伺服器以託管您的工作流程，或建立新的工作流程。您需要有伺服器 ID，才能將 PGP 金鑰 AWS Secrets Manager 以正確的秘密名稱存放在 中。

1. 將您的 PGP 金鑰存放在所需的秘密名稱 AWS Secrets Manager 下。如需詳細資訊，請參閱[管理 PGP 金鑰](manage-pgp-keys.md)。工作流程可以根據 Secrets Manager 中的秘密名稱，自動找到要用於解密的正確 PGP 金鑰。
**注意**  
當您將秘密存放在 Secrets Manager 時， AWS 帳戶 會產生費用。如需關於定價的資訊，請參閱[AWS Secrets Manager 定價](https://aws.amazon.com/secrets-manager/pricing)。

1. 使用您的 PGP 金鑰對加密檔案。（如需支援的用戶端清單，請參閱 [支援的 PGP 用戶端](pgp-key-clients.md)。) 如果您使用命令列，請執行下列命令。若要使用此命令，請將 `username@example.com`取代為您用來建立 PGP 金鑰對的電子郵件地址。`testfile.txt` 將 取代為您要加密的檔案名稱。

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

1. 將加密的檔案上傳至 Transfer Family 伺服器。

1. 在工作流程中設定解密步驟。如需詳細資訊，請參閱[新增解密步驟](#decrypt-step-procedure)。

### 新增解密步驟
<a name="decrypt-step-procedure"></a>

解密步驟會解密在工作流程中上傳至 Amazon S3 或 Amazon EFS 的加密檔案。如需設定解密的詳細資訊，請參閱 [在工作流程中使用 PGP 解密](#configure-decryption)。

當您為工作流程建立解密步驟時，您必須指定解密檔案的目的地。如果檔案已存在於目的地位置，您也必須選取是否覆寫現有檔案。您可以使用 Amazon CloudWatch Logs 監控解密工作流程結果，並即時取得每個檔案的稽核日誌。

選擇步驟的 **Decrypt 檔案類型**後，即會顯示**設定參數**頁面。填寫**設定 PGP 解密參數**區段的值。

可用的選項如下所示：
+ **步驟名稱** – 輸入步驟的描述性名稱。
+ **檔案位置** – 透過指定檔案位置，您可以解密上一個步驟中使用的檔案或上傳的原始檔案。
**注意**  
如果此步驟是工作流程的第一個步驟，則無法使用此參數。
+ **解密檔案的目的地** – 選擇 Amazon S3 儲存貯體或 Amazon EFS 檔案系統做為解密檔案的目的地。
  + 如果您選擇 Amazon S3，則必須提供目的地儲存貯體名稱和目的地金鑰字首。若要依使用者名稱參數化目的地金鑰字首，請在目的地金鑰字首中輸入 **\$1\$1transfer:UserName\$1** 。 ****同樣地，若要依上傳日期參數化目的地金鑰字首，請在目的地金鑰字首輸入 **\$1\$1Transfer:UploadDate\$1** 。 ****
  + 如果您選擇 Amazon EFS，則必須提供目的地檔案系統和路徑。
**注意**  
您在此處選擇的儲存選項必須與與此工作流程相關聯的 Transfer Family 伺服器所使用的儲存系統相符。否則，當您嘗試執行此工作流程時，會收到錯誤。
+ **覆寫現有**檔案 – 如果您上傳檔案，且目的地已存在具有相同檔案名稱的檔案，則行為取決於此參數的設定：
  + 如果選取**覆寫現有**檔案，則會將現有檔案取代為正在處理的檔案。
  + 如果未選取**覆寫現有** ，則不會發生任何情況，且工作流程處理會停止。
**提示**  
如果在相同的檔案路徑上執行並行寫入，可能會在覆寫檔案時產生非預期的行為。

下列螢幕擷取畫面顯示您可能會為解密檔案步驟選擇的選項範例。

![\[AWS Transfer Family 主控台，顯示使用範例值設定 PGP 解密參數區段。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-decrypt-details.png)


### 解密步驟的 IAM 許可
<a name="decrypt-step-iam"></a>

若要允許解密步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
    "Sid": "ListBucket",
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": [
        "arn:aws:s3:::amzn-s3-demo-destination-bucket"
    ]
}, {
    "Sid": "HomeDirObjectAccess",
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion"
    ],
    "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}, {
    "Sid": "Decrypt",
    "Effect": "Allow",
    "Action": [
        "secretsmanager:GetSecretValue",
    ],
    "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*"
}
```

**注意**  
只有在您未選取**覆寫現有**時，才需要 `s3:ListBucket`許可。此許可會檢查您的儲存貯體，以查看是否有同名的檔案已存在。如果您已選取**覆寫現有**檔案，則工作流程不需要檢查檔案，而且只能寫入檔案。  
如果您的 Amazon S3 檔案有標籤，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 標籤檔案
<a name="tag-step-details"></a>

若要標記傳入檔案以供進一步下游處理，請使用標籤步驟。輸入您要指派給傳入檔案的標籤值。目前，只有在您將 Amazon S3 用於 Transfer Family 伺服器儲存體時，才支援標籤操作。

下列範例標籤步驟會分別指派 `scan_outcome`和 `clean`做為標籤索引鍵和值。

![\[工作流程畫面顯示標記步驟的詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-tag.png)


若要允許標籤步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
            "Sid": "Tag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
}
```

**注意**  
如果您的工作流程包含複製或解密步驟之前執行的標籤步驟，您需要將一或兩個許可新增至 IAM 政策。  
`s3:GetObjectTagging` 針對未進行版本控制的 Amazon S3 檔案新增 。
`s3:GetObjectVersionTagging` 為版本控制的 Amazon S3 檔案新增 。

## 刪除檔案
<a name="delete-step-details"></a>

若要從先前的工作流程步驟中刪除已處理的檔案，或刪除最初上傳的檔案，請使用刪除檔案步驟。

![\[工作流程畫面顯示刪除步驟的詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-delete.png)


若要允許刪除步驟成功，請確定工作流程的執行角色包含下列許可。

```
{
            "Sid": "Delete",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:secretsmanager:region:account-ID:secret:aws/transfer/*"
        }
```

## 工作流程的命名變數
<a name="workflow-named-variables"></a>

對於複製和解密步驟，您可以使用 變數來動態執行動作。目前， AWS Transfer Family 支援下列具名變數。
+ 使用 根據上傳檔案的使用者`${transfer:UserName}`，將檔案複製或解密至目的地。
+ 使用 根據目前日期`${transfer:UploadDate}`將檔案複製或解密至目的地位置。

## 範例標籤和刪除工作流程
<a name="sourcefile-workflow"></a>

下列範例說明的工作流程會標記需要由下游應用程式處理的傳入檔案，例如資料分析平台。標記傳入檔案之後，工作流程接著會刪除最初上傳的檔案，以節省儲存成本。

------
#### [ Console ]

**範例標籤和移動工作流程**

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

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

1. 在**工作流程**頁面上，選擇**建立工作流程**。

1. 在**建立工作流程**頁面上，輸入描述。此描述會顯示在**工作流程**頁面上。

1. 新增第一個步驟 （複製）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**複製檔案**，然後選擇**下一步**。

   1. 輸入步驟名稱，然後選取目的地儲存貯體和金鑰字首。  
![\[工作流程畫面顯示複製步驟的詳細資訊，顯示目的地儲存貯體和金鑰字首。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-copy-first-step.png)

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**來新增步驟並繼續。

1. 新增第二個步驟 （標籤）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**標籤檔案**，然後選擇**下一步**。

   1. 輸入步驟名稱。

   1. 針對**檔案位置**，選取**標記從上一個步驟建立的檔案**。

   1. 輸入**Key** (索引鍵) 和 **Value** (值)。  
![\[標記工作流程步驟的組態畫面，並選取標記從上一個步驟建立的檔案選項按鈕。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-tag.png)

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**以新增步驟並繼續。

1. 新增第三個步驟 （刪除）。

   1. 在**名義步驟**區段中，選擇**新增步驟**。

   1. 選擇**刪除檔案**，然後選擇**下一步**。  
![\[刪除工作流程步驟的組態畫面，並選取刪除原始來源檔案選項按鈕。\]](http://docs.aws.amazon.com/zh_tw/transfer/latest/userguide/images/workflows-step-delete.png)

   1. 輸入步驟名稱。

   1. 針對**檔案位置**，選取**刪除原始來源檔案**。

   1. 選擇**下一步**，然後檢閱步驟的詳細資訊。

   1. 選擇**建立步驟**以新增步驟並繼續。

1. 檢閱工作流程組態，然後選擇**建立工作流程**。

------
#### [ CLI ]

**範例標籤和移動工作流程**

1. 將下列程式碼儲存至檔案；例如 `tagAndMoveWorkflow.json`。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   [
      {
          "Type": "COPY",
          "CopyStepDetails": {
             "Name": "CopyStep",
             "DestinationFileLocation": {
                "S3FileLocation": {
                   "Bucket": "amzn-s3-demo-bucket",
                   "Key": "test/"
                }
             }
          }
      },
      {
          "Type": "TAG",
          "TagStepDetails": {
             "Name": "TagStep",
             "Tags": [
                {
                   "Key": "name",
                   "Value": "demo"
                }
             ],
             "SourceFileLocation": "${previous.file}"
          }
      },
      {
         "Type": "DELETE",
         "DeleteStepDetails":{
            "Name":"DeleteStep",
            "SourceFileLocation": "${original.file}"
         }
     }
   ]
   ```

   第一個步驟會將上傳的檔案複製到新的 Amazon S3 位置。第二個步驟會將標籤 （鍵/值對） 新增至複製到新位置的檔案 (`previous.file`)。最後，第三個步驟會刪除原始檔案 (`original.file`)。

1. 從儲存的檔案建立工作流程。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   aws transfer create-workflow --description "short-description" --steps file://path-to-file --region region-ID
   ```

   例如：

   ```
   aws transfer create-workflow --description "copy-tag-delete workflow" --steps file://tagAndMoveWorkflow.json --region us-east-1
   ```
**注意**  
如需使用檔案載入參數的詳細資訊，請參閱[如何從檔案載入參數](https://docs.aws.amazon.com//cli/latest/userguide/cli-usage-parameters-file.html)。

1. 更新現有的伺服器。
**注意**  
此步驟假設您已經有 Transfer Family 伺服器，而且您想要將工作流程與其建立關聯。如果沒有，請參閱 [設定 SFTP、FTPS 或 FTP 伺服器端點](tf-server-endpoint.md)。將每個 `user input placeholder` 替換成您自己的資訊。

   ```
   aws transfer update-server --server-id server-ID --region region-ID 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "workflow-ID","ExecutionRole": "execution-role-ARN"}]}'
   ```

   例如：

   ```
   aws transfer update-server --server-id s-1234567890abcdef0 --region us-east-2 
     --workflow-details '{"OnUpload":[{ "WorkflowId": "w-abcdef01234567890","ExecutionRole": "arn:aws:iam::111111111111:role/nikki-wolf-execution-role"}]}'
   ```

------