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

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

使用預先定義的步驟

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

複製檔案

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

下列複製檔案步驟會將檔案複製到file-test目的地儲存貯體中的test資料夾。

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

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

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

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

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

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

    提示

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

例如,如果您的金鑰值為 test/,則上傳的檔案會複製到 test 資料夾。如果您的金鑰值為 test/today,則您上傳的每個檔案都會複製到test資料夾中名為 的檔案 today (並選取覆寫現有檔案),而每個後續檔案都會覆寫上一個檔案。

注意

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

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

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

在下列範例中,如果使用者richard-roe上傳檔案,則會將其複製到 file-test2/richard-roe/processed/ 資料夾。如果使用者mary-major上傳檔案,則會將其複製到 file-test2/mary-major/processed/ 資料夾。

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

您也可以將這兩個變數結合其功能使用。例如:

  • 您可以將目的地金鑰字首設定為 folder/${transfer:UserName}/${transfer:UploadDate}/,這會建立巢狀資料夾,例如 folder/marymajor/2023-01-05/

  • 您可以將目的地金鑰字首設定為 folder/${transfer:UserName}-${transfer:UploadDate}/,以串連兩個變數,例如 folder/marymajor-2023-01-05/

IAM 複製步驟的許可

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

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

只有在您未選取覆寫現有的 時,才需要此s3:ListBucket許可。此許可會檢查您的儲存貯體,以查看是否已存在具有相同名稱的檔案。如果您已選取覆寫現有的 ,則工作流程不需要檢查檔案,而且可以直接寫入。

如果您的 Amazon S3 檔案有標籤,您需要將一或兩個許可新增至IAM政策。

  • s3:GetObjectTagging 為未進行版本控制的 Amazon S3 檔案新增 。

  • s3:GetObjectVersionTagging 為版本化的 Amazon S3 檔案新增 。

解密檔案

AWS 儲存部落格有一個文章,說明如何使用 和 加密PGP和解密檔案、加密和解密檔案 AWS Transfer Family

在工作流程中使用PGP解密

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

若要使用PGP解密功能,您必須建立並儲存用於檔案解密的PGP私有金鑰。然後,您的使用者可以在將檔案上傳至 Transfer Family 伺服器之前,使用對應的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
  4. 將加密的檔案上傳至 Transfer Family 伺服器。

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

新增解密步驟

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

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

在您選擇步驟的解密檔案類型後,便會顯示設定參數頁面。填寫設定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:::destination-bucket-name" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::destination-bucket-name/*" }, { "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:::DOC-EXAMPLE-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. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/

  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": "DOC-EXAMPLE-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"}]}'