流程:
用户登录时输入用户名+密码
Transfer Family(SFTP)将其传入到API Gateway,API Gateway上有一个Lambda函数
Lambda代码进行鉴权,在这个例子用secret manager作为鉴权中心
鉴权通过后,secret manager把用户访问S3的桶路径、IAM Role等信息
返回到API Gateway
下载cloudformation代码:https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-apig.template.yml
在cloudformation里创建新的stack:
将下载的yaml文件上传:
输入stack名称后,一直点击下一步:
最后在IAM相关选项打上钩,创建stack:
大概3-5分钟创建完成,在创建期间可以进行下面两步的操作:
这一步用于创建transfer服务的role,用于控制用户可以对S3有哪些操作权限。
选择transfer服务并进入下一步
附加对应的权限,用于控制后续transfer服务可以访问哪些桶(这里仅用于测试目的,使用了S3FullAccess, 如果想细粒度的控制权限,先提前创建一个policy用于这一步):
为role命名,例如transfer-access-s3
,并保存。
进行secrets manager界面,点击Store a new secret
:
选择Other type of secret
, 并使用json定义密码等参数:
{
"Password": "sftp-pass",
"Role": "arn:aws:iam::145197526627:role/transfer-access-s3",
"HomeDirectory": "/broadcast-videos"
}
点击下一步,输入secret名称——必须以SFTP/username
这种形式,例如下面代表ftp-test这个用户:
一直点击下一步,直到创建完成。
这样我们就创建好了一个ftp用户:
ftp-user
,密码是sftp-pass
transfer-access-s3
role里声明的broadcast-videos
这个S3桶上面三步全部创建完成后,进入Transfer Family
的页面,查看新创建的sftp服务器的URL地址:
复制下来后,使用FileZilla连接:
使用正确的用户名+密码可以连接上去,使用错误的密码会拒绝连接。