将 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/cloudformat ion 上打开 AWS CloudFormation 控制台。

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

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

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

  5. 单击下一步

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

    • 替换UserName和的默认值UserPassword

    • 对于 UserHomeDirectory,请输入您之前创建的存储(Amazon S3 存储桶或亚马逊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 Gateway 方法配置并进行部署
  1. 打开API网关控制台,网址为https://console.aws.amazon.com/apigateway/

  2. 选择模板生成的转移自定义身份提供者基本 AWS CloudFormation 模板API

  3. 在 “资源” 窗格中,选择 GET,然后选择 “方法请求”。

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

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

    注意

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

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

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

要查看您的 Transfer Family 服务器详细信息
  1. https://console.aws.amazon.com/cloudformat ion 上打开 AWS CloudFormation 控制台。

  2. 选择您创建的堆栈。

  3. 选择资源选项卡。

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

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

  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 Gateway 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 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命令,请使用您的 Transf AWS 区域 er 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

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

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

要向 Lambda 函数添加 posix 配置文件
  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 中,在 PolicyHomeDirectory 之间添加以下行:

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

    在哪里 uid-value 以及 gid-value 是分别代表用户 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 '/' };