kubernetes Authorization

kubernetes授权设置

在kubernetes中授权 和 认证是各自独立的部分。认证部分参见 kubernetes认证
授权操作适用于所有面向于kubernetes api的http请求。

授权 将会针对每一个请求,根据访问策略来检查对比请求中的属性信息(比如 用户,资源,namespace等)。一个API请求必须满足指定的策略才能继续执行。

有如下几种策略方式:

  • --authorization_mode=AlwaysDeny
  • --authorization_mode=AlwaysAllow
  • --authorization_mode=ABAC

AlwaysDeny 阻止所有请求(通常用在测试环境);AlwaysAllow允许所有请求,如果不想用授权机制可以这么设置;ABAC允许用户自定义的授权策略,ABAC的全写为:Attribute-Based Access Control(面向属性的授权控制)。

ABAC Mode

请求属性

在授权设置中,可以用到的属性设置有4个:

  • user ,已经被认证的用户;
  • 请求是否是只读的;
  • 被请求的资源是什么,只接受针对api endpoint的请求,如/api/v1/namespaces/default/pods,对于其他的endpoint,如/version,资源描述则为空string;
  • 访问对象的namespace,如果访问的对象不支持namespace,则为空string

授权文件格式

设置参数为: --authorization_policy_file=SOME_FILENAME,这样便开启ABAC模式。 在指定的文件中,一行为一个json对象,这个json对象包含几个map格式,这些map对象有如下:

  • user,string类型,对应--token_auth_file 中的user属性;
  • readonly,bool类型,当设置为true时,只接受GET请求;
  • resource,string类型,请求URL中对应的资源类型,如pod;
  • namespace,string类型,对应namespace。

如果属性没有设置,那么默认值为0 或 false 或 空string。

授权算法

一个请求中设置的属性决定了这个请求所能拥有的特性(好绕~)

当收到一个请求,就获取了这个请求应该拥有的相应特性,如果某些属性没有设置,那么会默认设置为这个属性类型对应的空值,如0,false,空string 等。

如果在授权文件中某个属性被重复定义了,那么只要有一个满足授权条件,那么这个请求就被认为是被授权的。

如果在授权条件中将user设置为空,那么不会对任何用户做限制; 如果在授权条件中奖namespace设置为空,那么不对任何namespace做限制。

Examples

  1. {"user":"alice"}:
    用户alice 可以做任何事!
  2. {"user":"kubelet", "resource": "pods", "readonly": true}:
    kubelet可以GET任何pod的信息。
  3. {"user":"kubelet", "resource": "events"}:
    kubelet可以对events做任何读写操作。
  4. {"user":"bob", "resource": "pods", "readonly": true, "ns": "projectCaribou"}:
    Bob 仅仅能GET处于namespace projectCaribou下的pod。

kubernetes认证设置kubernetes中,验证用户是否有权限操作api的方式有三种:证书认证,token认证,基本信息认证。证书认证设置apiserver的启动参数:--client_ca_file=SOMEFILE ,这个被引用的文件中包含的验证client的证书,如果被验证通过,那么这个验证记录中的主体对象将会作为请求的username。token认证设置apiserver的启动参数:--token_auth_file=SOMEFILE,目前使用token还存在争议,而且如果变更了这个文件内容,只有重启apiserver才能使配置生效。token file的格式包含三列:token,username,userid。当使用token作为验证方式时,在对apiserver的http请求中,增加一个Header字段:Authorization ,将它的值设置为:Bearer SOMETOKEN。基本信息认证设置apiserver的启动参数:--basic_auth_file=SOMEFILE,如果更改了文件中的密码,只有重新启动apiserver使其重新生效。其文件的基本格式包含三列:passwork,username,userid。当使用此作为认证方式时,在对apiserver的http请求中,增加一个Header字段:Authorization ,将它的值设置为: Basic BASE64ENCODEDUSER:PASSWORD.

https://segmentfault.com/a/1190000002919433?utm_source=tuicool

http://www.coin163.com/it/x2700960886745827433/kubernetes-authentication-herman-liu

猜你喜欢

转载自m635674608.iteye.com/blog/2361285