kubectl auth can-i în Kubernetes (kubectl)

Configurare și context kubectl 1.6+ (auth whoami din 1.28)

Verifică dacă tu (sau alt utilizator ori ServiceAccount) ai voie să faci o anumită acțiune în cluster, conform regulilor RBAC.

Sintaxă comandă
kubectl auth can-i <verb> <resursă> [-n <namespace>] [--as=<utilizator>]
kubectl auth can-i --list [-n <namespace>]
kubectl auth whoami

Ce face kubectl auth can-i

kubectl auth can-i create deployments -n magazin întreabă API-ul dacă acțiunea este permisă și răspunde simplu, yes sau no. Codul de ieșire este 0 pentru da și 1 pentru nu, așa că se poate folosi direct în scripturi.

Cu --as (și --as-group) verifici drepturile altcuiva, de exemplu ale unui ServiceAccount (system:serviceaccount:<namespace>:<nume>), dacă ai dreptul de „impersonare”. Cu --list vezi toate acțiunile permise într-un namespace, iar kubectl auth whoami îți arată cu ce identitate și în ce grupuri te vede clusterul.

Parametri

Parametru Descriere
VERB RESURSĂ De exemplu get pods, create deployments, delete secrets, '*' '*'.
-n, --namespace Namespace-ul în care se face verificarea.
-A, --all-namespaces Verifică acțiunea în toate namespace-urile.
--as UTILIZATOR / --as-group GRUP Verifică drepturile altei identități.
--list Listează toate acțiunile permise.
--subresource Verifică o subresursă, de exemplu pods --subresource=log.
-q, --quiet Nu afișează nimic; contează doar codul de ieșire.

Exemple

Exemplul 1: Ce am voie să fac în namespace-ul magazin

Ana poate crea Deployment-uri, dar nu poate citi Secret-urile.

kubectl auth whoami
kubectl auth can-i create deployments -n magazin
kubectl auth can-i get secrets -n magazin

Ieșire în terminal

ATTRIBUTE   VALUE
Username    ana@firma.ro
Groups      [dezvoltatori system:authenticated]
yes
no

Exemplul 2: Drepturile unui ServiceAccount, într-un script de verificare

Pipeline-ul se oprește dacă ServiceAccount-ul de deploy a primit, din greșeală, drept de ștergere a namespace-urilor.

SA=system:serviceaccount:ci:deploy
kubectl auth can-i patch deployments -n magazin --as=$SA
if kubectl auth can-i delete namespaces --as=$SA -q; then
    echo "PREA MULTE DREPTURI pentru $SA"; exit 1
fi
echo "drepturi in regula"

Ieșire în terminal

yes
drepturi in regula

Exemplul 3: Lista completă a acțiunilor permise

Ieșire scurtată; fiecare rând arată resursa și verbele permise.

kubectl auth can-i --list -n magazin

Ieșire în terminal

Resources                                       Non-Resource URLs   Resource Names   Verbs
selfsubjectreviews.authentication.k8s.io        []                  []               [create]
selfsubjectaccessreviews.authorization.k8s.io   []                  []               [create]
selfsubjectrulesreviews.authorization.k8s.io    []                  []               [create]
deployments.apps                                []                  []               [get list watch create update patch]
pods                                            []                  []               [get list watch]
pods/log                                        []                  []               [get]
...

Greșeli frecvente

  • Uitarea namespace-ului: fără -n, verificarea se face în namespace-ul curent din context, care poate fi altul decât cel la care te gândești.
  • Folosirea lui --as fără dreptul impersonate: comanda eșuează cu Forbidden, ceea ce nu spune nimic despre drepturile identității verificate.

Comenzi înrudite