6.2.1 ABAC授权示例
2023年5月21日...大约 2 分钟
6.2.1 ABAC模式详解
在API Server 启用ABAC 模式时,需要指定授权策略文件的路径和名称(--authorization-policy-file=SOME_FILENAME
),授权策略文件里的第一行都以一个Map类型的JSON对象进行设置。
通过设置访问策略对象中的apiVersion
,Kind
,spec
属性确定具体的授权策略,其中apiVersion
当前版本为abac.authorization.kubernetes.io/v1beta1
Kind
被设置为 Policy
spec
指详细的策略设置,包括主体属性、资源属性、非资源属性这三个字段
- 主体属性
- user(用户名):字符串类型,该字符串类型的用户名来源于Token文件(
--token-auth-file
参数设置的文件)或基本认证文件中用户名称段的值。 - group(用户组):在被设置为
system:authenticated
时表示匹配所有已认证的请求,设置为system:unauthenticated
时表示匹配所有非认证的请求
- user(用户名):字符串类型,该字符串类型的用户名来源于Token文件(
- 资源属性
- apiGroup(API组):字符串类型,表明匹配哪些
API Group
,例如extensions
或*
,* 表示所有 - namespace(命名空间):字符串类型,表明允许访问某个
namespacer
的资源,例如kube-system
,或者*
(*
表示所有) - resource(资源):字符串类型,API 资源对象,例如Pods ,或者
*
(*
表示所有)
- apiGroup(API组):字符串类型,表明匹配哪些
- 非资源属性
- nonResourcePath(非资源对象类型路径):非资源对象类的URL路径,例如
/version
或/apis
,*
(*
表示所有),也可以设置子路径,/foo/*
匹配/foo
下所有子路径 - readonly(只读标识):布尔类型 ,值为
true
时表明仅允许 GET请求通过
- nonResourcePath(非资源对象类型路径):非资源对象类的URL路径,例如
在使用kubectl 操作时,如果需要查看发送到API Server 的 HTTP请求,则可以将日志级别设置成 8
kubectl --v=8 version
ABAC授权示例
允许用户alice 对所有资源做任何操作
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"user": "alice",
"namespace": "*",
"resource": "*",
"apiGroup": "*"
}
}
kubelet 可以读取任意Pod
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"user": "`",
"namespace": "*",
"resource": "Pods",
"readonly": true
}
}
kubelet 可以读写Event对象
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"user": "kubelet",
"namespace": "*",
"resource": "Event"
}
}
用户bob只能读取ProjectCaribou中的Pod
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"user": "bob",
"namespace": "ProjectCaribou",
"resource": "Pods",
"readonly" true
}
}
任何用户都可以对非资源类路径进行只读请求
system:authenticated 所有认证用户
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"group": "system:authenticated",
"readonly" true,
"nonResourcePath": "*"
}
}
system:unauthenticated 所有非认证用户
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"Kind": "Policy",
"spec": {
"group": "system:unauthenticated",
"readonly": true,
"nonResourcePath": "*"
}
}
贡献者
changelichangyangccm@163.com