zoukankan      html  css  js  c++  java
  • 附007.Kubernetes ABAC授权

    一 ABAC

    1.1 ABAC授权

    基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略向用户授予访问权限。
    使用--authorization-policy-file=SOME_FILENAME和--authorization-mode=ABAC启用ABAC模式。

    二 ABAC使用

    2.1 策略文件格式

    策略文件格式是每行一个JSON对象,每一行都是“策略对象”,其中每个这样的对象都是具有以下属性的映射:
    版本控制属性:
    apiVersion:字符串类型,有效值为“abac.authorization.kubernetes.io/v1beta1”;
    kind:字符串类型,有效值为“Policy”;
    spec 属性设置为具有以下属性的map:
    • 主题匹配属性:
    user:字符串类型,来自于--token-auth-file。如果指定user,则必须与经过身份验证的用户的用户名匹配。
    group:字符串类型,如果指定group,则必须与经过身份验证的用户的其中一个组匹配。
    system:authenticated:匹配所有经过验证的请求;
    system:unauthenticated:匹配所有未经身份验证的请求。
    • 资源匹配属性:
    apiGroup:字符串类型,一个API组。
    例如: extensions
    通配符:*匹配所有API组。
    namespace:字符串类型,命名空间。
    例如: kube-system
    通配符:*匹配所有资源请求。
    resource:字符串类型,资源类型。
    例如: pods
    通配符:*匹配所有资源请求。
    • 非资源匹配属性:
    nonResourcePath:字符串类型,非资源请求路径。
    例如:/version或/apis
    通配符:
    * 匹配所有非资源请求。
    /foo/*匹配的所有子路径/foo/。
    • readonly:布尔类型,当为true时,表示资源匹配策略仅适用于get,list和watch操作,非资源匹配策略仅适用于get操作。
    注意:unset属性与为其类型设置为零值的属性相同(例如,空字符串,0,false)。

    2.2 Kubectl

    Kubectl使用api-server的端点/api和/apis端点来发现服务的资源类型。
    使用ABAC授权时,必须通过nonResourcePath策略中的属性显式公开这些特殊资源。
    要检查特定kubectl操作中涉及的HTTP调用,可通过以下命令查看:
    kubectl --v=8 version

    2.3 相关授权操作

      1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
    解释:Alice可以对所有资源做任何事情。
      1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}
    解释:Kubelet可以读取任何pods。
      1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}
    解释:Kubelet可以读写事件。
      1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}
    解释:Bob可以只读取命名空间“projectCaribou”中的pod。
      1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}}
      2 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}
     
    解释:任何人都可以对所有非资源路径发出只读请求。
    更多RBAC参考:https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole

    2.4 服务账户

    每个服务帐户都有一个相应的ABAC用户名,该服务帐户的用户名是根据命名约定生成的:
      1 system:serviceaccount:<namespace>:<serviceaccountname>
    创建新命名空间会导致以下列格式创建新服务帐户:
      1 system:serviceaccount:<namespace>:default
    例如,如果要kube-system使用ABAC为API 授予默认服务帐户(在命名空间中)完全权限,则应将此行添加到策略文件中:
      1 {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}
    需要重新启动apiserver才能获取新的策略行。
    注意:该ABAC授权功能在Kubernetes 1.6版本开始已被弃用!
  • 相关阅读:
    RESTful规范
    Django REST framework 基本组件
    Django出错Xadmin后台报list index out of range
    Vue Cli
    nodejs的安装与npm的介绍
    Axios
    shell脚本中set -e作用
    Linux进程批量管理工具
    Docker-compose容易忽略的使用细节
    Docker部署WordPress网站
  • 原文地址:https://www.cnblogs.com/itzgr/p/11120069.html
Copyright © 2011-2022 走看看