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

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

教程:设置自定义身份提供程序

本教程说明如何设置 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用户密码.

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

    • 如果要使用公钥而不是密码进行身份验证,请在用户公共密钥 1字段中返回的子位置类型。首次使用 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. 选择转移自定义身份提供程序基本模板 API的Amazon CloudFormation已生成模板。

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

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

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

    注意

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

第 3 步:创建 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

    注意

    确保服务器的日志记录角色与传输系列具有信任关系。有关详细信息,请参阅建立信任关系

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

注意

如果您选择亚马逊 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 Gateway 添加一个网关Amazon托管策略添加到您正在用于 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

  • 用户主目录/myuser-bucket

  • UserNamemyuser

  • 用户密码MySuperSecretPassword

    重要

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

  • 用户公共密钥 1your-public-key

  • 用户学习arn:aws:iam::role-id:role/myuser-api-gateway-role

这些区域有:用户公共密钥 1是您作为公有/私有 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命令,请使用 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 函数。

将 POSIX 配置文件添加到您的 Lambda 函数

  1. 打开 Lambda 控制台https://console.aws.amazon.com/lambda/.

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

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

  4. response,将以下一行添加到PolicyHomeDirectory

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

    其中Uid 值赠与值是整数,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 '/' };