本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 Amazon API Gateway 方法設定為自訂身分提供者
本教學課程說明如何設定 Amazon API Gateway 方法,並將其用作將檔案上傳至 AWS Transfer Family 伺服器的自訂身分提供者。本教學課程僅使用基本堆疊範本
主題
必要條件
在 中建立 Transfer Family 資源之前 AWS CloudFormation,請建立您的儲存體和使用者角色。
指定儲存體並建立使用者角色
根據您使用的儲存體,請參閱下列文件:
若要建立 Amazon S3 儲存貯體,請參閱 Amazon Simple Storage Service 使用者指南 中的如何建立 S3 儲存貯體?。
-
若要建立 Amazon EFS 檔案系統,請參閱 設定 Amazon EFS 檔案系統。
-
若要建立使用者角色,請參閱 建立IAM角色和政策
在下一節中建立 AWS CloudFormation 堆疊時,您可以輸入儲存體的詳細資訊和使用者角色。
步驟 1:建立 CloudFormation 堆疊
從提供的範本建立 AWS CloudFormation 堆疊
在 https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
選取建立堆疊 ,然後選擇使用新資源 (標準)。
-
在先決條件 - 準備範本窗格中,選擇範本已就緒 。
-
複製此連結、基本堆疊範本
,並將其貼到 Amazon S3 URL 欄位中。 -
按一下 Next (下一步)。
-
指定參數,包括堆疊的名稱。請務必執行下列動作:
取代 UserName和 的預設值UserPassword。
-
對於 UserHomeDirectory,輸入您先前建立的儲存體 (Amazon S3 儲存貯體或 Amazon EFS 檔案系統) 的詳細資訊。
-
將預設值取代UserRoleArn為您先前建立的使用者角色。 AWS Identity and Access Management (IAM) 角色必須具有適當的許可。如需IAM角色和儲存貯體政策的範例,請參閱 步驟 6:限制對儲存貯體的存取。
-
如果您想要使用公有金鑰而非密碼進行身分驗證,請在 UserPublicKey1 欄位中輸入公有金鑰。第一次使用 連線至伺服器時SFTP,您會提供私有金鑰而非密碼。
-
選擇下一個 ,然後在設定堆疊選項頁面上再次選擇下一個 。
-
檢閱您要建立之堆疊的詳細資訊,然後選擇建立堆疊 。
注意
在頁面底部,在功能 下,您必須確認 AWS CloudFormation 可能會建立 IAM 資源。
步驟 2:檢查伺服器的API閘道方法組態
注意
若要提高安全性,您可以設定 Web 應用程式防火牆。 AWS WAF 是 Web 應用程式防火牆,可讓您監控轉送至 Amazon API Gateway 的 HTTP和 HTTPS請求。如需詳細資訊,請參閱 新增 Web 應用程式防火牆。
檢查伺服器的API閘道方法組態並部署
-
在 開啟API閘道主控台https://console.aws.amazon.com/apigateway/
。 -
選擇 AWS CloudFormation 範本產生的 Transfer Custom Identity Provider 基本範本API。
-
在資源窗格中,選擇 GET,然後選擇方法請求 。
-
針對動作 ,選擇部署 API。針對部署階段 ,選擇產品 ,然後選擇部署 。
成功部署API閘道方法後,請在階段編輯器區段中檢視其效能。
注意
複製出現在頁面頂端的調用URL地址。下一步需要用到它。
步驟 3:檢視 Transfer Family 伺服器詳細資訊
當您使用 範本建立 AWS CloudFormation 堆疊時,會自動建立 Transfer Family 伺服器。
檢視 Transfer Family 伺服器詳細資訊
在 https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 選擇您建立的堆疊。
選擇 Resources (資源) 標籤。
伺服器ARN會顯示在TransferServer資料列的實體 ID 欄中。伺服器 ID 包含在 中ARN,例如 s-11112222333344445。
在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/
,並在伺服器頁面上選擇新的伺服器。 伺服器 ID 與 中TransferServer資源顯示的 ID 相符 AWS CloudFormation。
步驟 4:測試您的使用者是否可以連線至伺服器
若要測試您的使用者是否可以連線至伺服器,請使用 Transfer Family 主控台
在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/
。 -
在伺服器頁面上,選擇新的伺服器,選擇動作 ,然後選擇測試 。
-
在使用者名稱欄位和密碼欄位中輸入登入憑證的文字。這些是您部署 AWS CloudFormation 堆疊時設定的值。
-
針對伺服器通訊協定 ,選取 SFTP,針對來源 IP ,輸入
127.0.0.1
。 -
選擇 測試。
如果使用者身分驗證成功,測試會傳回
StatusCode: 200
HTML回應和JSON物件,其中包含使用者角色和許可的詳細資訊。例如:{ "Response": "{\"Role\": \"arn:aws:iam::
123456789012
:role/my-user-role
\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e
.execute-api.us-east-2
.amazonaws.com/prod/servers/s-1234abcd5678efgh0
/users/myuser
/config" }如果測試失敗,請將閘道API AWS 受管政策之一新增至您用於 的角色API。
步驟 5:測試SFTP連線和檔案傳輸
測試SFTP連線
-
在 Linux 或 macOS 裝置上,開啟命令終端機。
-
輸入下列其中一個命令,取決於您使用密碼或金鑰對進行身分驗證。
-
如果您使用密碼,請輸入此命令:
sftp -o PubkeyAuthentication=no
myuser
@server-ID
.server.transfer.region-code
.amazonaws.com出現提示時,輸入您的密碼。
-
如果您使用的是金鑰對,請輸入此命令:
sftp -i
private-key-file
myuser
@server-ID
.server.transfer.region-code
.amazonaws.com
注意
對於這些
sftp
命令,請插入 Transfer Family 伺服器所在的 AWS 區域 程式碼。例如,如果您的伺服器位於美國東部 (俄亥俄),請輸入us-east-2
。 -
-
sftp>
提示時,請確定您可以上傳 (put
)、下載 (get
) 和檢視目錄和檔案 (pwd
和ls
)。
步驟 6:限制對儲存貯體的存取
您可以限制誰可以存取特定的 Amazon S3 儲存貯體。下列範例顯示要在 CloudFormation 堆疊和您為使用者選取的政策中使用的設定。
在此範例中,我們為 AWS CloudFormation 堆疊設定下列參數:
CreateServer:
true
UserHomeDirectory:
/myuser-bucket
UserName:
myuser
UserPassword:
MySuperSecretPassword
重要
這是範例密碼。當您設定API閘道方法時,請確定您輸入強式密碼。
UserPublicKey1:
your-public-key
UserRoleArn:
arn:aws:iam::
role-id
:role/myuser-api-gateway-role
UserPublicKey1 是您作為公有/私有金鑰對的一部分產生的公有金鑰。
對於您建立的使用者角色而言,
是唯一的。附加至 的政策role-id
myuser-api-gateway-role
如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::myuser-bucket" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::myuser-bucket/*" } ] }
若要使用 連線至伺服器SFTP,請在提示中輸入下列其中一個命令。
如果您使用密碼進行身分驗證,請執行下列命令:
sftp -o PubkeyAuthentication=no
myuser
@transfer-server-ID
.server.transfer.region-id
.amazonaws.com出現提示時,輸入您的密碼。
-
如果您使用金鑰對進行身分驗證,請執行下列命令:
sftp -i
private-key-file
myuser@transfer-server-ID
.server.transfer.region-id
.amazonaws.com
注意
對於這些sftp
命令,請使用 AWS 區域 Transfer Family 伺服器所在的 的 ID。例如,如果您的伺服器位於美國東部 (俄亥俄),請使用 us-east-2
。
出現sftp
提示時,系統會將您導向主目錄,您可以執行 pwd
命令來檢視該目錄。例如:
sftp> pwd Remote working directory: /myuser-bucket
使用者無法檢視主目錄上方的任何目錄。例如:
sftp> pwd Remote working directory: /myuser-bucket sftp> cd .. sftp> ls Couldn't read directory: Permission denied
如果使用 Amazon,請更新 Lambda EFS
如果您選擇 Amazon EFS作為 Transfer Family 伺服器的儲存選項,則需要編輯堆疊的 lambda 函數。
將 posix 設定檔新增至 Lambda 函數
在 開啟 Lambda 主控台https://console.aws.amazon.com/lambda/
。 -
選取您先前建立的 Lambda 函數。Lambda 函數的格式為
stack-name
-GetUserConfigLambda-lambda-identifier
,其中stack-name
是 CloudFormation 堆疊名稱和lambda-identifier
是函數的識別符。 -
在程式碼索引標籤中,選取 index.js 以顯示函數的程式碼。
-
在 中
response
,在Policy
和 之間新增下列行HomeDirectory
:PosixProfile: {"Uid":
uid-value
, "Gid":gid-value
},其中
uid-value
以及gid-value
是 0 或更高的整數,分別代表使用者 ID 和群組 ID。例如,在您新增 Posix 設定檔之後,回應欄位可能如下所示:
response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };