微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RClone:在我的服务器中而不是用户计算机/桌面应用程序中存储AWS S3访问密钥和秘密密钥

如何解决RClone:在我的服务器中而不是用户计算机/桌面应用程序中存储AWS S3访问密钥和秘密密钥

我已经使用GoLang FyneRClone创建了一个桌面应用程序。我将在S3上使用RClone的syncmount功能,并且我不想将AWS access keySecret key存储在我的桌面应用程序(最终用户桌面应用程序)中或本地配置文件。如何保护RClone,使其在我不将访问密钥ID和秘密密钥ID存储在用户计算机或桌面应用程序(硬编码)的情况下起作用? S3访问密钥和秘密密钥必须仅存储在我的服务器中。

我的方法

  1. 桌面应用程序登录修改后端登录api逻辑,以使其返回加密的AWS访问密钥和Secret。 AWS访问密钥和访问密码将在运行时在桌面应用程序中解密。
  2. 从我的登录API中返回AWS签名,并在RClone /桌面应用程序(https://github.com/rclone/rclone/blob/master/backend/s3/v2sign.go)中使用它,并使用该签名来调用s3 API(授权标头)。
  3. 无论如何,我是否可以生成无风险的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 举报,一经查实,本站将立刻删除。