使用AWS CLI来备份和恢复S3 Bucket的ACL
S3 Bucket层面的权限管理,推荐使用Bucket Policy来管理,但可能会有一些遗留的S3 Bucket, 还使用着Bucket ACL来进行权限管理。
在将Bucket ACl升级为Bucket Policy或者是更新Bucket ACL的时候,会有备份Bucket ACL的需求。此处介绍一下如何使用AWS CLI来备份和恢复Bucket的Bucket ACL。
备份 Bucket ACL
使用CLI中s3api中的get-bucket-acl命令来保存bucket acl。
用法
1 | get-bucket-acl |
例子
aws s3api get-bucket-acl的输出默认是json格式。如下例子中,表示bucket允许任意AWS User都可以READ bucket中的object, 用户b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149可以有FULL_CONTROL整个bucket。
1 | $ aws s3api get-bucket-acl --bucket carl-test-at-seoul |
备份
将命令的输出重定向到某个文件中,就可以备份该bucket的bucket acl了。
1 | aws s3api get-bucket-acl --bucket carl-test-at-seoul > bucket_acl_of_carl-test-at-seoul.json |
恢复 Bucket ACL
使用CLI中s3api中的put-bucket-acl命令来恢复bucket acl。
用法
1 | put-bucket-acl |
其中,从文件中恢复ACL只需要关注 --bucket(指定bucket)和--access-control-policy(添加bucket ACL文件)这两个参数即可。
例子
使用先将Bucket carl-test-at-seoul中允许任意AWS User都可以READ object的权限去掉。去掉后,相关bucket acl如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$ aws s3api get-bucket-acl --bucket carl-test-at-seoul
{
"Owner": {
"ID": "b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149"
},
"Grants": [
{
"Grantee": {
"Type": "CanonicalUser",
"ID": "b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149"
},
"Permission": "FULL_CONTROL"
}
]
}
$再使用之前保存的acl文件来恢复该bucket的acl。
1
$ aws s3api put-bucket-acl --bucket carl-test-at-seoul --access-control-policy file://bucket_acl_of_carl-test-at-seoul.json
检查bucket的acl,可以看到已经恢复成acl文件中相应的权限了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23$ aws s3api get-bucket-acl --bucket carl-test-at-seoul
{
"Owner": {
"ID": "b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "READ"
},
{
"Grantee": {
"Type": "CanonicalUser",
"ID": "b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149"
},
"Permission": "FULL_CONTROL"
}
]
}
$