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

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

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

本教程说明了如何设置 Amazon API Gateway 方法并将其用作自定义身份提供商来将文件上传到Amazon Transfer Family服务器。本教程使用基本堆栈模板,以及其他基本功能作为例子。

内容

第 1 步:创建 CloudFormation 堆

  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

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

  3. 先决条件-准备模板窗格中,选择模板准备就绪.

  4. 复制这个链接,基本堆栈模板,然后将其粘贴到Amazon S3 URL字段中返回的子位置类型。

  5. 单击 Next(下一步)。

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

    • 替换默认值UserName用户密码.

    • 替换默认值UserroLearn有一个实际的Amazon Identity and Access Management具有适当权限的 (IAM) 角色。有关 IAM 角色和存储桶策略示例,请参阅第 6 步:限制访问存储桶.

    • 如果要使用公钥而不是密码进行身份验证,请在用户 PublicKey1字段中返回的子位置类型。首次使用 SFTP 连接到服务器时,您将提供私有密钥,而不是密码。

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

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

    注意

    在页面底部,在下Capabilities,你必须承认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已生成模板。

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

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

    成功部署 API Gateway 方法后,请在舞台编辑器部分。

    注意

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

第 3 步:创建 Transfer Family 服务器

创建 Transfer Family 服务器
  1. 打开Amazon Transfer Family控制台https://console.aws.amazon.com/transfer/.

  2. 选择创建服务器打开创建服务器页.

  3. 适用于选择协议,选择SFTP (SSH 文件传输协议),然后选择下一步.

  4. 适用于选择身份提供商,选择Custom (自定义).

  5. 适用于定制提供商,粘贴调用 URL您在中创建的 API Gateway 终端节点的地址步骤 2.

  6. 适用于调用角色,请选择由Amazon CloudFormation模板。此角色允许 Transfer Family 调用 API Gateway 方法。

    调用角色包含Amazon CloudFormation为之前创建的堆栈选择的堆栈名称。格式如下:CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI.

  7. 确保你添加了正确的 CloudWatch 日志记录角色。格式如下:

    CloudFormation-stack-name-CloudWatchLoggingRole-ABC123DEF45

    注意

    确保服务器的日志记录角色与 Transfer Family 有信任关系。有关更多信息,请参阅 建立信任关系

  8. 填写其余选项,然后选择创建服务器.

注意

如果您为存储选项选择 Amazon EFS,则需要向 Lambda 函数添加 Posix 配置文件设置。有关详细信息,请参阅如果使用亚马逊 EFS,更新 Lambda

第 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. 选择 Test(测试)。

    如果用户身份验证成功,测试将返回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 GatewayAmazon针对您用于 API 的角色的托管策略。

第 5 步:测试 SFTP 连接和文件传输

测试 SFTP 连接
  1. 在 Linux 或 macOS 设备上,打开命令终端。

  2. 根据您是否使用密码或 key pair 进行身份验证,输入以下命令之一。

    • 如果您使用的是密码,请输入以下命令:

      sftp myuser@server-ID.server.transfer.region-code.amazonaws.com

      出现提示时请输入密码。

    • 如果您使用的是 key pair,请输入以下命令:

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    注意

    适用于这些sftp命令中,插入Amazon Web Services 区域Transfer Family 服务器所在的位置。例如,如果您的服务器位于美国东部 (俄亥俄),请输入us-east-2.

  3. sftp>提示符,请确保上传 (put)、下载 (get),并查看目录和文件(pwdls)。

第 6 步:限制访问存储桶

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

在此示例中,我们为Amazon CloudFormation堆栈:

  • CreateServertrue

  • 用户主页 MediaDirectory/myuser-bucket

  • UserNamemyuser

  • 用户密码MySuperSecretPassword

    重要

    这是一个示例密码。配置 API Gateway 方法时,请确保输入了强密码。

  • 用户 PublicKey1your-public-key

  • UserroLearnarn:aws:iam::role-id:role/myuser-api-gateway-role

这些区域有:用户 PublicKey1是您作为公有密钥/私有 key pair 的一部分生成的公有密钥。

这些区域有: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 myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    出现提示时请输入密码。

  • 如果您使用 key pair 进行身份验证,请运行以下命令:

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

注意

对于这些sftp命令,请使用 ID 作为Amazon Web Services 区域Transfer Family 服务器所在的位置。例如,如果您的服务器位于美国东部 (俄亥俄),请使用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

如果使用亚马逊 EFS,更新 Lambda

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

向 Lambda 函数添加 Posix 配置文件
  1. 在以下位置打开 Lambda 控制台https://console.aws.amazon.com/lambda/.

  2. 选择您之前创建的 Lambda 函数。Lambda 函数的格式为stack-name-获取用户配置 Lambda-lambda 标识符,其中,stack-name是 CloudFormation 堆栈名称和lambda 标识符是函数的标识符。

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

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

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

    其中,uid-值gid-值是分别表示用户 ID 和组 ID 的整数,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 '/' };