本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:将 Amazon API Gateway 方法设置为自定义身份提供商
本教程说明了如何设置 Amazon API Gateway 方法并将其用作自定义身份提供商来将文件上传到Amazon Transfer Family服务器。本教程使用基本堆栈模板
内容
第 1 步:创建 CloudFormation 堆
打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation
。 -
Select创建堆栈,然后选择使用新资源(标准)).
-
在先决条件-准备模板窗格中,选择模板准备就绪.
-
复制这个链接,基本堆栈模板
,然后将其粘贴到Amazon S3 URL字段中返回的子位置类型。 -
单击 Next(下一步)。
-
指定参数,包括堆栈的名称。请务必执行以下操作:
替换默认值UserName和用户密码.
-
替换默认值UserroLearn有一个实际的Amazon Identity and Access Management具有适当权限的 (IAM) 角色。有关 IAM 角色和存储桶策略示例,请参阅第 6 步:限制访问存储桶.
-
如果要使用公钥而不是密码进行身份验证,请在用户 PublicKey1字段中返回的子位置类型。首次使用 SFTP 连接到服务器时,您将提供私有密钥,而不是密码。
-
选择下一步,然后选择下一步再次在上配置堆栈选项页.
-
查看您正在创建的堆栈的详细信息,然后选择创建堆栈.
注意 在页面底部,在下Capabilities,你必须承认Amazon CloudFormation可能会创建 IAM 资源。
第 2 步:检查服务器的 API Gateway 方法配置并创建它。
为了提高安全性,您可以配置 Web 应用程序防火墙。Amazon WAF是一种 Web 应用程序防火墙,让您能够监控转发到 Amazon API Gateway 的 HTTP 和 HTTPS 请求。有关详细信息,请参阅添加 Web 应用程序防火墙。
检查服务器的 API Gateway 方法配置并创建它。
-
通过以下网址打开 API Gateway 控制台:https://console.aws.amazon.com/apigateway/
。 -
选择转移自定义身份提供商基本模板那Amazon CloudFormation已生成模板。
-
在资源窗格中,选择得到,然后选择方法请求.
-
适用于操作,选择部署 API. 适用于部署阶段,选择prod,然后选择部署.
成功部署 API Gateway 方法后,请在舞台编辑器部分。
注意 复制调用 URL显示在页面顶部的地址。您在下一个步骤中需要使用此值。
第 3 步:创建 Transfer Family 服务器
创建 Transfer Family 服务器
-
打开Amazon Transfer Family控制台https://console.aws.amazon.com/transfer/
. -
选择创建服务器打开创建服务器页.
-
适用于选择协议,选择SFTP (SSH 文件传输协议),然后选择下一步.
-
适用于选择身份提供商,选择Custom (自定义).
-
适用于定制提供商,粘贴调用 URL您在中创建的 API Gateway 终端节点的地址步骤 2.
-
适用于调用角色,请选择由Amazon CloudFormation模板。此角色允许 Transfer Family 调用 API Gateway 方法。
调用角色包含Amazon CloudFormation为之前创建的堆栈选择的堆栈名称。格式如下:
.CloudFormation-stack-name
-TransferIdentityProviderRole-ABC123DEF456GHI
-
确保你添加了正确的 CloudWatch 日志记录角色。格式如下:
CloudFormation-stack-name
-CloudWatchLoggingRole-ABC123DEF45
注意 确保服务器的日志记录角色与 Transfer Family 有信任关系。有关更多信息,请参阅 建立信任关系。
-
填写其余选项,然后选择创建服务器.
如果您为存储选项选择 Amazon EFS,则需要向 Lambda 函数添加 Posix 配置文件设置。有关详细信息,请参阅如果使用亚马逊 EFS,更新 Lambda。
第 4 步:测试用户是否可以连接到服务器
要测试用户是否可以连接到服务器,请使用 Transfer Family 控制台
打开Amazon Transfer Family控制台https://console.aws.amazon.com/transfer/
. -
在存储库的服务器页面上,选择您的新服务器,选择操作,然后选择测试.
-
输入的文本用户名和密码你在部署时设置Amazon CloudFormation堆栈。
-
适用于服务器协议选择,选择SFTP,以及源 IP输入,输入
127.0.0.1
. -
选择 Test(测试)。
如果用户身份验证成功,测试将返回
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 GatewayAmazon针对您用于 API 的角色的托管策略。
第 5 步:测试 SFTP 连接和文件传输
测试 SFTP 连接
-
在 Linux 或 macOS 设备上,打开命令终端。
-
根据您是否使用密码或 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
. -
-
在
sftp>
提示符,请确保上传 (put
)、下载 (get
),并查看目录和文件(pwd
和ls
)。
第 6 步:限制访问存储桶
您可以限制谁能够访问特定 Amazon S3 存储桶。以下示例演示了在您的中使用的设置: CloudFormation 堆栈和您为用户选择的策略中。
在此示例中,我们为Amazon CloudFormation堆栈:
CreateServer:
true
用户主页 MediaDirectory:
/myuser-bucket
UserName:
myuser
用户密码:
MySuperSecretPassword
重要 这是一个示例密码。配置 API Gateway 方法时,请确保输入了强密码。
用户 PublicKey1:
your-public-key
UserroLearn:
arn: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 配置文件
在以下位置打开 Lambda 控制台https://console.aws.amazon.com/lambda/
. -
选择您之前创建的 Lambda 函数。Lambda 函数的格式为
stack-name
-获取用户配置 Lambda-lambda 标识符
,其中,stack-name
是 CloudFormation 堆栈名称和lambda 标识符
是函数的标识符。 -
在代码选项卡,选择index.js以显示函数的代码。
-
在
response
,在之间添加以下行Policy
和HomeDirectory
: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 '/' };