Vai al contenuto principale

Authorization of Kubernetes

K8s-authz è un middleware di autorizzazione per Kubernetes (k8s) basato su Casbin che utilizza RBAC (Role-Based Access Control) e ABAC (Attribute-Based Access Control) per l'applicazione delle politiche. Questo middleware si integra con il webhook di ammissione di convalida di K8s per convalidare le politiche definite da Casbin per ogni richiesta effettuata ai risorse di K8s. I controller di ammissione personalizzati sono registrati con Kubernetes utilizzando il ValidatingAdmissionWebhook per eseguire convalide sugli oggetti richiesta inoltrati dal server API e fornire una risposta che indica se la richiesta deve essere consentita o rifiutata.

Per determinare quando inviare le richieste in entrata al controller di ammissione, è stato implementato un webhook di convalida. Questo webhook inoltra le richieste per qualsiasi tipo di risorsa o sottorisorsa di K8s e esegue la verifica delle politiche. Gli utenti possono eseguire operazioni su queste risorse solo se sono autorizzati dall'enforcer di Casbin. L'enforcer verifica i ruoli dell'utente come definiti nelle politiche. Il cluster K8s è il target di distribuzione per questo middleware.

Requisiti

Prima di procedere, assicurati di avere quanto segue:

  • Un cluster Kubernetes in esecuzione. Puoi configurare un cluster locale utilizzando Docker o impostare un ecosistema Kubernetes completo sul tuo server. Per istruzioni dettagliate, consulta questa guida per configurare un cluster Kubernetes locale su Windows o questa guida per configurare un cluster su Linux.
  • CLI Kubectl. Le istruzioni per l'installazione di Kubectl su Windows si trovano qui, e per Linux qui.
  • OpenSSL

Utilizzo

Segui questi passaggi per utilizzare K8s-authz:

  1. Genera certificati e chiavi per ogni utente utilizzando OpenSSL. Esegui lo script qui sotto:

    ./gen_cert.sh
  2. Costruisci l'immagine Docker dal Dockerfile manualmente eseguendo il seguente comando. Ricorda di cambiare la versione di build nel comando e nel file di deployment di conseguenza.

    docker build -t casbin/k8s_authz:0.1 .
  3. Definisci le politiche Casbin nei file model.conf e policy.csv. Per ulteriori informazioni su come funzionano queste politiche, consulta la documentazione.

  4. Prima di eseguire il deployment, puoi modificare le porte nel file main.go, così come nel file di configurazione del webhook di validazione, in base alle tue esigenze specifiche.

  5. Esegui il deployment del controller di validazione e del webhook sul cluster Kubernetes eseguendo il seguente comando:

    kubectl apply -f deployment.yaml
  6. Per un server di produzione, è consigliato creare un secret Kubernetes per proteggere i certificati:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. Dopo aver completato i passaggi precedenti, è necessario aggiornare la directory del certificato in main.go e i manifesti con la directory del secret creato.

Ora, il server dovrebbe essere attivo e funzionante, pronto a convalidare le richieste effettuate alle risorse K8s e ad applicare le politiche di conseguenza.