Ozone 访问控制列表
Ozone 既支持原生的 ACL,也支持类似 Ranger 这样的 ACL 插件,如果启用了 Ranger 插件,则以 Ranger 中的 ACL 为准。
Ozone 的 ACL 是 Posix ACL 和 S3 ACL 的超集。
ACL 的通用格式为 对象:角色:权限.
对象 可选的值包括:
- 卷 - 一个 Ozone 卷,比如 /volume
- 桶 - 一个 Ozone 桶,比如 /volume/bucket
- 键 - 一个对象键,比如 /volume/bucket/key
- 前缀 - 某个键的路径前缀,比如 /volume/bucket/prefix1/prefix2
角色 可选的值包括:
- 用户 - 一个 Kerberos 用户,和 Posix 用户一样,用户可以是已创建的也可以是未创建的。
- 组 - 一个 Kerberos 组,和 Posix 组一样,组可以是已创建的也可以是未创建的。
- 所有人 - 所有通过 Kerberos 认证的用户,这对应 Posix 标准中的其它用户。
- 匿名 - 完全忽略用户字段,这是对 Posix 语义的扩展,使用 S3 协议时会用到,用于表达无法获取用户的身份或者不在乎用户的身份。
S3 用户通过 AWS v4 签名协议访问 Ozone 时,OM 会将其转化为对应的 Kerberos 用户。
权限 可选的值包括::
- 创建 – 此 ACL 为用户赋予在卷中创建桶,或者在桶中创建键的权限。请注意:在 Ozone 中,只有管理员可以创建卷。
- 列举 – 此 ACL 允许用户列举桶和键,因为列举的是子对象,所以这种 ACL 要绑定在卷和桶上。请注意:只有卷的属主和管理员可以对卷执行列举操作。
- 删除 – 允许用户删除卷、桶或键。
- 读取 – 允许用户读取卷和桶的元数据,以及读取键的数据流和元数据。
- 写入 - 允许用户修改卷和桶的元数据,以及重写一个已存在的键。
- 读 ACL – 允许用户读取某个对象的 ACL。
- 写 ACL – 允许用户修改某个对象的 ACL。
Ozone 原生 ACL API
ACL 可以通过 Ozone 提供的一系列 API 进行操作,支持的 API 包括:
- SetAcl – 此 API 的参数为用户主体、Ozone 对象名称、Ozone 对象的类型和 ACL 列表。
- GetAcl – 此 API 的参数为 Ozone 对象名称和 Ozone 对象类型,返回值为 ACL 列表。
- AddAcl - 此 API 的参数为 Ozone 对象名称、Ozone 对象类型和待添加的 ACL,新的 ACL 会被添加到该 Ozone 对象的 ACL 条目中。
- RemoveAcl - 此 API 的参数为 Ozone 对象名称、Ozone 对象类型和待删除的 ACL。