跳至主要內容

6.2.1 ABAC授权示例

Change Lee...大约 2 分钟容器k8sABAC

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 时表示匹配所有非认证的请求
  • 资源属性
    • apiGroup(API组):字符串类型,表明匹配哪些API Group,例如 extensions*,* 表示所有
    • namespace(命名空间):字符串类型,表明允许访问某个namespacer的资源,例如 kube-system,或者 **表示所有)
    • resource(资源):字符串类型,API 资源对象,例如Pods ,或者 **表示所有)
  • 非资源属性
    • nonResourcePath(非资源对象类型路径):非资源对象类的URL路径,例如/version/apis** 表示所有),也可以设置子路径,/foo/* 匹配 /foo下所有子路径
    • readonly(只读标识):布尔类型 ,值为true时表明仅允许 GET请求通过

在使用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": "*"
  }
}
上次编辑于:
贡献者: change,lichangyangccm@163.com
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3