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
2
3
4
get-bucket-acl
--bucket <value>
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

例子

aws s3api get-bucket-acl的输出默认是json格式。如下例子中,表示bucket允许任意AWS User都可以READ bucket中的object, 用户b0a30227944666c6a28c66c35d06e096a813a0c533e0a16ffb48ca8e6ba36149可以有FULL_CONTROL整个bucket。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ 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"
}
]
}

备份

将命令的输出重定向到某个文件中,就可以备份该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
2
3
4
5
6
7
8
9
10
11
12
put-bucket-acl
[--acl <value>]
[--access-control-policy <value>]
--bucket <value>
[--content-md5 <value>]
[--grant-full-control <value>]
[--grant-read <value>]
[--grant-read-acp <value>]
[--grant-write <value>]
[--grant-write-acp <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

其中,从文件中恢复ACL只需要关注 --bucket(指定bucket)和--access-control-policy(添加bucket ACL文件)这两个参数即可。

例子

  1. 使用先将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"
    }
    ]
    }
    $
  2. 再使用之前保存的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
  3. 检查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"
    }
    ]
    }
    $

留言