将 Amazon API Gateway 方法设置为自定义身份提供商 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon API Gateway 方法设置为自定义身份提供商

本教程演示如何设置 Amazon API Gateway 方法并将其用作自定义身份提供商将文件上传到Amazon Transfer Family服务器。本教程仅使用基本堆栈模板和其他基本功能作为示例。

先决条件

在Amazon CloudFormation中创建 Transfer Family 资源之前,请创建您的存储和用户角色。

要指定存储并创建用户角色
  1. 根据您使用的存储,请参阅以下文档:

  2. 要创建用户角色,请参阅创建 IAM 角色和策略

在下一部分中创建Amazon CloudFormation堆栈时,您将输入存储和用户角色的详细信息。

步骤 1:创建 CloudFormation 堆栈

通过提供的模板创建Amazon CloudFormation堆栈
  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 选择创建堆栈,然后选择使用新资源(标准)

  3. 先决条件 — 准备模板窗格,请选择模板已就绪

  4. 复制此链接,即基本堆栈模板,然后将其粘贴到 Amazon S3 URL 字段中。

  5. 单击下一步

  6. 指定参数,包括堆栈的名称。务必执行以下操作:

    • 替换UserName和的默认值UserPassword

    • 对于 UserHomeDirectory,请输入您之前创建的存储(Amazon S3 存储桶或 Amazon EFS 文件系统)的详细信息。

    • 将默认UserRoleArn角色替换为您之前创建的用户角色。Amazon Identity and Access Management (IAM) 角色必须具有相应的权限。有关 IAM 角色和存储桶策略示例,请参阅 步骤 6:限制对存储桶的访问权限

    • 如果要使用公钥而不是密码进行身份验证,请在 UserPublicKey1 字段中输入您的公钥。首次使用 SFTP 连接到服务器时,将提供私有密钥而不是密码。

  7. 选择下一步,然后在配置堆栈选项页面上再次选择下一步

  8. 查看您正在创建的堆栈的详细信息,然后选择创建堆栈

    注意

    在页面底部的功能下,您必须确认Amazon CloudFormation可能会创建 IAM 资源。

步骤 2:检查服务器的 API Gateway 方法配置。

注意

为了提高安全性,可以配置 Web 应用程序防火墙。Amazon WAF 是一种 Web 应用程序防火墙,可让您监视转发到 Amazon API Gateway 的 HTTP 和 HTTPS 请求。有关更多信息,请参阅 是一个 Web 应用程序防火墙。

检查服务器的 API Gateway 方法配置并部署它
  1. 打开 API Gateway 控制台,网址为:https://console.aws.amazon.com/apigateway/

  2. 选择 Amazon CloudFormation 模板生成的传输自定义身份提供商基本模板 API

  3. 资源窗格中,选择获取,然后选择 方法请求

  4. 操作,选择部署 API。对于部署阶段,选择 prod,然后选择部署

    成功部署 API Gateway 方法后,在阶段编辑器部分查看其性能。

    注意

    复制显示在页面顶部的调用 URL 地址。在下一步骤中,您将需要该值。

步骤 3:查看 Transfer Family 服务器详细信息

当您使用模板创建Amazon CloudFormation堆栈时,会自动创建一个 Transfer Family 服务器。

要查看您的 Transfer Family 服务器详细信息
  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 选择您创建的堆栈。

  3. 选择资源选项卡。

    
                        显示创建Amazon CloudFormation堆栈期间创建的资源列表的屏幕,其中突出显示了 Transfer Family 服务器的详细信息。

    服务器 ARN 显示在该行的 “物理 ID” 列中。TransferServer服务器 ID 包含在 ARN 中,例如 s-11112222333344445

  4. 通过 https://console.aws.amazon.com/transfer/ 打开Amazon Transfer Family控制台,然后在服务器页面上,选择新服务器。

    服务器 ID 与中为TransferServer资源显示的 ID 相匹配Amazon CloudFormation。

步骤 4:测试您的用户是否可以连接到服务器

要测试您的用户是否可以连接到服务器,请使用 Transfer Family 控制台
  1. 打开Amazon Transfer Family控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 服务器页面上,选择您的新服务器,选择操作,然后选择测试

  3. 用户名字段和密码字段中输入登录凭证的文本。这些是您在部署Amazon CloudFormation堆栈时设置的值。

  4. 对于服务器协议,请选择 SFTP,对于源 IP,请输入127.0.0.1

  5. 选择测试

    如果用户身份验证成功,则测试将返回一个 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 Gateway Amazon托管策略添加至您用于 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 服务器所在位置Amazon Web Services 区域的代码。例如,如果您的服务器位于美国东部(俄亥俄州),请输入us-east-2

  3. sftp>出现提示时,请确保您可以上传 (put)、下载 (get) 以及查看目录和文件(pwdls)。

步骤 6:限制对存储桶的访问权限

您可以限制谁能够访问特定 Amazon S3 存储桶。以下示例显示了要在 CloudFormation 堆栈和为用户选择的策略中使用的设置。

在此示例中,我们为Amazon CloudFormation堆栈设置了以下参数:

  • CreateServer: true

  • UserHomeDirectory: /myuser-bucket

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    重要

    这是密码示例。在配置 API Gateway 方法时,请务必输入一个强密码。

  • 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命令,请使用 Transfer Family 服务器所在位置Amazon Web Services 区域的 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 EFS,请更新 Lambda

如果您选择 Amazon EFS 作为 Transfer Family 服务器的存储选项,则需要编辑堆栈的 lambda 函数。

要向 Lambda 函数添加 posix 配置文件
  1. 通过 https://console.aws.amazon.com/lambda/ 打开 Lambda 控制台。

  2. 选择先前创建的 Lambda 函数。Lambda 函数的格式为堆栈名称-GetUserConfigLambda-lambda 标识符,其中堆栈名称是 CloudFormation 堆栈名称lambda 标识符是函数的标识符。

  3. 代码选项卡中,选择 index.js 以显示该函数的代码。

  4. response中,在PolicyHomeDirectory之间添加以下行:

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    其中,uid-valuegid-value 是分别表示用户 ID 和组 ID 的整数,等于 0 或大于 0。

    例如,添加 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 '/' };