前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >附007.Kubernetes ABAC授权

附007.Kubernetes ABAC授权

作者头像
木二
发布2019-07-08 18:01:28
8600
发布2019-07-08 18:01:28
举报
文章被收录于专栏:木二天空木二天空

一 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 相关授权操作

代码语言:javascript
复制
  1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}

解释:Alice可以对所有资源做任何事情。

代码语言:javascript
复制
  1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}

解释:Kubelet可以读取任何pods。

代码语言:javascript
复制
  1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}

解释:Kubelet可以读写事件。

代码语言:javascript
复制
  1 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}

解释:Bob可以只读取命名空间“projectCaribou”中的pod。

代码语言:javascript
复制
  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用户名,该服务帐户的用户名是根据命名约定生成的:

代码语言:javascript
复制
  1 system:serviceaccount:<namespace>:<serviceaccountname>

创建新命名空间会导致以下列格式创建新服务帐户:

代码语言:javascript
复制
  1 system:serviceaccount:<namespace>:default

例如,如果要kube-system使用ABAC为API 授予默认服务帐户(在命名空间中)完全权限,则应将此行添加到策略文件中:

代码语言:javascript
复制
  1 {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}

需要重新启动apiserver才能获取新的策略行。

注意:该ABAC授权功能在Kubernetes 1.6版本开始已被弃用!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 ABAC
    • 1.1 ABAC授权
    • 二 ABAC使用
      • 2.1 策略文件格式
        • 2.2 Kubectl
          • 2.3 相关授权操作
            • 2.4 服务账户
            相关产品与服务
            多因子身份认证
            多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档