0

我使用GoLang Fyneand创建了一个桌面应用程序RClone。我将使用RClonesyncmountS3 的功能,我不想将AWS access keyand存储Secret key在我的桌面应用程序(最终用户桌面应用程序)或本地配置文件中。如何保护 RClone 以使其无需我将访问密钥 ID 和密钥 ID 存储在用户计算机或桌面应用程序(硬编码)中即可工作?S3 访问密钥和秘密密钥必须仅存储在我的服务器中。

我的方法:

  1. 桌面应用程序登录:修改我的后端登录 api 逻辑,使其返回加密的 AWS 访问密钥和 Secret。AWS 访问密钥和访问密钥将在桌面应用程序的运行时解密。
  2. 从我的登录 API 返回 AWS 签名并在 RClone/Desktop 应用程序 ( 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

4

1 回答 1

0

您似乎需要一些 AWS 凭证才能使用 RClone。

您的应用程序可以生成临时凭证以提供给远程用户。我会推荐:

  • AssumeRole()对空的 IAM 角色调用 STS命令,但指定限制对所需 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 小时。在此时间段之后,凭据将变为无效。

于 2020-09-15T21:08:15.757 回答