如何在AWS上通过密钥对为客户端配置SFTP访问S3存储桶的权限
前提准备
- 已完成AWS Transfer Family SFTP服务器创建,端点类型按业务需求选择公网/VPC,身份提供商选择服务托管
- 待授权访问的目标S3存储桶已创建,无覆盖性拒绝的桶策略配置
- 客户端已提前生成SSH密钥对,公钥格式为标准
ssh-rsa或ssh-ed25519开头的单行字符串,无多余换行和特殊字符
具体操作步骤
步骤1:创建SFTP服务关联的IAM权限角色
- 进入IAM控制台,选择创建新角色,受信任实体类型选择AWS服务,使用案例搜索并勾选
Transfer,进入下一步 - 附加自定义的S3访问权限策略,参考最小权限配置示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::替换为你的目标桶名" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::替换为你的目标桶名/分配给该用户的目录前缀/*" } ] }
- 完成角色创建,记录该角色的ARN值备用
步骤2:创建SFTP用户并绑定客户端公钥
- 进入Transfer Family控制台,打开已创建的SFTP服务器详情页,切换到用户标签页,点击添加用户
- 填写分配给客户端的SFTP登录用户名,角色选择上一步创建的IAM角色
- 主目录填写格式为
/目标桶名/分配给该用户的目录前缀,可勾选锁定到主目录选项,避免用户越权访问其他路径 - 在SSH公钥输入框中,完整粘贴客户端提供的公钥内容,确认无多余空格和换行
- 其余配置保持默认即可,点击完成用户创建
步骤3:客户端登录验证
- 客户端本地保存好对应的SSH私钥文件,调整私钥权限为仅所有者可读:Linux/macOS执行
chmod 400 本地私钥文件路径,Windows在私钥文件属性-安全设置中禁用继承,仅保留当前用户的读取权限 - 执行登录命令测试:
sftp -i 本地私钥文件路径 SFTP用户名@SFTP服务器端点域名 - 登录成功后执行
ls可查看对应S3目录下的文件,执行put/get命令测试文件读写,操作正常则配置完成
注意事项
- 若使用ED25519类型密钥,需确认AWS区域支持该密钥类型,不兼容的场景可替换为2048位及以上的RSA密钥
- 出现权限报错时,优先检查IAM角色的权限范围,再确认S3桶策略是否存在拒绝该角色访问的规则
- 密钥轮换时直接在SFTP用户配置页更新公钥即可,无需修改其他配置
内容的提问来源于stack exchange,提问作者vivek nanda
相关产品推荐
相关产品推荐

