設定和使用SFTP連接器 - AWS Transfer Family

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

設定和使用SFTP連接器

連接器的目的是在 AWS 儲存體與合作夥伴的SFTP伺服器之間建立關係。您可以將檔案從 Amazon S3 傳送至外部的合作夥伴擁有目的地。您也可以使用SFTP連接器從合作夥伴的SFTP伺服器擷取檔案。

本教學課程說明如何設定SFTP連接器,然後在 Amazon S3 儲存體和SFTP伺服器之間傳輸檔案。

SFTP 連接器會從 擷取SFTP憑證 AWS Secrets Manager ,以向遠端SFTP伺服器進行身分驗證並建立連線。連接器會將檔案傳送至遠端伺服器或從遠端伺服器擷取檔案,並將檔案存放在 Amazon S3 中。IAM 角色用於允許存取 Amazon S3 儲存貯體和儲存在 Secrets Manager 中的憑證。您也可以登入 Amazon CloudWatch。

連接器如何與 Secrets Manager、Amazon S3、 CloudWatch 日誌、IAM角色和遠端SFTP伺服器SFTP互動的架構圖。

步驟 1:建立必要的支援資源

您可以使用SFTP連接器在 Amazon S3 和任何遠端SFTP伺服器之間複製檔案。在此教學課程中,我們使用 AWS Transfer Family 伺服器作為遠端SFTP伺服器。我們需要建立和設定下列資源:

建立 Amazon S3 儲存貯體

建立 Amazon S3 儲存貯體
  1. 在 登入 AWS Transfer Family 主控台https://console.aws.amazon.com/s3/

  2. 選擇區域並輸入名稱。

    在此教學課程中,我們的儲存貯體位於 中US East (N. Virginia) us-east-1,名稱為 sftp-server-storage-east

  3. 接受預設值,然後選擇建立儲存貯體

如需建立 Amazon S3 儲存貯體的完整詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南 中的如何建立 S3 儲存貯體?

建立具有必要許可IAM的角色

針對存取角色,建立具有下列許可的政策。

下列範例授予必要許可,以存取 DOC-EXAMPLE-BUCKET 在 Amazon S3 中,以及存放在 Secrets Manager 中的指定秘密。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/SecretName-6RandomCharacters" } ] }

依下列方式取代項目:

  • 用於 DOC-EXAMPLE-BUCKET,教學課程使用 s3-storage-east

  • 用於 region,教學課程使用 us-east-1

  • 用於 account-id,使用您的 AWS 帳戶 ID。

  • 用於 SecretName-6RandomCharacters,我們using sftp-connector1是 名稱 (您將有自己的六個隨機字元作為秘密)。

您還必須確保此角色包含信任關係,允許連接器在服務使用者的傳輸請求時存取您的資源。如需建立信任關係的詳細資訊,請參閱 建立信任關係

注意

若要查看我們用於教學課程的角色詳細資訊,請參閱 合併使用者和存取角色

在 中建立和存放秘密 AWS Secrets Manager

我們需要在 Secrets Manager 中存放秘密,才能儲存SFTP連接器的使用者憑證。您可以使用密碼、SSH私有金鑰或兩者。針對教學課程,我們使用私有金鑰。

注意

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

在開始儲存秘密的程序之前,請擷取並格式化您的私有金鑰。私有金鑰必須與遠端SFTP伺服器上為使用者設定的公有金鑰相對應。在我們的教學課程中,私有金鑰必須對應到為測試使用者儲存在用作遠端伺服器的 Transfer Family SFTP 伺服器上的公有金鑰。

若要執行此操作,請執行下列命令:

jq -sR . path-to-private-key-file

例如,如果您的私有金鑰檔案位於 中~/.ssh/sftp-testuser-privatekey,則命令如下所示。

jq -sR . ~/.ssh/sftp-testuser-privatekey

這會以正確的格式 (包含內嵌的新行字元) 將金鑰輸出至標準輸出。將此文字複製到某個位置,因為您需要在下列程序中貼上 (步驟 6)。

在 Secrets Manager 中存放SFTP連接器的使用者憑證
  1. 登入 AWS Management Console 並在 開啟 AWS Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

  2. 在左側導覽窗格中,選擇秘密

  3. 秘密頁面上,選擇儲存新的秘密

  4. 選擇秘密類型頁面上,針對秘密類型 ,選擇其他類型的秘密

  5. 金鑰/值對區段中,選擇金鑰/值標籤。

    • 金鑰 – 輸入 Username

    • value – 輸入我們使用者 的名稱sftp-testuser

  6. 若要輸入金鑰,建議您使用純文字索引標籤。

    1. 選擇新增列 ,然後輸入 PrivateKey

    2. 選擇純文字索引標籤。欄位現在包含下列文字:

      {"Username":"sftp-testuser","PrivateKey":""}
    3. 在空白雙引號 ("") 之間貼上私有金鑰的文字 (先前儲存)。

      您的畫面應如下所示 (索引鍵資料顯示為灰色)。

      純文字中的秘密,顯示使用者名稱和私有金鑰。
  7. 選擇 Next (下一步)

  8. 設定秘密頁面上,輸入秘密的名稱。在本教學課程中,我們會命名秘密 aws/transfer/sftp-connector1

  9. 選擇下一個 ,然後在設定輪換頁面上接受預設值。然後選擇下一步

  10. 檢閱頁面上,選擇儲存以建立和儲存秘密。

步驟 2:建立和測試SFTP連接器

在本節中,我們會建立使用先前建立的所有資源的SFTP連接器。如需詳細資訊,請參閱設定SFTP連接器

若要建立SFTP連接器
  1. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/

  2. 在左側導覽窗格中,選擇 連接器 ,然後選擇建立連接器

  3. 選擇SFTP連接器類型以建立SFTP連接器,然後選擇下一步。

    Transfer Family 主控台會顯示建立連接器頁面,您可以在其中選擇連接器類型。SFTP 已選取 。
  4. 連接器組態區段中,提供下列資訊:

    • 對於 URL,輸入URL遠端SFTP伺服器的 。在教學課程中,我們會輸入用作遠端伺服器的 Transfer Family SFTP 伺服器URL。

      sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com

      Replace (取代) 1111aaaa2222bbbb3 使用您的 Transfer Family 伺服器 ID。

    • 針對存取角色 ,輸入我們先前建立的角色 sftp-connector-role

    • 針對記錄角色 ,選擇 AWSTransferLoggingAccess

      注意

      AWSTransferLoggingAccess 是 AWS 受管政策。此政策會在 中詳細說明AWS 受管政策: AWSTransferLoggingAccess

    Transfer Family SFTP 連接器主控台,顯示 連接器組態設定。
  5. SFTP組態區段中,提供下列資訊:

    • 針對 Connector 憑證 ,選擇包含SFTP憑證的 Secrets Manager 資源名稱。針對教學課程,選擇 aws/transfer/sftp-connector1

    • 對於信任的主機金鑰 ,請貼在主機金鑰的公有部分。您可以ssh-keyscan為您的SFTP伺服器執行 來擷取此金鑰。如需如何格式化和儲存受信任主機金鑰的詳細資訊,請參閱 SftpConnectorConfig 資料類型文件。

    Transfer Family SFTP 連接器主控台,顯示SFTP組態設定。
  6. 確認所有設定後,請選擇建立連接器以建立SFTP連接器。

建立SFTP連接器之後,建議您先測試連接器,然後再嘗試使用新連接器傳輸任何檔案。

Test a connector using the console
測試SFTP連接器
  1. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/

  2. 在左側導覽窗格中,選擇連接器 ,然後選擇連接器。

  3. 動作功能表中,選擇測試連線

    Transfer Family 主控台顯示選取的SFTP連接器,以及反白顯示的測試連線測試連線動作。

系統會傳回訊息,指出測試是否通過或失敗。如果測試失敗,系統會根據測試失敗的原因提供錯誤訊息。

SFTP 連接器測試連線面板,顯示成功的測試。
SFTP 連接器測試連線面板顯示失敗的測試:錯誤訊息指出連接器的存取角色不正確。
Test a connector using the CLI

若要使用 測試連接器 AWS Command Line Interface,請在命令提示 (取代 connector-id 使用實際連接器 ID):

aws transfer test-connection --connector-id c-connector-id

如果測試成功,則會傳回下列行:

{ "Status": "OK", "StatusMessage": "Connection succeeded" }

如果測試失敗,您會收到描述性錯誤訊息,例如:

{ "Status": "ERROR", "StatusMessage": "Unable to assume the configured access role" }

步驟 3:使用SFTP連接器傳送和擷取檔案

為了簡化,我們假設您的 Amazon S3 儲存貯體中已有檔案。

注意

本教學課程使用來源和目的地儲存位置的 Amazon S3 儲存貯體。如果您的SFTP伺服器未使用 Amazon S3 儲存體,則無論您在下列命令sftp-server-storage-east中看到什麼位置,都可以將路徑取代為可從SFTP伺服器存取的檔案位置路徑。

  • 我們將名為 的檔案SEND-to-SERVER.txt從 Amazon S3 儲存傳送至SFTP伺服器。

  • 我們將名為 的檔案RETRIEVE-to-S3.txt從SFTP伺服器擷取至 Amazon S3 儲存體。

注意

在下列命令中,取代 connector-id 您的連接器 ID。

首先,我們將檔案從 Amazon S3 儲存貯體傳送至遠端SFTP伺服器。從命令提示中,執行下列命令:

aws transfer start-file-transfer --connector-id c-connector-id --send-file-paths "/s3-storage-east/SEND-to-SERVER.txt" / --remote-directory-path "/sftp-server-storage-east/incoming"

您的sftp-server-storage-east儲存貯體現在看起來應該像這樣。

具有新傳輸檔案的SFTP伺服器儲存貯體。

如果您未如預期看到檔案,請檢查您的 CloudWatch 日誌。

若要檢查 CloudWatch 日誌
  1. 在 開啟 Amazon CloudWatch 主控台 https://console.aws.amazon.com/cloudwatch/

  2. 從左側導覽功能表中選取日誌群組

  3. 在搜尋列中輸入連接器 ID 以尋找您的日誌。

  4. 選取從搜尋傳回的日誌串流。

  5. 展開最新的日誌項目。

如果成功,日誌項目如下所示:

{ "operation": "SEND", "timestamp": "2023-12-18T15:26:57.346283Z", "connector-id": "connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/s3-storage-east/SEND-to-SERVER.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:26:56.915864Z", "end-time": "2023-12-18T15:26:57.298122Z", "account-id": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075:connector/connector-id", "remote-directory-path": "/sftp-server-storage-east/incoming" }

如果檔案傳輸失敗,日誌項目會包含指定問題的錯誤訊息。錯誤的常見原因是IAM許可和不正確的檔案路徑發生問題。

接下來,我們將檔案從SFTP伺服器擷取到 Amazon S3 儲存貯體。從命令提示中,執行下列命令:

aws transfer start-file-transfer --connector-id c-connector-id --retrieve-file-paths "/sftp-server-storage-east/RETRIEVE-to-S3.txt" --local-directory-path "/s3-storage-east/incoming"

如果傳輸成功,Amazon S3 儲存貯體會包含傳輸的檔案,如下所示。

具有新傳輸檔案的 Amazon S3 儲存貯體。

如果成功,日誌項目如下所示:

{ "operation": "RETRIEVE", "timestamp": "2023-12-18T15:36:40.017800Z", "connector-id": "c-connector-id", "transfer-id": "transfer-id", "file-transfer-id": "transfer-id/file-transfer-id", "url": "sftp://s-server-id.server.transfer.us-east-1.amazonaws.com", "file-path": "/sftp-server-storage-east/RETRIEVE-to-S3.txt", "status-code": "COMPLETED", "start-time": "2023-12-18T15:36:39.727626Z", "end-time": "2023-12-18T15:36:39.895726Z", "account-id": "500655546075", "connector-arn": "arn:aws:transfer:us-east-1:500655546075:connector/c-connector-id", "local-directory-path": "/s3-storage-east/incoming" }

建立 Transfer Family 伺服器以用作遠端SFTP伺服器的程序

接下來,我們概述建立 Transfer Family 伺服器的步驟,該伺服器可做為本教學課程的遠端SFTP伺服器。注意下列事項:

  • 我們使用 Transfer Family 伺服器來代表遠端SFTP伺服器。一般SFTP連接器使用者擁有自己的遠端SFTP伺服器。請參閱 建立 Transfer Family SFTP 伺服器和使用者

  • 由於我們使用 Transfer Family 伺服器,因此我們也使用服務管理SFTP的使用者。此外,為了簡化起見,我們合併了此使用者存取 Transfer Family 伺服器所需的許可,以及他們使用我們的連接器所需的許可。同樣地,大多數SFTP連接器使用案例都有未與 Transfer Family 伺服器相關聯的個別SFTP使用者。請參閱 建立 Transfer Family SFTP 伺服器和使用者

  • 針對教學課程,由於我們使用 Amazon S3 儲存體做為遠端SFTP伺服器,因此需要建立第二個儲存貯體 s3-storage-east,才能將檔案從一個儲存貯體傳輸到另一個儲存貯體。

建立 Transfer Family SFTP 伺服器和使用者

大多數使用者不需要建立 Transfer Family SFTP 伺服器和使用者,因為您已有具有使用者的SFTP伺服器,而且您可以使用此伺服器來來回傳輸檔案。不過,為了簡化本教學課程,我們使用 Transfer Family 伺服器作為遠端SFTP伺服器。

請遵循 中所述的程序來建立已啟用 SFTP的伺服器建立伺服器,以及步驟 3:新增服務受管使用者新增使用者。以下是我們在教學課程中使用的使用者詳細資訊:

  • 建立服務受管使用者 sftp-testuser

    • 將主目錄設定為 /sftp-server-storage-east/sftp-testuser

    • 建立使用者時,您會存放公有金鑰。稍後,當您在 Secrets Manager 中建立秘密時,您需要提供對應的私有金鑰。

  • 角色:sftp-connector-role。針對教學課程,我們同時為SFTP使用者和存取SFTP連接器使用相同的IAM角色。當您為組織建立連接器時,您可能有單獨的使用者和存取角色。

  • 伺服器主機金鑰:建立連接器時,您需要使用伺服器主機金鑰。您可以ssh-keyscan為您的伺服器執行 來擷取此金鑰。例如,如果您的伺服器 ID 為 s-1111aaaa2222bbbb3,且其端點位於 中us-east-1,則下列命令會擷取伺服器主機金鑰:

    ssh-keyscan s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com

    將此文字複製到某個位置,因為您需要將其貼到步驟 2:建立和測試SFTP連接器程序中。

合併使用者和存取角色

針對教學課程,我們使用單一的合併角色。我們對SFTP使用者以及連接器的存取都使用此角色。下列範例包含此角色的詳細資訊,以防您想要在教學課程中執行任務。

下列範例授予必要許可,以存取 Amazon S3 中的兩個儲存貯體,以及aws/transfer/sftp-connector1儲存在 Secrets Manager 中的名為 的秘密。對於教學課程,此角色名為 sftp-connector-role

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::sftp-server-storage-east", "arn:aws:s3:::s3-storage-east" ] }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": [ "arn:aws:s3:::sftp-server-storage-east/*", "arn:aws:s3:::s3-storage-east/*" ] }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:500655546075:secret:aws/transfer/sftp-connector1-6RandomCharacters" } ] }

如需為 Transfer Family 建立角色的完整詳細資訊,請遵循 中所述的程序建立使用者角色來建立角色。