阿里云设置子用户AccessKey,分配权限只允许操作OSS的某一个Bucket

姚洪楼 发表于 学习备忘录 分类,标签: ,
0
 

前段时间将博客搬到了 RackNerd 的廉价VPS上面:https://www.mpyes.com/2021.02.24/23:51:25/2502
(2.5G内存,3T月流量,一年8美元,折合人民币52元,比阿里云要便宜太多太多了……)
RN的背景我并不清楚,考虑到他们的VPS比较廉价,所以意味着他们的利润也就比较低,所以理论上RN存在很大的跑路可能性,而对于一个博客来说数据肯定是相当相当重要的,所以就有了异地备份的必要性。

最简单的当属是安装宝塔控制面板用FTP插件进行异地备份,然而还要再去找一个美国的带FTP的空间还要评估所找空间的稳定性,所以多年之前我使用的这个方案肯定是已经落伍的了,现在我使用的方法是通过宝塔面板备份到阿里云跟Google这两个地方去,优点是价格低廉稳定性极高,缺点是几乎没有缺点!
宝塔面板的安装就不多说了,备份方法是先在软件商店安装“阿里云OSS、谷歌云网盘”这两个插件,然后对这两个插件进行设置,阿里云OSS要注意使用子用户AccessKey(下面会具体来说)谷歌云网盘这个非常简单按要求登陆Google账号然后将返回的哪个无法打开的URL复制粘贴到宝塔面板进行 Gogle Token 验证就可以了,设置完成后再在宝塔面板的计划任务中添加定时任务即可,我设置的是每12小时备份一次网站到阿里云OSS、每6小时备份一次数据库到阿里云OSS、每天凌晨0点备份一次网站到 Google Drive,每天凌晨1点备份一次数据库到 Google Drive(错时备份是为了降低VPS负载)

关于阿里云,许多人觉得AccessKey用起来那是相当方便,在第三方网站只需输入 AccessKey ID 及 AccessKey Secret,然后其它的事情都会自动完成,且忽视了这个自动完成是由第三方网站进行的,如果第三方网站存储了的你的AccessKey便可以通过AccessKey对你的阿里云账号进行其它操作,所以在每次操作AccessKey的时候阿里云都会弹出这个提示:

遗憾的,大部分人根本看不懂这段话所要表达的意思,都认为我申请AccessKey不就是为了能在第三方网站使用的嘛,而什么“使用 RAM 子用户 AccessKey 来进行 API 调用”这句话太专业了我也不懂什么意思,所以我还是选择“继续使用AccessKey”算了(即便选了“开始使用子用户 AccessKey”然后也大概率因为看不懂如果设置而回过头重新选择“继续使用AccessKey”)
子用户 AccessKey 的操作其实也不算太难,按提示先建立一个子用户 AccessKey,然后将 AccessKey ID 跟 AccessKey Secret 复制存档(忘记复制也没关系,随时可以再重建一组新的 AccessKey ID 跟 AccessKey Secret )添加成功之后就等于是有了一个没有任何权限的 AccessKey,然后打开用户清单中为它添加权限,每个权限基本都配有中文说明所以还是比较简单的,权限添加完毕之后就可以在第三方网站使用这组 AccessKey ID 跟 AccessKey Secret 进行操作了。

关于 AccessKey 的逻辑关系大概是这样的:
1、AccessKey 拥有阿里云账号的所有权限,子用户AccessKey拥有阿里云账号的部分权限(由用户自行指定)
2、每个子用户AccessKey 都有一个UID,在OSS后台还会显示它的“用户名”(用户名是可以修改的)
3、不管“AccessKey”还是“子用户AccessKey”,访问权限都是通过“AccessKeyID + AccessKeySecret ”验证的
  (换言之:AccessKeyID + AccessKeySecret  用来得到 AccessKey 的 UID,然后阿里云赋予其此UID的权限)
再来说阿里云OSS的权限,即便是使用“子用户AccessKey”如果你为其添加的是预设权限里的 AliyunOSSFullAccess,那么它获得的权限就是整个OSS的操作,一旦第三方有了你的这组 AccessKeyID + AccessKeySecret  便可以访问你OSS里面的其它内容,而且还可以任意的删除添加,这相当的危险!

所以最理想的方法就是设置一个子用户AccessKey,让它只可以操作OSS里的某个Bucket,比如我新建了一个Bucket,它的名字是 bt-rn,专门用于存放RackNerd的数据备份,那么只需在AccessKey添加权限的界面点击“新建权限策略”策略名称可以随便设置比如我设置的是“bt-rn”,配置模式选择“脚本配置”,脚本内容输入如下:

{
       “Version”: “1”,
       “Statement”: [
           {
               “Effect”: “Allow”,
               “Action”: [
                   “oss:ListBuckets”,
                   “oss:GetBucketStat”,
                   “oss:GetBucketInfo”,
                   “oss:GetBucketAcl”
               ],
               “Resource”: “acs:oss:*:*:*”
           },
           {
               “Effect”: “Allow”,
               “Action”: [
                   “oss:Get*”,
                   “oss:Put*”,
                   “oss:List*”,
                   “oss:DeleteObject”
               ],
               “Resource”: “acs:oss:*:*:bt-rn
          },
           {
               “Effect”: “Allow”,
               “Action”: [
                   “oss:Get*”,
                   “oss:Put*”,
                   “oss:List*”,
                   “oss:DeleteObject”
               ],
               “Resource”: “acs:oss:*:*:bt-rn/*”
           }
       ]
   }

然后回到AccessKey添加权限界面,选择“自定义策略”,将上述策略添加给子用户AccessKey,然后将这个AccessKey的 AccessKey ID 跟 AccessKey Secret 输入到宝塔后台的阿里云OSS插件即可。
(在其它一些场合,比如nas文件同步到oss,比如wordpress图片上传oss插件等,也都是同样的道理)


【版权声明】
 本文短地址:mpYes.com/2504 本文版权属于:mpYes.com
 含有照片的文章谢绝转载,包括但不限于本人及本人亲友的照片
 涉及中国大陆现状的描述、本人的政治评论等相关文章谢绝转载
 其余文章允许非商用性质的转载,但请保留本文链接及本人署名

发表我的评论