本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定和使用 SFTP 連接器
連接器的目的是在 AWS 儲存體與合作夥伴的 SFTP 伺服器之間建立關係。您可以將檔案從 Amazon S3 傳送至外部、合作夥伴擁有的目的地。您也可以使用 SFTP 連接器從合作夥伴的 SFTP 伺服器擷取檔案。
本教學課程說明如何設定具有服務受管和 VPC_LATTICE 輸出類型的 SFTP 連接器,然後在 Amazon S3 儲存體和 SFTP 伺服器之間傳輸檔案。
SFTP 連接器會從 擷取 SFTP 登入資料 AWS Secrets Manager ,以向遠端 SFTP 伺服器進行身分驗證並建立連線。連接器會將檔案傳送至遠端伺服器或從遠端伺服器擷取檔案,並將檔案存放在 Amazon S3 中。您可以選擇服務受管輸出 (使用 AWS 受管基礎設施) 或 VPC 輸出 (使用跨 VPC 資源存取透過 VPC 路由)。IAM 角色用於允許存取 Amazon S3 儲存貯體和存放在 Secrets Manager 中的登入資料。您也可以登入 Amazon CloudWatch。
下列部落格文章提供使用 SFTP 連接器建置 MFT 工作流程的參考架構,包括在使用 SFTP 連接器將檔案傳送到遠端 SFTP 伺服器之前,先使用 PGP 加密檔案:使用 AWS Transfer Family SFTP 連接器和 PGP 加密來建構安全且合規的受管檔案傳輸。
連接器輸出類型
SFTP 連接器支援兩種輸出類型,可決定連接器將流量路由到遠端 SFTP 伺服器的方式:
-
SERVICE_MANAGED (預設):將 AWS Transfer Family 受管基礎設施與靜態 IP 地址用於傳出連線。
-
VPC:使用跨 VPC 資源存取透過 VPC 路由流量,啟用私有端點連線和使用您自己的 NAT 閘道。
本教學課程涵蓋這兩種輸出類型。當您需要以下項目時,請選擇 VPC 輸出類型:
-
連線至 VPC 中的私有 SFTP 伺服器 (私有 IP 地址)
-
透過 Direct Connect 或 VPN 連線至內部部署 SFTP 伺服器
-
透過 VPC 路由公有端點流量以進行安全控制
-
將您自己的彈性 IP 地址用於傳出連線
步驟 1:建立必要的支援資源
您可以使用 SFTP 連接器在 Amazon S3 和任何遠端 SFTP 伺服器之間複製檔案。在本教學課程中,我們使用 AWS Transfer Family 伺服器做為遠端 SFTP 伺服器。我們需要建立和設定下列資源:
-
建立 Amazon S3 儲存貯體以將檔案存放在您的 AWS 環境中,以及從遠端 SFTP 伺服器傳送和擷取檔案:建立 Amazon S3 儲存貯體。
-
在 Secrets Manager 中建立存取 Amazon S3 儲存體和秘密 AWS Identity and Access Management 的角色:建立具有必要許可的 IAM 角色。
-
建立使用 SFTP 通訊協定的 Transfer Family 伺服器,以及使用 SFTP 連接器在 SFTP 伺服器之間傳輸檔案的服務受管使用者:建立 Transfer Family SFTP 伺服器和使用者。
-
建立 AWS Secrets Manager 秘密,以存放 SFTP 連接器用來登入遠端 SFTP 伺服器的登入資料:在 中建立和存放秘密 AWS Secrets Manager。
對於 VPC 輸出類型連接器,您也需要:
-
具有適當子網路和安全群組的 VPC
-
資源閘道 (至少需要 2 個可用區域):建立資源閘道 (僅限 VPC 輸出類型)。
-
指向 SFTP 伺服器的資源組態:建立資源組態 (僅限 VPC 輸出類型)。如需詳細資訊,請參閱《Amazon VPC Lattice 使用者指南》中的資源組態。
建立 Amazon S3 儲存貯體
建立 Amazon S3 儲存貯體
-
在 https://https://console.aws.amazon.com/s3/
登入 AWS Transfer Family 主控台。 -
選擇區域並輸入名稱。
在本教學課程中,我們的儲存貯體位於
US East (N. Virginia) us-east-1,名稱為sftp-server-storage-east。 -
接受預設值,然後選擇建立儲存貯體。
如需建立 Amazon S3 儲存貯體的完整詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體?。
建立具有必要許可的 IAM 角色
針對存取角色,建立具有下列許可的政策。
取代項目,如下所示:
-
對於
amzn-s3-demo-bucket,教學課程使用sftp-server-storage-east。 -
對於
區域,教學課程使用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 連接器的使用者登入資料
-
登入 AWS 管理主控台 並在 https://https://console.aws.amazon.com/secretsmanager/
開啟 AWS Secrets Manager 主控台。 -
在左側導覽窗格中,選擇秘密。
-
在秘密頁面上,選擇儲存新的秘密。
-
在選擇秘密類型頁面上,針對秘密類型,選擇其他類型的秘密。
-
在鍵/值對區段中,選擇鍵/值索引標籤。
-
金鑰 — 輸入
Username。 -
value — 輸入我們使用者的名稱
sftp-testuser。
-
-
若要輸入金鑰,建議您使用純文字索引標籤。
-
選擇新增列,然後輸入
PrivateKey。 -
選擇純文字索引標籤。欄位現在包含下列文字:
{"Username":"sftp-testuser","PrivateKey":""} -
在空白雙引號 ("") 之間,貼上私有金鑰的文字 (稍早儲存)。
您的畫面應如下所示 (索引鍵資料呈現灰色)。
-
-
選擇下一步。
-
在設定秘密頁面上,輸入秘密的名稱。在本教學課程中,我們將秘密命名為
aws/transfer/sftp-connector1。 -
選擇下一步,然後在設定輪換頁面上接受預設值。然後選擇下一步。
-
在檢閱頁面上,選擇存放以建立和存放秘密。
建立資源閘道 (僅限 VPC 輸出類型)
對於 VPC 輸出類型連接器,您需要在 VPC 中建立資源閘道。資源閘道可做為跨 VPC 資源存取的進入點。
建立資源閘道
-
執行下列命令來建立資源閘道 (將 VPC ID 和子網路 IDs 取代為您的值):
aws vpc-lattice create-resource-gateway \ --name my-sftp-resource-gateway \ --vpc-identifier vpc-12345678 \ --subnet-ids subnet-12345678 subnet-87654321注意
資源閘道需要至少 2 個可用區域中的子網路。
-
請注意回應中的資源閘道 ID,以便在下一個步驟中使用。
建立資源組態 (僅限 VPC 輸出類型)
建立指向 SFTP 伺服器的資源組態。這可以是 VPC 中伺服器的私有 IP 地址,或外部伺服器的公有 DNS 名稱。如需資源組態的詳細資訊,請參閱《Amazon VPC Lattice 使用者指南》中的資源組態。
建立資源組態
-
對於私有 SFTP 伺服器,請執行:
aws vpc-lattice create-resource-configuration \ --name my-sftp-resource-config \ --port-ranges 22 \ --type SINGLE \ --resource-gateway-identifier rgw-12345678 \ --resource-configuration-definition ipResource={ipAddress="10.0.1.100"} -
對於公有 SFTP 伺服器 (僅限 DNS 名稱),請執行:
aws vpc-lattice create-resource-configuration \ --name my-public-sftp-resource-config \ --port-ranges 22 \ --type SINGLE \ --resource-gateway-identifier rgw-12345678 \ --resource-configuration-definition dnsResource={domainName="sftp.example.com"}注意
公有端點必須使用 DNS 名稱,而不是 IP 地址。
-
建立連接器時,請注意來自 回應的資源組態 ARN。
步驟 2:建立和測試 SFTP 連接器
在本節中,我們會建立使用先前建立的所有資源的 SFTP 連接器。如需詳細資訊,請參閱建立 SFTP 連接器。
建立 SFTP 連接器
-
在 https://https://console.aws.amazon.com/transfer/
開啟 AWS Transfer Family 主控台。 -
在左側導覽窗格中,選擇 SFTP 連接器,然後選擇建立 SFTP 連接器。
-
針對輸出類型,選擇下列其中一項:
-
服務受管 (預設):將 AWS Transfer Family 受管基礎設施與靜態 IP 地址用於傳出連線。
-
VPC Lattice:使用跨 VPC 資源存取透過 VPC 路由流量。針對私有端點連線或使用您自己的 NAT 閘道,選擇此選項。
重要
您無法在建立連接器後變更輸出類型。請根據您的連線需求謹慎選擇。
-
-
在連接器組態區段中,提供下列資訊:
-
針對 URL,輸入遠端 SFTP 伺服器的 URL。在教學課程中,我們會輸入用作遠端 SFTP 伺服器的 Transfer Family 伺服器 URL。
sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com以 Transfer Family 伺服器 ID 取代
1111aaaa2222bbbb3。 -
針對存取角色,輸入我們先前建立的角色
sftp-connector-role。 -
針對資源組態 ARN (僅限 VPC Lattice 輸出類型),輸入您先前建立的資源組態 ARN:
arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678 -
針對記錄角色,選擇在主體元素
transfer.amazonaws.com中包含具有 之信任政策的角色。秘訣:除了將 Transfer Family 新增為信任的實體之外,您還可以將 AWSTransferLoggingAccess AWS 受管政策新增至角色。此政策會在 AWSTransferLoggingAccess 中詳細說明。
-
-
在 SFTP 組態區段中,提供下列資訊:
-
針對 Connector 登入資料,選擇包含 SFTP 登入資料之 Secrets Manager 資源的名稱。針對教學課程,選擇
aws/transfer/sftp-connector1。 -
對於信任的主機金鑰 ,請貼入主機金鑰的公有部分。您可以
ssh-keyscan為 SFTP 伺服器執行 來擷取此金鑰。如需如何格式化和存放信任主機金鑰的詳細資訊,請參閱 SftpConnectorConfig資料類型文件。 -
針對最大並行連線,選取從 1 到 5 的整數值:預設值為 5。
-
-
確認所有設定後,請選擇建立連接器以建立 SFTP 連接器。
您也可以使用 建立連接器 AWS Command Line Interface。
-
若要使用服務管理的輸出建立 SFTP 連接器,請執行下列命令:
aws transfer create-connector \ --url "sftp://s-1111aaaa2222bbbb3.server.transfer.us-east-1.amazonaws.com" \ --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \ --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..." -
若要使用 VPC 型輸出建立 SFTP 連接器,請執行下列命令:
aws transfer create-connector \ --url "sftp://my.sftp.server.com:22" \ --access-role "arn:aws::iam::account-id:role/sftp-connector-role" \ --sftp-config UserSecretId="aws/transfer/sftp-connector1",TrustedHostKeys="ssh-rsa AAAAB3NzaC..." \ --egress-config VpcLattice={ResourceConfigurationArn="arn:aws:vpc-lattice:us-east-1:account-id:resourceconfiguration/rcfg-12345678",PortNumber=22}
建立 SFTP 連接器之後,建議您在嘗試使用新連接器傳輸任何檔案之前進行測試。
注意
對於 VPC 輸出類型連接器,DNS 解析可能需要幾分鐘才能建立。在此期間,連接器狀態將為 PENDING,TestConnection並將傳回「無法使用連接器」。在嘗試檔案傳輸ACTIVE之前,請等待狀態變成 。
當您描述 VPC 輸出類型連接器時,回應會包含新欄位:
{ "Connector": { "AccessRole": "arn:aws:iam::219573224423:role/sftp-connector-role", "Arn": "arn:aws:transfer:us-east-1:219573224423:connector/c-5dfa309ccabf40759", "ConnectorId": "c-5dfa309ccabf40759", "Status": "ACTIVE", "EgressConfig": { "ResourceConfigurationArn": "arn:aws:vpc-lattice:us-east-1:025066256552:resourceconfiguration/rcfg-079259b27a357a190" }, "EgressType": "VPC", "ServiceManagedEgressIpAddresses": null, "SftpConfig": { "TrustedHostKeys": [ "ssh-rsa AAAAB3NzaC..." ], "UserSecretId": "aws/transfer/sftp-connector1" }, "Url": "sftp://my.sftp.server.com:22" } }
請注意,VPC 輸出類型連接器為 ServiceManagedEgressIpAddresses null,因為流量會透過您的 VPC 路由,而非 AWS 受管基礎設施。
步驟 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 "/sftp-server-storage-east/SEND-to-SERVER.txt" / --remote-directory-path "/sftp-server-storage-east/incoming"
您的儲存sftp-server-storage-east貯體現在看起來應該像這樣。
如果您未如預期看到檔案,請檢查您的 CloudWatch 日誌。
檢查您的 CloudWatch 日誌
-
在 https://https://console.aws.amazon.com/cloudwatch/
開啟 Amazon CloudWatch 主控台 -
從左側導覽功能表中選取日誌群組。
-
在搜尋列中輸入您的連接器 ID 以尋找您的日誌。
-
選取從搜尋傳回的日誌串流。
-
展開最新的日誌項目。
如果成功,日誌項目如下所示:
{ "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": "/sftp-server-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": "account-id", "connector-arn": "arn:aws:transfer:us-east-1:account-id: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 "/sftp-server-storage-east/incoming"
如果傳輸成功,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": "account-id", "connector-arn": "arn:aws:transfer:us-east-1:account-id:connector/c-connector-id", "local-directory-path": "/sftp-server-storage-east/incoming" }
故障診斷 VPC 輸出類型連接器
如果您遇到 VPC 輸出類型連接器的問題,請檢查下列項目:
-
連接器狀態為待定:VPC 連接器的 DNS 解析可能需要幾分鐘的時間。等待狀態變成 ACTIVE,再嘗試連線。
-
連線逾時:確認安全群組允許資源閘道子網路與目標 SFTP 伺服器之間的連接埠 22 流量。
-
資源組態錯誤:確保您的資源組態指向正確的 IP 地址或 DNS 名稱,且資源閘道與您的 SFTP 伺服器位於相同的 VPC 中 (適用於私有端點)。如需詳細資訊,請參閱《Amazon VPC Lattice 使用者指南》中的資源組態。
-
公有端點問題:對於公有端點,請確定您在資源組態中使用 DNS 名稱,而不是 IP 地址。確認您的 VPC 具有用於傳出網際網路存取的 NAT 閘道。
-
可用區域可用性:資源閘道需要至少 2 個可用區域中的子網路。並非所有 AZs 都支援 VPC Lattice - 檢查您區域中支援的 AZs。
VPC 輸出類型的成本考量:
-
VPC Lattice 以資源提供者的身分收取 0.006/GB 的資料處理費用 (直接由 VPC Lattice 計費)
-
AWS Transfer Family 會吸收每 GB 0.01 USD 的資源消費者成本 (前 1 PB)
-
對於透過 VPC 的公有端點,可能會收取額外的 NAT Gateway 和資料傳輸費用
-
除了標準 0.40 USD/GB 的資料處理費之外,沒有額外的 Transfer Family 費用
建立 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 伺服器,因此我們需要建立第二個儲存貯體
sftp-server-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:::sftp-server-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:::sftp-server-storage-east/*" ] }, { "Sid": "GetConnectorSecretValue", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:aws/transfer/sftp-connector1-6RandomCharacters" } ] }
如需為 Transfer Family 建立角色的完整詳細資訊,請遵循中所述的程序建立使用者角色來建立角色。