使用預先定義的步驟 - AWS Transfer Family

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

使用預先定義的步驟

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

複製檔案

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

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

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

工作流程畫面,已選取複製從上一個步驟...建立的檔案。

提供儲存貯體和金鑰詳細資訊

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

如果最後一個字元是 /,您的檔案會複製到 資料夾,其名稱不會變更。如果最後一個字元是英數字元,您上傳的檔案會重新命名為金鑰值。在此情況下,如果具有該名稱的檔案已存在,則行為取決於覆寫現有欄位的設定。

  • 如果選取覆寫現有檔案,則會將現有檔案取代為正在處理的檔案。

  • 如果未選取覆寫現有 ,則不會發生任何情況,且工作流程處理會停止。

    提示

    如果在相同的檔案路徑上執行並行寫入,可能會在覆寫檔案時產生非預期的行為。

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

注意

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

在複製檔案步驟中使用具名變數

在複製檔案步驟中,您可以使用 變數,將檔案動態複製到使用者特定的資料夾。目前,您可以使用 ${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。

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

複製步驟的參數畫面,顯示使用 參數化的儲存貯體和金鑰UploadDate。

您也可以將這些變數結合其功能一起使用。例如,您可以將目的地金鑰字首設定為 folder/${transfer:UserName}/${transfer:UploadDate}/,這會建立巢狀資料夾,例如 folder/marymajor/2023-01-05/

複製步驟的 IAM 許可

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

{ "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 檔案新增 。

解密檔案

AWS 儲存部落格有一篇文章,說明如何簡單地解密檔案,而無需使用 Transfer Family Managed 工作流程撰寫任何程式碼、使用 PGP 和 加密和解密檔案 AWS Transfer Family

支援的對稱加密演算法

對於 PGP 解密,Transfer Family 支援對稱加密演算法,用於加密 PGP 檔案中的實際檔案資料。

在工作流程中使用 PGP 解密

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

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

如需支援的 PGP 演算法和建議的相關資訊,請參閱 PGP 加密和解密演算法

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

  2. 將您的 PGP 金鑰存放在所需的秘密名稱 AWS Secrets Manager 下。如需詳細資訊,請參閱管理 PGP 金鑰。工作流程可以根據 Secrets Manager 中的秘密名稱,自動找到要用於解密的正確 PGP 金鑰。

    注意

    當您將秘密存放在 Secrets Manager 時, AWS 帳戶 會產生費用。如需定價的資訊,請參閱 AWS Secrets Manager 定價

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

    gpg -e -r username@example.com testfile.txt
    重要

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

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

  5. 在工作流程中設定解密步驟。如需詳細資訊,請參閱新增解密步驟

新增解密步驟

解密步驟會解密在工作流程中上傳至 Amazon S3 或 Amazon EFS 的加密檔案。如需設定解密的詳細資訊,請參閱 在工作流程中使用 PGP 解密

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

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

可用的選項如下所示:

  • 步驟名稱 – 輸入步驟的描述性名稱。

  • 檔案位置 – 透過指定檔案位置,您可以解密上一個步驟中使用的檔案或上傳的原始檔案。

    注意

    如果此步驟是工作流程的第一個步驟,則無法使用此參數。

  • 解密檔案的目的地 – 選擇 Amazon S3 儲存貯體或 Amazon EFS 檔案系統做為解密檔案的目的地。

    • 如果您選擇 Amazon S3,則必須提供目的地儲存貯體名稱和目的地金鑰字首。若要依使用者名稱參數化目的地金鑰字首,請在目的地金鑰字首中輸入 ${transfer:UserName}同樣地,若要依上傳日期參數化目的地金鑰字首,請在目的地金鑰字首輸入 ${Transfer:UploadDate}

    • 如果您選擇 Amazon EFS,則必須提供目的地檔案系統和路徑。

    注意

    您在此處選擇的儲存選項必須與與此工作流程相關聯的 Transfer Family 伺服器所使用的儲存系統相符。否則,當您嘗試執行此工作流程時,將會收到錯誤。

  • 覆寫現有檔案 – 如果您上傳檔案,且目的地已存在具有相同檔案名稱的檔案,則行為取決於此參數的設定:

    • 如果選取覆寫現有檔案,則會將現有檔案取代為正在處理的檔案。

    • 如果未選取覆寫現有 ,則不會發生任何情況,且工作流程處理會停止。

      提示

      如果在相同的檔案路徑上執行並行寫入,可能會在覆寫檔案時產生非預期的行為。

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

AWS Transfer Family 主控台,顯示使用範例值設定 PGP 解密參數區段。

解密步驟的 IAM 許可

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

{ "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 檔案新增 。

標籤檔案

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

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

工作流程畫面顯示標記步驟的詳細資訊。

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

{ "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 檔案新增 。

刪除檔案

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

工作流程畫面顯示刪除步驟的詳細資訊。

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

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

工作流程的命名變數

對於複製和解密步驟,您可以使用 變數動態執行動作。目前, AWS Transfer Family 支援下列具名變數。

  • 根據上傳檔案的使用者${transfer:UserName},使用 將檔案複製或解密至目的地。

  • 使用 根據目前日期${transfer:UploadDate}將檔案複製或解密至目的地位置。

範例標籤和刪除工作流程

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

Console
範例標籤和移動工作流程
  1. 在 https://https://console.aws.amazon.com/transfer/ 開啟 AWS Transfer Family 主控台。

  2. 在左側導覽窗格中,選擇工作流程

  3. 工作流程頁面上,選擇建立工作流程

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

  5. 新增第一個步驟 (複製)。

    1. 名義步驟區段中,選擇新增步驟

    2. 選擇複製檔案,然後選擇下一步

    3. 輸入步驟名稱,然後選取目的地儲存貯體和金鑰字首。

      工作流程畫面顯示複製步驟的詳細資訊,顯示目的地儲存貯體和金鑰字首。
    4. 選擇下一步,然後檢閱步驟的詳細資訊。

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

  6. 新增第二個步驟 (標籤)。

    1. 名義步驟區段中,選擇新增步驟

    2. 選擇標籤檔案,然後選擇下一步

    3. 輸入步驟名稱。

    4. 針對檔案位置,選取標記從上一個步驟建立的檔案

    5. 輸入Key (索引鍵) 和 Value (值)。

      標記工作流程步驟的組態畫面,並選取標記從上一個步驟建立的檔案選項按鈕。
    6. 選擇下一步,然後檢閱步驟的詳細資訊。

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

  7. 新增第三個步驟 (刪除)。

    1. 名義步驟區段中,選擇新增步驟

    2. 選擇刪除檔案,然後選擇下一步

      刪除工作流程步驟的組態畫面,並選取刪除原始來源檔案選項按鈕。
    3. 輸入步驟名稱。

    4. 針對檔案位置,選取刪除原始來源檔案

    5. 選擇下一步,然後檢閱步驟的詳細資訊。

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

  8. 檢閱工作流程組態,然後選擇建立工作流程

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)。

  2. 從儲存的檔案建立工作流程。將每個 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
    注意

    如需使用檔案載入參數的詳細資訊,請參閱如何從檔案載入參數

  3. 更新現有的伺服器。

    注意

    此步驟假設您已經有 Transfer Family 伺服器,而且您想要將工作流程與其建立關聯。如果沒有,請參閱 設定 SFTP、FTPS 或 FTP 伺服器端點。將每個 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"}]}'