Configura il gateway Connect

Questa guida è rivolta agli amministratori della piattaforma che devono configurare il gateway Connect per l'utilizzo da parte degli utenti e degli account di servizio del progetto. Questa configurazione consente agli utenti di:

  • Utilizza la console Google Cloud per accedere ai cluster registrati al di fuori diGoogle Cloud con la loro identità Google Cloud .

  • Utilizza kubectl per accedere ai cluster tramite Connect Gateway.

Questa configurazione consente solo l'autenticazione di utenti e servizi in base ai loro ID individuali, non alla loro appartenenza a Google Gruppi. Per configurare il supporto di altri gruppi, consulta Configura Connect Gateway con Google Gruppi.

Se non hai familiarità con il gateway Connect, consulta la nostra panoramica per una spiegazione dei concetti di base e del suo funzionamento.

Prima di iniziare

  1. Assicurati di aver installato i seguenti strumenti a riga di comando:

    • L'ultima versione di Google Cloud CLI, lo strumento a riga di comando per interagire con Google Cloud.
    • kubectl per l'esecuzione di comandi sui cluster Kubernetes. Se devi installare kubectl, segui queste istruzioni.

    Se utilizzi Cloud Shell come ambiente shell per interagire con Google Cloud, questi strumenti vengono installati automaticamente.

  2. Inizializza gcloud CLI per l'utilizzo con il tuo progetto oppure esegui i seguenti comandi per autorizzare gcloud CLI e impostare il tuo progetto come predefinito:

    gcloud auth login
    gcloud config set project PROJECT_ID
    

Ruoli IAM richiesti per la configurazione

Questa guida presuppone che tu disponga dell'autorizzazione roles/owner nel tuo progetto. Se non sei un proprietario del progetto, chiedi a un proprietario del progetto di concederti ulteriori autorizzazioni sul progetto in modo da poter svolgere le seguenti attività:

  • Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable, inclusa nel ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Un proprietario del progetto può creare un ruolo personalizzato con l'autorizzazione serviceusage.services.enable abilitata oppure concederti roles/serviceusage.serviceUsageAdmin, come segue:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member user:USER_EMAIL_ADDRESS \
       --role='roles/serviceusage.serviceUsageAdmin'
    
  • Per concedere le autorizzazioni IAM a utenti e service account in modo che possano utilizzare il gateway Connect, devi disporre del ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin), che un proprietario del progetto può concedere con il seguente comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member user:USER_EMAIL_ADDRESS \
       --role='roles/resourcemanager.projectIamAdmin'
    

Abilita API

Per aggiungere il gateway al tuo progetto, abilita l'API Connect Gateway e le relative API di dipendenza richieste. Se gli utenti vogliono autenticarsi nei cluster solo utilizzando la console Google Cloud , non è necessario abilitareconnectgateway.googleapis.com, ma devi abilitare le altre API.

gcloud services enable --project=PROJECT_ID  \
    connectgateway.googleapis.com \
    gkeconnect.googleapis.com \
    gkehub.googleapis.com \
    cloudresourcemanager.googleapis.com

Verifica i cluster registrati

Solo i cluster registrati nel parco risorse del tuo progetto sono accessibili tramite il gateway Connect. I cluster GKE on-premise e su altri cloud pubblici vengono registrati automaticamente al momento della creazione. Tuttavia, i cluster GKE su Google Cloud e i cluster collegati devono essere registrati separatamente. Se devi registrare un cluster, segui le istruzioni riportate nelle nostre guide alla registrazione dei cluster. Tieni presente che i cluster GKE devono essere registrati nel parco risorse per utilizzare il gateway.

Per verificare che i cluster siano stati registrati, esegui questo comando:

gcloud container fleet memberships list

Dovresti visualizzare un elenco di tutti i cluster registrati, come in questo esempio output:

NAME         EXTERNAL_ID
cluster-1    0192893d-ee0d-11e9-9c03-42010a8001c1
cluster-2    f0e2ea35-ee0c-11e9-be79-42010a8400c2

Concede ruoli IAM agli utenti

L'accesso ai cluster è controllato da Identity and Access Management (IAM). I ruoli IAM obbligatori per accedere ai cluster utilizzando kubectl differiscono leggermente da quelli per accedere ai cluster nella console Google Cloud , come spiegato nelle sezioni seguenti.

Concedere ruoli per l'accesso tramite kubectl

Come minimo, gli utenti e i service account devono disporre dei seguenti ruoli IAM per utilizzare kubectl per interagire con i cluster tramite il gateway Connect, a meno che l'utente non disponga di roles/owner nel progetto:

  • roles/gkehub.gatewayAdmin: questo ruolo consente a un utente di accedere all'API del gateway Connect per utilizzare kubectl per gestire il cluster. Questo ruolo include l'autorizzazione gkehub.gateway.stream, che consente agli utenti di eseguire i comandi attach, cp e exec kubectl. Per ulteriori requisiti per eseguire questi comandi, consulta Supporto dell'anteprima per i comandi.

    • Se un utente ha bisogno solo dell'accesso di sola lettura ai cluster connessi, puoi concedere roles/gkehub.gatewayReader.

    • Se un utente ha bisogno dell'accesso in lettura / scrittura ai cluster connessi, puoi concedere roles/gkehub.gatewayEditor.

  • roles/gkehub.viewer: questo ruolo consente a un utente di recuperare kubeconfigs del cluster.

Per informazioni dettagliate sulle autorizzazioni incluse in questi ruoli, consulta la sezione Ruoli GKE Hub nella documentazione IAM.

Puoi utilizzare i seguenti comandi per concedere questi ruoli:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=GATEWAY_ROLE
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER \
    --role=roles/gkehub.viewer

dove:

  • MEMBER è l'account utente o di servizio, nel formato user|serviceAccount:emailID, ad esempio:

    • user:alice@example.com
    • serviceAccount:test_sa@example-project.iam.gserviceaccount.com
  • GATEWAY_ROLE è roles/gkehub.gatewayAdmin, roles/gkehub.gatewayReader o roles/gkehub.gatewayEditor.

Puoi scoprire di più sulla concessione di ruoli e autorizzazioni IAM in Concessione, modifica e revoca dell'accesso alle risorse.

Concedere ruoli per l'accesso tramite la console Google Cloud

Gli utenti che vogliono interagire con i cluster al di fuori di Google Cloud utilizzando la console Google Cloud hanno bisogno almeno dei seguenti ruoli IAM per visualizzare i cluster:

  • roles/container.viewer. Questo ruolo consente agli utenti di visualizzare la pagina GKE Clusters (Cluster GKE) e altre risorse container nella console Google Cloud . Per informazioni dettagliate sulle autorizzazioni incluse in questo ruolo, consulta Ruoli Kubernetes Engine nella documentazione IAM.

  • roles/gkehub.viewer. Questo ruolo consente agli utenti di visualizzare i cluster al di fuori di Google Cloud nella console Google Cloud . Tieni presente che questo è uno dei ruoli richiesti per l'accesso a kubectl. Se hai già concesso questo ruolo a un utente, non è necessario concederlo di nuovo. Per informazioni dettagliate sulle autorizzazioni incluse in questo ruolo, consulta Ruoli GKE Hub nella documentazione IAM.

    Nei comandi seguenti, sostituisci PROJECT_ID con l'ID progetto del progetto host del parco progetti. Inoltre, sostituisci MEMBER con l'indirizzo email o ilaccount di serviziot dell'utente utilizzando il formato user|serviceAccount:emailID, ad esempio:

    • user:alice@example.com
    • serviceAccount:test_sa@example-project.iam.gserviceaccount.com
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=MEMBER \
        --role=roles/container.viewer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=MEMBER \
        --role=roles/gkehub.viewer
    

Per saperne di più sulla concessione dei ruoli IAM, consulta Gestire l'accesso a progetti, cartelle e organizzazioni nella documentazione IAM.

Configura l'autorizzazione RBAC

Il server API Kubernetes di ogni cluster deve essere in grado di autorizzare le richieste provenienti dalla Google Cloud console o dai kubectlcomandi che passano attraverso il gateway Connect dagli utenti e dagli account di servizio specificati. Per garantire questo, devi aggiornare i criteri di controllo dell'accesso dell'accesso basato sui ruoli (RBAC) su ogni cluster che vuoi rendere accessibile tramite il gateway. Devi aggiungere o aggiornare le seguenti norme:

  • Un criterio di rappresentazione che autorizza l'agente Connect a inviare richieste al server API Kubernetes per conto di un utente.
  • Un criterio di autorizzazione che specifica le autorizzazioni dell'utente sul cluster. Può trattarsi di un ruolo a livello di cluster come clusterrole/cluster-admin o clusterrole/cloud-console-reader oppure di un ruolo a livello di spazio dei nomi come role/default/pod-reader.

(Facoltativo) Crea un ruolo cloud-console-reader

Gli utenti autenticati che vogliono accedere alle risorse di un cluster nella console Google Cloud devono disporre delle autorizzazioni Kubernetes pertinenti. Se non vuoi concedere a questi utenti autorizzazioni più estese, ad esempio quelle di un amministratore del cluster, puoi creare un ruolo RBAC personalizzato che includa le autorizzazioni minime per visualizzare i nodi, i volumi permanenti, i pod e le classi di archiviazione del cluster. Puoi definire questo insieme di autorizzazioni creando una risorsa RBAC ClusterRole, cloud-console-reader, nel cluster.

cloud-console-reader concede ai suoi utenti le autorizzazioni get, list e watch sui nodi, sui volumi permanenti, sui pod e sulle classi di archiviazione del cluster, che consentono loro di visualizzare i dettagli di queste risorse.

kubectl

Per creare cloud-console-reader ClusterRole e applicarlo al cluster, esegui questo comando:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

Puoi quindi concedere questo ruolo agli utenti durante la configurazione dei criteri di autorizzazione, come descritto nella sezione successiva.

Crea e applica le policy RBAC richieste

Di seguito viene illustrato come creare e applicare le policy RBAC richieste. Il modo più semplice per farlo è utilizzare gcloud CLI per generare e applicare le norme appropriate. In alternativa, se preferisci, puoi creare un file di criteri RBAC e applicarlo con kubectl.

gcloud

Per generare e applicare i criteri al cluster scelto con gcloud CLI, esegui questo comando:

gcloud container fleet memberships generate-gateway-rbac  \
    --membership=MEMBERSHIP_NAME \
    --role=ROLE \
    --users=USERS \
    --project=PROJECT_ID \
    --kubeconfig=KUBECONFIG_PATH \
    --context=KUBECONFIG_CONTEXT \
    --apply

Sostituisci quanto segue:

  • MEMBERSHIP_NAME: il nome utilizzato per rappresentare in modo univoco il cluster nel suo parco risorse. Puoi scoprire come controllare il nome dell'abbonamento del cluster in Ottenere lo stato dell'abbonamento al parco risorse.
  • ROLE: il ruolo Kubernetes che vuoi concedere agli utenti del cluster, ad esempio clusterrole/cluster-admin, clusterrole/cloud-console-reader o role/mynamespace/namespace-reader. Questo ruolo deve già esistere prima di eseguire il comando.
  • USERS: gli indirizzi email degli utenti (account utente o service account) a cui vuoi concedere le autorizzazioni, come elenco separato da virgole. Ad esempio: --users=dana@example.com,test-acct@test-project.iam.gserviceaccount.com.
  • PROJECT_ID: l'ID progetto in cui è registrato il cluster.
  • KUBECONFIG_PATH: il percorso file locale in cui è archiviato il file kubeconfig contenente una voce per il cluster. Nella maggior parte dei casi, è $HOME/.kube/config.
  • KUBECONFIG_CONTEXT: il contesto del cluster così come appare nel file kubeconfig. Puoi ottenere il contesto attuale dalla riga di comando eseguendo kubectl config current-context. Indipendentemente dal fatto che utilizzi o meno il contesto corrente, assicurati che funzioni per accedere al cluster eseguendo il comando seguente:

    kubectl get namespaces \
      --kubeconfig=KUBECONFIG_PATH \
      --context=KUBECONFIG_CONTEXT

Dopo aver eseguito gcloud container fleet memberships generate-gateway-rbac, alla fine dell'output viene visualizzato un testo simile al seguente, che è troncato per facilitarne la lettura

Validating input arguments.
Specified Cluster Role is: clusterrole/cluster-admin
Generated RBAC policy is:
--------------------------------------------
...
---
Applying the generate RBAC policy to cluster with kubeconfig: artifacts/kubeconfig, context: example-cluster-admin@example-cluster
Writing RBAC policy for user: 222larabrown@gmail.com to cluster.
Successfully applied the RBAC policy to cluster.

Questo è il contesto per accedere al cluster tramite il gateway di connessione.

Per maggiori dettagli sul comando generate-gateway-rbac, consulta la guida di riferimento di gcloud CLI.

kubectl

L'esempio seguente mostra come creare criteri appropriati per un utente (dana@example.com) e un account di servizio (test@example-project.iam.gserviceaccount.com), concedendo a entrambi cluster-admin autorizzazioni sul cluster e salvando il file dei criteri come /tmp/gateway-rbac.yaml. I criteri vengono quindi applicati al cluster associato al contesto corrente:

cat <<EOF > /tmp/gateway-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: gateway-impersonate
rules:
- apiGroups:
  - ""
  resourceNames:
  - dana@example.com
  - test@example-project.iam.gserviceaccount.com
  resources:
  - users
  verbs:
  - impersonate
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-impersonate
roleRef:
  kind: ClusterRole
  name: gateway-impersonate
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: connect-agent-sa
  namespace: gke-connect
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-cluster-admin
subjects:
- kind: User
  name: dana@example.com
- kind: User
  name: test@example-project.iam.gserviceaccount.com
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF
# Apply policies to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH  -f /tmp/gateway-rbac.yaml

Per scoprire di più su come specificare le autorizzazioni RBAC, consulta Utilizzo dell'autorizzazione RBAC.

Supporto dei Controlli di servizio VPC

I Controlli di servizio VPC forniscono un ulteriore livello di difesa della sicurezza per i serviziGoogle Cloud indipendente da Identity and Access Management (IAM). Mentre IAM consente un controllo degli accessi basato sull'identità granulare, Controlli di servizio VPC consente una sicurezza perimetrale basata sul contesto più ampia, incluso il controllo dell'uscita dei dati attraverso il perimetro. Ad esempio, puoi specificare che solo determinati progetti possono accedere ai tuoi dati BigQuery. Per scoprire di più su come funzionano i Controlli di servizio VPC per proteggere i tuoi dati, consulta la panoramica dei Controlli di servizio VPC.

Puoi utilizzare i Controlli di servizio VPC con il gateway Connect per una maggiore sicurezza dei dati, dopo aver verificato che sia possibile accedere alle API necessarie per utilizzare il gateway dall'interno del perimetro di servizio specificato.

Passaggi successivi