如何解决RClone:在我的服务器中而不是用户计算机/桌面应用程序中存储AWS S3访问密钥和秘密密钥
我已经使用GoLang Fyne
和RClone
创建了一个桌面应用程序。我将在S3上使用RClone的sync
和mount
功能,并且我不想将AWS access key
和Secret key
存储在我的桌面应用程序(最终用户桌面应用程序)中或本地配置文件。如何保护RClone,使其在我不将访问密钥ID和秘密密钥ID存储在用户计算机或桌面应用程序(硬编码)的情况下起作用? S3访问密钥和秘密密钥必须仅存储在我的服务器中。
我的方法:
- 桌面应用程序登录:修改后端登录api逻辑,以使其返回加密的AWS访问密钥和Secret。 AWS访问密钥和访问密码将在运行时在桌面应用程序中解密。
- 从我的登录API中返回AWS签名,并在RClone /桌面应用程序(https://github.com/rclone/rclone/blob/master/backend/s3/v2sign.go)中使用它,并使用该签名来调用s3 API(授权标头)。
- 无论如何,我是否可以生成无风险的AWS访问令牌和秘密密钥,它们只能访问AWS S3存储桶中的一个文件夹?
RClone S3连接代码:https://github.com/rclone/rclone/tree/master/backend/s3
解决方法
您似乎需要一些AWS凭证才能使用RClone。
您的应用程序可以生成临时凭据以提供给远程用户。我建议:
- 在空的IAM角色上调用STS
AssumeRole()
命令,但指定内联策略,以限制对所需S3存储桶和文件夹的访问 - 将返回的凭据传递给客户端
内联策略如下:
{
"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Action": [
"s3:PutObject","s3:GetObject"
],"Resource": "arn:aws:s3:::BUCKETNAME/FOLDERNAME/*"
},{
"Action": "s3:ListBucket","Effect": "Allow","Resource": "arn:aws:s3:::BUCKETNAME","Condition": {
"StringLike": {
"s3:prefix": "FOLDERNAME/*"
}
}
}
]
}
由AssumeRole()
返回的凭据在默认长度1小时内有效,但最多可以请求12小时。在这段时间之后,凭据将失效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。