RBAC - 限制一个服务帐户的访问
RBAC - Limit access for one service account
我想限制以下服务帐户的权限,创建如下:
kubectl create serviceaccount alice --namespace default
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -d > ca.crt
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -d)
c=`kubectl config current-context`
name=`kubectl config get-contexts $c | awk '{print }' | tail -n 1`
endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}"`
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
kubectl config set-credentials alice-staging --token=$user_token
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=default
kubectl config get-contexts
#kubectl config use-context alice-staging
这有权查看所有内容:
kubectl --context=alice-staging get pods --all-namespaces
我尝试用以下限制,但仍然拥有所有权限:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: no-access
rules:
- apiGroups: [""]
resources: [""]
verbs: [""]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: no-access-role
subjects:
- kind: ServiceAccount
name: alice
namespace: default
roleRef:
kind: ClusterRole
name: no-access
apiGroup: rbac.authorization.k8s.io
我的想法是限制对命名空间的访问,以便为用户分发令牌,但我不明白...我认为这可能是为了继承权限,但我不能为单个 serviceacount 禁用。
使用:GKE、容器虚拟机
谢谢!
请注意,服务帐户并不适用于用户,而是适用于 pods (https://kubernetes.io/docs/admin/service-accounts-admin/) 内的进程 运行。
在 Create user in Kubernetes for kubectl 中,您可以找到如何为 K8s 集群创建用户帐户。
此外,我建议您检查您的集群中是否实际启用了 RBAC,这可以解释用户可以执行更多预期的操作。
我想限制以下服务帐户的权限,创建如下:
kubectl create serviceaccount alice --namespace default
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -d > ca.crt
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -d)
c=`kubectl config current-context`
name=`kubectl config get-contexts $c | awk '{print }' | tail -n 1`
endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}"`
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
kubectl config set-credentials alice-staging --token=$user_token
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=default
kubectl config get-contexts
#kubectl config use-context alice-staging
这有权查看所有内容:
kubectl --context=alice-staging get pods --all-namespaces
我尝试用以下限制,但仍然拥有所有权限:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: no-access
rules:
- apiGroups: [""]
resources: [""]
verbs: [""]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: no-access-role
subjects:
- kind: ServiceAccount
name: alice
namespace: default
roleRef:
kind: ClusterRole
name: no-access
apiGroup: rbac.authorization.k8s.io
我的想法是限制对命名空间的访问,以便为用户分发令牌,但我不明白...我认为这可能是为了继承权限,但我不能为单个 serviceacount 禁用。
使用:GKE、容器虚拟机
谢谢!
请注意,服务帐户并不适用于用户,而是适用于 pods (https://kubernetes.io/docs/admin/service-accounts-admin/) 内的进程 运行。
在 Create user in Kubernetes for kubectl 中,您可以找到如何为 K8s 集群创建用户帐户。
此外,我建议您检查您的集群中是否实际启用了 RBAC,这可以解释用户可以执行更多预期的操作。