rest - 如何使用 curl 使用 SelfSubjectRulesReview 查看资源权限
问题描述
在 Kubernetes 中,您可以使用该auth can-i
命令来检查您是否拥有对某些资源的权限。
例如,我可以在 worker 上使用这个命令:
kubectl --kubeconfig /etc/kubernetes/kubelet.conf auth can-i get pods -v 9
它将检查您是否有权查看 pod,并且当您添加-v
标志时,它会显示详细输出:
...
curl -k -v -XPOST -H "Accept: application/json, */*" -H "Content-Type: application/json" -H "User-Agent: kubectl/v1.18.0 (linux/amd64) kubernetes/9e99141" 'https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectaccessreviews'
我想将此 REST API 与它一起使用curl
,但它不起作用:
curl --cacert /etc/kubernetes/pki/ca.crt \
--cert /var/lib/kubelet/pki/kubelet-client-current.pem \
--key /var/lib/kubelet/pki/kubelet-client-current.pem \
-d @- \
-H "Content-Type: application/json" \
-H "Accept: application/json, */*" \
-XPOST https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectrulesreviews <<'EOF'
{
"kind":"SelfSubjectAccessReview",
"apiVersion":"authorization.k8s.io/v1",
"metadata":{
"creationTimestamp":null
},
"spec":{
"namespace":"default"
},
"status":{
"allowed":true
}
}
EOF
如果失败并出现错误:
"status": "Failure",
"message": "SelfSubjectAccessReview in version \"v1\" cannot be handled as a SelfSubjectRulesReview: converting (v1.SelfSubjectAccessReview).v1.SelfSubjectAccessReviewSpec to (authorization.SelfSubjectRulesReview).authorization.SelfSubjectRulesReviewSpec: Namespace not present in src",
"reason": "BadRequest",
"code": 400
如何使用带有 curl 的 SelfSubjectRulesReview API 来查看资源权限?
感谢@HelloWorld,我发现了问题,问题在于 selfsubjectaccessreviews 与 selfsubjectrulesreviews 之间的差异。我将放两个工作curl
示例。
1) selfsubjectaccessreviews示例,查看该帐户是否具有以下权限
curl --cacert /etc/kubernetes/pki/ca.crt \
--cert /var/lib/kubelet/pki/kubelet-client-current.pem \
--key /var/lib/kubelet/pki/kubelet-client-current.pem \
-d @- \
-H "Content-Type: application/json" \
-H 'Accept: application/json, */*' \
-XPOST https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectaccessreviews <<'EOF'
{
"kind":"SelfSubjectAccessReview",
"apiVersion":"authorization.k8s.io/v1",
"metadata":{
"creationTimestamp":null
},
"spec":{
"resourceAttributes":{
"namespace":"default",
"verb":"get",
"resource":"pods"
}
},
"status":{
}
}
EOF
2) selfsubjectrulesreviews示例查看账户在默认命名空间上的所有权限:
curl --cacert /etc/kubernetes/pki/ca.crt \
--cert /var/lib/kubelet/pki/kubelet-client-current.pem \
--key /var/lib/kubelet/pki/kubelet-client-current.pem \
-d @- \
-H "Content-Type: application/json" \
-H 'Accept: application/json, */*' \
-XPOST https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectrulesreviews <<'EOF'
{
"kind":"SelfSubjectRulesReview",
"apiVersion":"authorization.k8s.io/v1",
"metadata":{
"creationTimestamp":null
},
"spec":{
"namespace":"default"
},
"status":{
}
}
EOF
解决方案
请注意,kubectl verbose 在输出中显示了这个 url:
https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectaccessreviews
你在冰壶:
https://<master_ip>:6443/apis/authorization.k8s.io/v1/selfsubjectrulesreviews
你能注意到其中的不同吗?selfsubject accessreviews与selfsubject rulesreviews。
更改 url 以更正一个,它将起作用。
推荐阅读
- java - Weblogic 控制台获取任何用户的当前密码
- c# - 从 servicenow 公开的 SOAP 的 NULL 响应以获取事件编号详细信息?
- git - 由于冲突解决不当,将分支重新合并到主分支
- javascript - 如何在 google 和 API 的操作中使用 async 和 await
- pyspark - IllegalArgumentException:'字段“标签”不存在。在 PYSPARK
- django - 我有 django rest_framework ListAPIView 方法,它返回用户列表,我如何从同一个用户列表中排除请求用户
- orchardcms - 覆盖 Orchard 中的密码格式
- polymer - Polymer 3 - KeyframeEffect 未定义
- ios - 渐变 UIButton 的边框与圆角半径
- sql - 从聚集复合键移动到顺序整数聚集键时性能损失