本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定和使用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。
步驟 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。
建立 Amazon S3 儲存貯體
建立 Amazon S3 儲存貯體
-
在 登入 AWS Transfer Family 主控台https://console.aws.amazon.com/s3/
。 -
選擇區域並輸入名稱。
在此教學課程中,我們的儲存貯體位於 中
US East (N. Virginia) us-east-1
,名稱為sftp-server-storage-east
。 -
接受預設值,然後選擇建立儲存貯體 。
如需建立 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連接器的使用者憑證
-
登入 AWS Management Console 並在 開啟 AWS Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/
。 -
在左側導覽窗格中,選擇秘密。
-
在秘密頁面上,選擇儲存新的秘密 。
-
在選擇秘密類型頁面上,針對秘密類型 ,選擇其他類型的秘密 。
-
在金鑰/值對區段中,選擇金鑰/值標籤。
-
金鑰 – 輸入
Username
。 -
value – 輸入我們使用者 的名稱
sftp-testuser
。
-
-
若要輸入金鑰,建議您使用純文字索引標籤。
-
選擇新增列 ,然後輸入
PrivateKey
。 -
選擇純文字索引標籤。欄位現在包含下列文字:
{"Username":"sftp-testuser","PrivateKey":""}
-
在空白雙引號 ("") 之間貼上私有金鑰的文字 (先前儲存)。
您的畫面應如下所示 (索引鍵資料顯示為灰色)。
-
-
選擇 Next (下一步)。
-
在設定秘密頁面上,輸入秘密的名稱。在本教學課程中,我們會命名秘密
aws/transfer/sftp-connector1
。 -
選擇下一個 ,然後在設定輪換頁面上接受預設值。然後選擇下一步。
-
在檢閱頁面上,選擇儲存以建立和儲存秘密。
步驟 2:建立和測試SFTP連接器
在本節中,我們會建立使用先前建立的所有資源的SFTP連接器。如需詳細資訊,請參閱設定SFTP連接器。
若要建立SFTP連接器
-
在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/
。 -
在左側導覽窗格中,選擇 連接器 ,然後選擇建立連接器 。
-
選擇SFTP連接器類型以建立SFTP連接器,然後選擇下一步。
-
在連接器組態區段中,提供下列資訊:
-
對於 URL,輸入URL遠端SFTP伺服器的 。在教學課程中,我們會輸入用作遠端伺服器的 Transfer Family SFTP 伺服器URL。
sftp://s-
1111aaaa2222bbbb3
.server---transfer---us-east-1.amazonaws.com.rproxy.goskope.comReplace (取代)
1111aaaa2222bbbb3
使用您的 Transfer Family 伺服器 ID。 -
針對存取角色 ,輸入我們先前建立的角色
sftp-connector-role
。 -
針對記錄角色 ,選擇
AWSTransferLoggingAccess
。注意
AWSTransferLoggingAccess 是 AWS 受管政策。此政策會在 中詳細說明AWS 受管政策: AWSTransferLoggingAccess。
-
-
在SFTP組態區段中,提供下列資訊:
-
針對 Connector 憑證 ,選擇包含SFTP憑證的 Secrets Manager 資源名稱。針對教學課程,選擇
aws/transfer/sftp-connector1
。 -
對於信任的主機金鑰 ,請貼在主機金鑰的公有部分。您可以
ssh-keyscan
為您的SFTP伺服器執行 來擷取此金鑰。如需如何格式化和儲存受信任主機金鑰的詳細資訊,請參閱 SftpConnectorConfig 資料類型文件。
-
-
確認所有設定後,請選擇建立連接器以建立SFTP連接器。
建立SFTP連接器之後,建議您先測試連接器,然後再嘗試使用新連接器傳輸任何檔案。
步驟 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
儲存貯體現在看起來應該像這樣。
如果您未如預期看到檔案,請檢查您的 CloudWatch 日誌。
若要檢查 CloudWatch 日誌
-
在 開啟 Amazon CloudWatch 主控台 https://console.aws.amazon.com/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": "/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 儲存貯體會包含傳輸的檔案,如下所示。
如果成功,日誌項目如下所示:
{ "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 建立角色的完整詳細資訊,請遵循 中所述的程序建立使用者角色來建立角色。