k8s之 service account token

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s之 service account token相关的知识,希望对你有一定的参考价值。

参考技术A

在前一篇 笔记 中我们验证了使用sa的token作为一种认证,向apiserver发送请求,这里简述下它的认证原理和流程。

首先得知道这种token称为JWT(json web token),可以参考 官网 介绍,而且这是一种 RFC 标准。

JWT是服务端发给客户端的一种加密凭证(通过RSA或者密码加密),客户端访问服务端(此不一定是发布凭证的服务端)时携带上这个凭证,服务端解密此凭证,验证通过就可以允许客户端访问。

在k8s中,使用RSA私钥/公钥进行加密和验证,kube-controller-manager,使用如下参数指定私钥,对token进行签名

kube-apiserver使用如下参数指定公钥,对token进行验证

JWT包含三部分,分别为: Header,Payload,Signature,之间用"."分隔,所以一般形式为xxx.yyy.zzz。
header
一般包含两部分, typ指定了类型,固定为"JWT",alg指定了签名算法, 比如HMAC SHA256 or RSA。

payload
定义了用户数据,有定义好的知名的 字段 ,也可以自定义字段

payload需要使用Base64Url 加密后,作为JWT的第二部分

Signature
签名这一步需要四个条件:Base64Url 加密后的header,Base64Url 加密后的paload,secret(可以是密码,也可以是RSA的私钥)和header中指定的加密算法。比如使用 RSASHA256 算法计算签名的公式如下:

上面公式执行时,大概分为两步:

最后将这三部分(都要经过base64加密)使用"."结合起来就是最终的token

上面只是简述原理和流程,这里实践如何生成JWT,如何验证JWT。
有两种方法来生成/验证JWT
a. 使用 jwt.io 官方提供的 图形界面
b. 使用第三方库,比如python中的jwt (pip install python-jwt 通过此命令安装)

生成JWT
在右侧的decoded下面的三个框分别填写header,payload和VERIFY SIGNATURE中的private key(对于k8s来说,私钥就是/etc/kubernetes/pkt/sa.key),最上面的Algorithm选择签名算法,这里选择rs256. 会自动在左侧的encoded框显示出生成的JWT,如下图

解密JWT
把JWT填写到左侧的encoded中,系统会自动识别出header和payload,因为他俩是base64加密的,直接解密即可,但是签名部分需要提供公钥才能进行验证,否则encoded框下面会显示红色的"Invalid Signature",只要把公钥(对于k8s来说,公钥就是/etc/kubernetes/pkt/sa.pub),填写到右侧decoded下面的VERIFY SIGNATURE框的public key处即可验证,如下图
没填写公钥时

填写正确的公钥后

如下是python脚本,使用jwt库生成JWT,并验证JWT

使用python3执行脚本(为什么使用python3?原因在下面),查看结果

使用python库时有两点需要注意

下面内容是python调试内容,可忽略。

sha256生成的hash值
(Pdb) p data
b\'\\x9e ,\\x86\\xd2g74\\xed\\xdbo\\x14\\xaa\\x02b\\xd6\\x01a\\xa6\\xde\\xfb\\x82\\xd0,\\xe0\\x14\\xde\\x82\\xbe\\xde\\xed\\x97\'
(Pdb) len(data)
32
(Pdb) print(data.hex())
9e2a2c86d2673734eddb6f14aa0262d60161a6defb82d02ce014de82bedeed97
(Pdb) print(data)
b\'\\x9e ,\\x86\\xd2g74\\xed\\xdbo\\x14\\xaa\\x02b\\xd6\\x01a\\xa6\\xde\\xfb\\x82\\xd0,\\xe0\\x14\\xde\\x82\\xbe\\xde\\xed\\x97\'

/usr/lib/python3/dist-packages/jwt/api_jws.py
alg_obj = self._algorithms[algorithm]
key = alg_obj.prepare_key(key)
signature = alg_obj.sign(signing_input, key)

评分模型的检验方法和标准通常有:K-S指标交换曲线AR值Gini数等。例如,K-S指标是用来衡量验证结果是否优于期望值,具体标准为:如果K-S大于40%,模型具有较好的预测功能,发展的模型具有成

评分模型的检验方法和标准通常有:K-S指标、交换曲线、AR值、Gini数等。例如,K-S指标是用来衡量验证结果是否优于期望值,具体标准为:如果K-S大于40%,模型具有较好的预测功能,发展的模型具有成功的应用价值。K-S值越大,表示评分模型能够将“好客户”、“坏客户”区分开来的程度越大。

 

 

例如,K-S指标是用来衡量验证结果是否优于期望值,具体标准为:如果K-S大于40%,模型具有较好的预测功能,发展的模型具有成功的应用价值。K-S值越大,表示评分模型能够将“好客户”、“坏客户”区分开来的程度越大。

 

信用评分模型介绍(一)

2016-08-28 蒋靓 Larry Jiang Larry的风险模型分享与探讨

引言:对于信用评分模型,很多朋友或多或少有所了解,这里做一般性的介绍,并分享自己的多年从业经验。这边短文主要包括:信用评分模型,自变量的生成、筛选、分档和转换,及常用有监督学习模型。

 

信用评分模型

信用评分模型是一种有监督的学习模型(Supervised Learning),数据由一群自变量X和对应的因变量y构成。传统零售信用模型中,X大致分为客户的基本信息(年龄、性别、职业、学位等),财务信息(收入,每月生活消费,每月信贷还款额等),产品信息(LTV,信用卡类别,个人贷款用途等),征信信息(前6个月被查询次数,前6个信用卡最大利用率,未结清贷款数等);而一般取值0-1因变量y可以定义为在未来12个月是否出现欠款90天等.

经验备注:在大数据下,很多互联网公司对个人的评估不再局限于以上几种信息,而是根据更为广泛的数据源对个人进行更全面的刻画,故有称之为客户画像。数据维度会考虑个人在社会上留下的任何数据,如手机使用行为,理财行为,社交圈,网购行为,旅游行为等等等等。大家的各方面数据其实都在被不同的公司和不同的APP收集。。。

 

自变量的生成

自变量是信用风险的来源,除了考虑直接收集的变量,信用评分建模过程中往往需要建模人员产生更多的衍生变量。这部分工作要分析人员的直觉、长期经验的积累和数据挖掘技术的应用。大家可以通过京东和支付宝的评分一窥其自变量的维度:芝麻信用分为5个维度:身份特质,履约能力,信用历史,人脉关系,行为偏好;小白信用分也分为5个维度:身份,资产,关系,履约,偏好。

经验备注:现在越来越多的模型技术被应用于信用模型,但是个人觉得无论高级模型还是初级模型,最为重要的是更广泛的数据和产生更多更具有预测能力的自变量。

 

自变量的筛选

自变量一旦丰富了起来,就涉及到有效变量的筛选,大致可根据一下几个原则或方法:变量的直观意义(是否跟y有关),变量的单调性或合理性,未来是否可以获取以便模型可实施,变量的区分能力(IV),变量间相关性(变量聚类),变量缺失率,分档之后的稳定性等等。

经验备注:对于区分能力太强的变量,或缺失率很大的变量,不建议直接放入模型,可以考虑做成规则或者做成最后模型的调整。在大数据下,人们经常强调自变量与因变量的相关关系,应用于精准性要求不高的营销模型问题不大。而对于精准度要求极高的信用评分模型,相关关系的应用值得推敲。

 

自变量分档和转换

为了保持模型的稳定性,信用模型一般对自变量进行分档,比如根据风险不同把年龄分成几档。这样每档需要一个值来代表这段的自变量输入,这就是变量的转换,常见的有WOE和Logit转换。通过转换后不仅实现了稳定性要求,也克服不同变量间刻度不统一的问题,还克服回归中缺失值的填充问题。

经验备注:如果分档过粗糙,不但会降低单个变量的预测能力,也会造成最终评分集中度过高的问题。解决方法:可以考虑每档用线性插值来代替常数,也可以寻找更多能区分分数集中样本的自变量放入模型。

 

有监督学习模型介绍

目前比较流行的模型主要有以下几种(以后分享会逐一介绍):

  1. Logistic 回归(Logistic Regression)

  2. 决策树(Decision Tree)

  3. 支持向量机(Support Vector Machine)

  4. 人工神经网络(Artificial Neural Network) 

  5. 生存分析模型(Survival Analysis Model)

经验备注:除此上述之外,还有些高级方法或算法:集成方法(Ensemble Method)(例如随机森林(Random Forrest),Boosting,AdaBoost),深度学习方法(Deep Learning),随机梯度下降算法(Stochastic Gradient Descent)等。

以上是关于k8s之 service account token的主要内容,如果未能解决你的问题,请参考以下文章

关于Kubernetes中Service Account的一些笔记:Pod内部如何访问K8s集群

关于Kubernetes中Service Account的一些笔记:Pod内部如何访问K8s集群

Kubernetes中的Security Context, Resource requirement和Service Account

K8S 集群上的 JWKS 轮换

k8s service与Ingress

k8s 之 service ip