將 Amazon API Gateway 方法設定為自訂身分提供者 - AWS Transfer Family

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

將 Amazon API Gateway 方法設定為自訂身分提供者

本教學課程說明如何設定 Amazon API Gateway 方法,並將其用作將檔案上傳至 AWS Transfer Family 伺服器的自訂身分提供者。本教學課程僅使用基本堆疊範本 和其他基本功能作為範例。

必要條件

在 中建立 Transfer Family 資源之前 AWS CloudFormation,請建立您的儲存體和使用者角色。

指定儲存體並建立使用者角色
  1. 根據您使用的儲存體,請參閱下列文件:

  2. 若要建立使用者角色,請參閱 建立IAM角色和政策

在下一節中建立 AWS CloudFormation 堆疊時,您可以輸入儲存體的詳細資訊和使用者角色。

步驟 1:建立 CloudFormation 堆疊

從提供的範本建立 AWS CloudFormation 堆疊
  1. https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. 選取建立堆疊 ,然後選擇使用新資源 (標準)

  3. 先決條件 - 準備範本窗格中,選擇範本已就緒

  4. 複製此連結、基本堆疊範本 ,並將其貼到 Amazon S3 URL 欄位中。

  5. 按一下 Next (下一步)

  6. 指定參數,包括堆疊的名稱。請務必執行下列動作:

    • 取代 UserName和 的預設值UserPassword

    • 對於 UserHomeDirectory,輸入您先前建立的儲存體 (Amazon S3 儲存貯體或 Amazon EFS 檔案系統) 的詳細資訊。

    • 將預設值取代UserRoleArn為您先前建立的使用者角色。 AWS Identity and Access Management (IAM) 角色必須具有適當的許可。如需IAM角色和儲存貯體政策的範例,請參閱 步驟 6:限制對儲存貯體的存取

    • 如果您想要使用公有金鑰而非密碼進行身分驗證,請在 UserPublicKey1 欄位中輸入公有金鑰。第一次使用 連線至伺服器時SFTP,您會提供私有金鑰而非密碼。

  7. 選擇下一個 ,然後在設定堆疊選項頁面上再次選擇下一個

  8. 檢閱您要建立之堆疊的詳細資訊,然後選擇建立堆疊

    注意

    在頁面底部,在功能 下,您必須確認 AWS CloudFormation 可能會建立 IAM 資源。

步驟 2:檢查伺服器的API閘道方法組態

注意

若要提高安全性,您可以設定 Web 應用程式防火牆。 AWS WAF 是 Web 應用程式防火牆,可讓您監控轉送至 Amazon API Gateway 的 HTTP和 HTTPS請求。如需詳細資訊,請參閱 新增 Web 應用程式防火牆

檢查伺服器的API閘道方法組態並部署
  1. 在 開啟API閘道主控台https://console.aws.amazon.com/apigateway/

  2. 選擇 AWS CloudFormation 範本產生的 Transfer Custom Identity Provider 基本範本API

  3. 資源窗格中,選擇 GET,然後選擇方法請求

  4. 針對動作 ,選擇部署 API。針對部署階段 ,選擇產品 ,然後選擇部署

    成功部署API閘道方法後,請在階段編輯器區段中檢視其效能。

    注意

    複製出現在頁面頂端的調用URL地址。下一步需要用到它。

步驟 3:檢視 Transfer Family 伺服器詳細資訊

當您使用 範本建立 AWS CloudFormation 堆疊時,會自動建立 Transfer Family 伺服器。

檢視 Transfer Family 伺服器詳細資訊
  1. https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. 選擇您建立的堆疊。

  3. 選擇 Resources (資源) 標籤。

    畫面顯示建立 AWS CloudFormation 堆疊期間建立的資源清單,並反白顯示 Transfer Family 伺服器的詳細資訊。

    伺服器ARN會顯示在TransferServer資料列的實體 ID 欄中。伺服器 ID 包含在 中ARN,例如 s-11112222333344445

  4. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/,並在伺服器頁面上選擇新的伺服器。

    伺服器 ID 與 中TransferServer資源顯示的 ID 相符 AWS CloudFormation。

步驟 4:測試您的使用者是否可以連線至伺服器

若要測試您的使用者是否可以連線至伺服器,請使用 Transfer Family 主控台
  1. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/

  2. 伺服器頁面上,選擇新的伺服器,選擇動作 ,然後選擇測試

  3. 使用者名稱欄位和密碼欄位中輸入登入憑證的文字。這些是您部署 AWS CloudFormation 堆疊時設定的值。

  4. 針對伺服器通訊協定 ,選取 SFTP,針對來源 IP ,輸入 127.0.0.1

  5. 選擇 測試

    如果使用者身分驗證成功,測試會傳回StatusCode: 200HTML回應和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連線
  1. 在 Linux 或 macOS 裝置上,開啟命令終端機。

  2. 輸入下列其中一個命令,取決於您使用密碼或金鑰對進行身分驗證。

    • 如果您使用密碼,請輸入此命令:

      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

  3. sftp> 提示時,請確定您可以上傳 (put)、下載 (get) 和檢視目錄和檔案 (pwdls)。

步驟 6:限制對儲存貯體的存取

您可以限制誰可以存取特定的 Amazon S3 儲存貯體。下列範例顯示要在 CloudFormation 堆疊和您為使用者選取的政策中使用的設定。

在此範例中,我們為 AWS CloudFormation 堆疊設定下列參數:

  • CreateServer: true

  • UserHomeDirectory: /myuser-bucket

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    重要

    這是範例密碼。當您設定API閘道方法時,請確定您輸入強式密碼。

  • UserPublicKey1your-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 函數
  1. 在 開啟 Lambda 主控台https://console.aws.amazon.com/lambda/

  2. 選取您先前建立的 Lambda 函數。Lambda 函數的格式為 stack-name-GetUserConfigLambda-lambda-identifier,其中 stack-name 是 CloudFormation 堆疊名稱和 lambda-identifier 是函數的識別符。

  3. 程式碼索引標籤中,選取 index.js 以顯示函數的程式碼。

  4. 在 中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 '/' };