color: var(--mk-color-red)
Role
- Pra definir uma role, você informa três parâmetros:
- É por namespace
rules.apiGroups
: Informar o apiGroup que se deseja autorizar. Caso seja um recurso do api group core, não é necessário informarrules.resources
: Recursos a serem autorizados pela rolerules.verbs
: Operações authorizadas pela rolerules.resourceNames
: autoriza recursos específicos
RoleBinding
- Anexa uma Role a um elemento
user
,serviceaccount
group
- É por namespace
rolebinding.subject
: O usuario que se deseja associarrolebinding.roleRef
: A role que se deseja associar
ClusterRole
- Para recursos que não são específicos de um namespace
- Você pode configurar, por exemplo, que um usuário possui uma clusterrole associada com pods. ele terá acesso a TODOS os pods em TODOS os namespaces
- Não fazem parte de NENHUM namespace
ClusterRoleBinding
- Anexa uma Clusterrole a um usuário
filePath: "@/Attachments/Kubernetes/rbac/rbac-reader-test.yaml"
Comandos úteis
kubectl api-resources --namespaced=false
kubectl auth can-i create deployment
kubectl auth can-i create deployment --as user
kubectl auth can-i get pods --as system:serviceaccount:default:reader
kubectl api-resources -o wide
kubectl create role developer --verb=create,list,delete --resource=pods
kubectl create rolebinding user-x-developer --role=ROLE --user=USER
kubectl create rolebinding --serviceaccount NAMESPACE:SERVICEACCOUNT --role ROLE
kubectl set serviceaccount deployment SERVICEACCOUNT DEPLOYMENT
Inspecting Secrets
filePath: "@/Attachments/Kubernetes/rbac/rbac-cli-access-pod.yaml"
kubectl get pod rbac-cli-access -o yaml | grep serviceAccountName
k get pod rbac-cli-access -o yaml | yq '.spec.containers[].volumeMounts[0].mountPath'
TOKEN=$(k exec -ti rbac-cli-access -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)
echo -n $TOKEN | jwt decode - --json | jq
curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes/api/v1 | jq '.resources[].name'
curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes/api/v1/namespaces/default/pod
curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes/apis/authentication.k8s.io/v1/selfsubjectreviews -X POST --json '{"kind":"SelfSubjectReview","apiVersion":"authentication.k8s.io/v1"}'
filePath: "@/Attachments/Kubernetes/rbac/rbac-cli-access-sa.yaml"
filePath: "@/Attachments/Kubernetes/rbac/rbac-cli-access-role.yaml"
filePath: "@/Attachments/Kubernetes/rbac/rbac-cli-access-rolebinding.yaml"
filePath: "@/Attachments/Kubernetes/rbac/rbac-cli-access-pod-with-sa.yaml"
curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes/api/v1/namespaces/default/pod
curl -k -H "Authorization: Bearer $TOKEN" https://kubernetes/apis/authentication.k8s.io/v1/selfsubjectreviews -X POST --json '{"kind":"SelfSubjectReview","apiVersion":"authentication.k8s.io/v1"}'
Combinações de Roles/Rolebindings
Role
+RoleBinding
= A role estará disponivel no namespace, o rolebinding será aplicado no namespaceClusterRole
+ClusterRoleBinding
= A Role estará disponível em todos os namespaces, a ClusterRolebinding será dada em TODOS os namespacesClusterRole
+RoleBindind
= A role estará disponível em todos os namespaces, a permissão será dada em apenas um namespace
EH POSSIVEL COM O VERBO LIST VER TODAS AS SECRETS, VISTO QUE VOCE PODE LISTAR USANDO JSON/JSONPATH