审查访问权限 - 一个 kubectl 插件,用于显示服务器资源的访问矩阵
你是否曾想过自己在提供的 Kubernetes 集群上拥有哪些访问权限?
对于单个资源,你可以使用 kubectl auth can-i list deployments,但也许你正在寻找一个完整的概览?
这就是 rakkess 的用途。
它会列出当前用户对所有服务器资源的访问权限,类似于 kubectl auth can-i --list。
它还可用于查找哪些主体可以访问某个服务器资源。
请查看子命令 rakkess resource,详见 下文。

...在集群范围
rakkess
...在某个命名空间中
rakkess --namespace default
...附带动词
rakkess --verbs get,delete,watch,patch
...针对其他用户
rakkess --as other-user
...针对其他服务账号
rakkess --sa kube-system:namespace-controller
...并与常见的 kubectl 参数结合使用
KUBECONFIG=otherconfig rakkess --context other-context

...全局跨所有命名空间(仅考虑 ClusterRoleBindings)
rakkess resource configmaps
...在给定命名空间中(考虑 RoleBindings 和 ClusterRoleBindings)
rakkess resource configmaps -n default
...使用简写符号
rakkess r cm # 等同于 rakkess resource configmaps
..附带自定义动词
rakkess r cm --verbs get,delete,watch,patch
某些角色仅适用于具有特定名称的资源。
要查看此类配置,请将资源名称作为附加参数提供。
例如,显示名为 ingress-controller-leader-nginx 的 ConfigMap 在命名空间 ingress-nginx 中的访问权限(注意与上一个示例中 nginx-ingress-serviceaccount 的细微差别):

由于 rakkess resource 需要查询 Roles、ClusterRoles 及其绑定,通常需要集群管理员权限。
另请参阅 用法。
有几种安装 rakkess 的方法。推荐通过 krew 安装。
Krew 是一个 kubectl 插件管理器。如果你尚未安装 krew,请访问
https://github.com/kubernetes-sigs/krew 获取。
然后安装就非常简单:
kubectl krew install access-matrix
该插件将以 kubectl access-matrix 的形式使用,详见 doc/USAGE。
如果使用二进制包安装,也请查看 doc/USAGE。
curl -LO https://github.com/corneliusweig/rakkess/releases/download/v0.5.0/rakkess-amd64-linux.tar.gz \
&& tar xf rakkess-amd64-linux.tar.gz rakkess-amd64-linux \
&& chmod +x rakkess-amd64-linux \
&& mv -i rakkess-amd64-linux $GOPATH/bin/rakkess
curl -LO https://github.com/corneliusweig/rakkess/releases/download/v0.5.0/rakkess-amd64-darwin.tar.gz \
&& tar xf rakkess-amd64-darwin.tar.gz rakkess-amd64-darwin \
&& chmod +x rakkess-amd64-darwin \
&& mv -i rakkess-amd64-darwin $GOPATH/bin/rakkess
https://github.com/corneliusweig/rakkess/releases/download/v0.5.0/rakkess-windows-amd64.zip
要求:
编译:
export PLATFORMS=$(go env GOOS)
make all # 二进制文件将放置在 out/ 目录下
要求:
编译:
mkdir rakkess && cd rakkess
curl -Lo Dockerfile https://raw.githubusercontent.com/corneliusweig/rakkess/master/Dockerfile
docker build . -t rakkess-builder
docker run --rm -v $PWD:/go/bin/ --env PLATFORMS=$(go env GOOS) rakkess
docker rmi rakkess-builder
二进制文件将放置在当前目录中。
[1]: 该模式灵感来源于 kubectl-who-can
| 其他人对 rakkess 的评价 |
|---|
“嗯,看起来很方便!rakkess,一个用于显示所有可用资源访问矩阵的 kubectl 插件。” – @mhausenblas |
“确实很有帮助。rakkess --as system:serviceaccount:my-ns:my-sa -n my-ns 可以打印某个命名空间中服务账号的访问矩阵。” – @fakod |
| “太棒了。爱了爱了。” – @ralph_squillace |
| “这让我很开心。嗯,其实不是今天,但以后肯定经常用。” – @Soukron |