MinIO 的身份管理¶
DCE 5.0 提供的 MinIO 服务自带网页控制台(Web Console)。了解 MinIO 的身份管理(identity management)有助于快速了解如何在 MinIO 内安全有效地管理子账号。
本文简单介绍 MinIO 的身份管理规则,更多详细说明可参考 MinIO 的官方文档。
用户¶
默认情况下,MinIO 使用内置的 IDentity Provider(IDP)来完成身份管理。除了 IDP,还支持第三方 OIDC 和 LDAP 的方式。
用户由一对 username 和 password 组成。在 MinIO 的语境中,username 又被称为 access key (注意与后面 service account 层级的 access key 区分开来),password 又称为 secret key 。
root 用户¶
在启动 MinIO 时,可以通过环境变量的方式设置 MinIO 集群中 root 用户的账号密码,分别是以下两个变量:
- MINIO_ROOT_USER
- MINIO_ROOT_PASSWORD
root 用户拥有所有资源的所有操作权限。
注意:如果要变更 root 用户,需要重启 MinIO 集群中所有的节点。
普通用户¶
支持通过三种方式创建普通用户:
- Web Console,在 UI 界面中通过表单进行创建
- mc,使用 CLI 命令行创建
- Operator CR,使用 CR 进行创建
Console 创建¶
-
在 DCE 5.0 的 MinIO 实例详情页面,点击访问地址,使用右侧的用户名和密码即可登录该实例的 Console 控制台。
-
登录 Console 控制台之后根据下图所示,创建用户。
mc 创建¶
需要事先安装 mc 命令,并配置连接到 MinIO 实例
创建用户:
ALIAS 指 MinIO 实例的别名
授予权限:
USERNAME 指 MinIO 用户的用户名,即 ACCESSKEY
operator CR 创建¶
如果是通过 cr 安装 MinIO,也可以通过 users 字段来指定普通用户的 secret:
type TenantSpec struct {
....
....
....
// *Optional* +
//
// An array of https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes opaque secrets] to use for generating MinIO users during tenant provisioning. +
//
// Each element in the array is an object consisting of a key-value pair __name: <string>__ , where the __<string>__ references an opaque Kubernetes secret. +
//
// Each referenced Kubernetes secret must include the following fields: +
//
// * __CONSOLE_ACCESS_KEY__ - The "Username" for the MinIO user +
//
// * __CONSOLE_SECRET_KEY__ - The "Password" for the MinIO user +
//
// The Operator creates each user with the __consoleAdmin__ policy by default. You can change the assigned policy after the Tenant starts. +
// +optional
Users []*corev1.LocalObjectReference __json:"users,omitempty"__
....
....
....
}
服务账号¶
服务账号 (Service Account) 通常使用用户登录 console 或者通过 mc 命令对 MinIO 进行管理操作。但如果应用程序需要访问 MinIO,则通常使用 Service Account(这是比较正式的叫法,某些上下文中也称之为 access key)。
一个用户可以创建多个 Service Account。
注意:无法通过 Service Account 登录 MinIO console,这也是它与用户最大的不同之处。
Console 创建¶
mc 命令创建¶
有关 MinIO 用户的详细说明,可参考 User Management
用户组¶
用户组,顾名思义即多个用户形成的集合。通过用户组结合授权策略可以批量管理一组用户的权限。通过授权策略可以为用户组分配资源权限,该组中的用户会继承用户组的资源权限。
MinIO 用户的权限分为两部分:用户原本具有的权限 + 从所在用户组继承而来的权限。在 MinIO 语境中,用户仅具有其明确被授予或从用户组继承而来的授权。如果用户没有明确获得(被直接授予或继承)某一资源的权限,则无法访问该资源。
有关 MinIO 用户组的详细说明,可参考 Group Management
授权策略¶
MinIO 使用基于策略的访问控制 (PBAC)来管理用户对哪些资源具有哪些权限。每条策略通过规定一些动作或条件来限制用户和用户组具有的权限。
内置策略¶
MinIO 内置了四种策略可以直接分配给用户或用户组。为用户/用户组授权时需要使用 mc admin policy set 命令,具体可参考 mc admin policy
-
readonly:对 MinIO 副本中的所有存储桶和存储对象具有 只读 权限
-
readwrite:对 MinIO 副本中的所有存储桶和存储对象具有 读写 的权限
-
diagnostics:对 MinIO 副本具有 诊断 权限
-
writeonly:对 MinIO 副本中的所有存储桶和存储对象具有 只写 权限
策略文件示例¶
MinIO 授权策略文件的模式和亚马逊云 IAM Policy 相同。
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [ "s3:<ActionName>", ... ],
"Resource" : "arn:aws:s3:::*",
"Condition" : { ... }
},
{
"Effect" : "Deny",
"Action" : [ "s3:<ActionName>", ... ],
"Resource" : "arn:aws:s3:::*",
"Condition" : { ... }
}
]
}
有关 MinIO 授权策略的详细说明,可参考 Policy Management