Autenticarsi con i service account

I service account sono gli account utilizzati da workload o servizi per consumare risorse a livello di programmazione e accedere in modo sicuro ai microservizi. Sono un tipo speciale di identità utilizzata da un'applicazione o da un workload anziché da una persona. Analogamente a un account utente, ai service account possono essere concessi ruoli e autorizzazioni, ma non possono accedere come un utente umano.

I service account sono utili per la gestione dell'infrastruttura dell'appliance con air gap di Google Distributed Cloud (GDC), ad esempio:

  • Servizi e workload dell'appliance con air gap di GDC interni per accedere in modo sicuro all'API (Application Programming Interface) del piano di controllo dell'appliance con air gap di GDC.
  • Workload dei clienti nell'appliance con air gap di GDC per accedere ai servizi dell'appliance con air gap di GDC ed effettuare chiamate API (Application Programming Interface) autorizzate.
  • Workload esterni per la federazione con l'appliance con air gap di GDC.
  • Servizi o controller di sistema dell'appliance con air gap di GDC per accedere in modo sicuro alle risorse dei clienti. Ad esempio, i service account possono gestire i workflow di autenticazione e autorizzazione in cui i controller di servizio in esecuzione nel cluster Kubernetes bare metal devono eseguire i workload gestiti dai clienti.

Puoi gestire gli account utilizzando la console GDC, gdcloud CLI o l'API. Con gdcloud CLI, la funzionalità di identità del servizio si basa sull'API ProjectServiceAccount.

Prima di iniziare

Puoi creare service account solo all'interno di un progetto. Per ulteriori informazioni, consulta Creare un progetto.

Creare un'identità del servizio

Per ottenere le autorizzazioni necessarie per creare service account, chiedi all'amministratore IAM del progetto di concederti il ruolo Amministratore IAM del progetto (project-iam-admin).

Gli utenti con accesso ai service account possono accedere a tutti i service account all'interno di un progetto.

Per creare identità del servizio in un progetto, utilizza la console GDC, gdcloud CLI o l'API.

Console

  1. Accedi alla console GDC.
  2. Nel menu di navigazione, seleziona Identità e accesso > Identità del servizio.
  3. Fai clic su Crea identità del servizio. Viene visualizzata la pagina Dettagli identità del servizio.
  4. Nel campo Nome identità del servizio, inserisci un nome per l'identità del servizio. Ad esempio: Test service identity.
  5. Fai clic su Crea.

gdcloud

Crea un'identità del servizio:

gdcloud iam service-accounts create NAME \
        --project=PROJECT

Sostituisci i seguenti valori:

  • NAME: il nome di ProjectServiceAccount. Il nome deve essere univoco all'interno dello spazio dei nomi del progetto.
  • PROJECT: il progetto in cui creare l'identità del servizio. Se gdcloud init è già impostato, ometti il --project flag.

Questo comando crea un ProjectServiceAccount nello spazio dei nomi del progetto.

API

  1. Crea un file YAML della risorsa personalizzata ProjectServiceAccount, ad esempio my-project-sa.yaml:

    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
      id: KEY_ID
      key: BASE64_ENCODED_KEY
      validAfter: "START_TIME"
      validBefore: "EXPIRATION_TIME"
    

    Sostituisci le seguenti variabili:

    • NAME: il nome della risorsa ProjectServiceAccount. Il nome deve essere univoco all'interno dello spazio dei nomi del progetto.
    • PROJECT: il progetto in cui creare l'identità del servizio.
    • ALGORITHM: l'algoritmo della chiave. Sono supportate solo le chiavi ES256.
    • KEY_ID: l'identificatore univoco della chiave. L'ID viene utilizzato per determinare la chiave da verificare.
    • BASE64_ENCODED_KEY: la chiave pubblica con codifica Base64 in formato PEM da verificare. La chiave privata utilizzata per generare questa chiave pubblica è prevista in formato PEM ECDSA P256.
    • START_TIME: l'ora di inizio in cui la chiave diventa valida, ad esempio 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: l'ora di scadenza della chiave, ad esempio 2026-02-07T00:59:34Z.
  2. Applica la risorsa personalizzata ProjectServiceAccount al server API di gestione:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Sostituisci la variabile MANAGEMENT_API_SERVER_KUBECONFIG con il percorso del file kubeconfig per il server API di gestione.

Visualizzare le identità del servizio

Per visualizzare un elenco di service account in un progetto, utilizza la console GDC o gdcloud CLI.

Console

  1. Accedi alla console GDC.
  2. Seleziona un progetto.
  3. Nel menu di navigazione, fai clic su Identità e accesso > Identità del servizio per visualizzare l'elenco dei service account per il progetto.

gdcloud

Elenca i service account in un progetto:

gdcloud iam service-accounts list \
    --project=PROJECT

Assegnare un'associazione di ruoli all'identità del servizio

Per assegnare un'associazione di ruoli, devi disporre delle autorizzazioni appropriate. Per ottenere le autorizzazioni necessarie per assegnare i ruoli, chiedi all'amministratore IAM del progetto di concederti il ruolo Amministratore IAM del progetto (project-iam-admin).

Utilizza la console GDC o gdcloud CLI per assegnare un'associazione di ruoli.

Console

  1. Accedi alla console GDC.
  2. Seleziona un progetto.
  3. Nel menu di navigazione, seleziona Identità e accesso > Accesso.
  4. Nell'elenco Membro, fai clic su Aggiungi membro. Viene visualizzata la pagina Utenti e ruoli.
  5. Seleziona Identità del servizio nell'elenco Tipo di membro.
  6. Nell'elenco Identità del servizio, seleziona l'identità del servizio a cui vuoi assegnare un'associazione di ruoli.
  7. Nell'elenco Ruolo, seleziona il ruolo che vuoi assegnare all'identità del servizio, ad esempio Creatore backup.
  8. (Facoltativo) Per aggiungere un altro ruolo, fai clic su Aggiungi un altro ruolo. Seleziona il ruolo aggiuntivo.
  9. Fai clic su Aggiungi.

gdcloud

Questo comando crea e assegna un nome all'associazione di ruoli del progetto per associare il ruolo specificato a ProjectServiceAccount:

gdcloud iam service-accounts add-iam-policy-binding \
    --project=PROJECT \
    --role=ROLE \
    --iam-account=NAME

Sostituisci i seguenti valori:

  • PROJECT: il progetto in cui creare l'associazione di ruoli. Se gdcloud init è già impostato, puoi omettere il --project flag.
  • ROLE: il ruolo predefinito da assegnare a ProjectServiceAccount. Specifica i ruoli nel formato Role/name dove Role è il tipo Kubernetes, ad esempio Role o ProjectRole, e name è il nome del ruolo predefinito. Ad esempio, per assegnare il ruolo Visualizzatore progetto, imposta il ruolo su Role/project-viewer.
  • NAME: il nome dell'identità del servizio da utilizzare.

Eliminare un'identità del servizio

Per eliminare i service account in un progetto, utilizza la console GDC o gdcloud CLI.

Dopo aver eliminato un'identità del servizio, le applicazioni non hanno accesso alle risorse del progetto tramite questa identità del servizio.

Console

  1. Accedi alla console GDC.
  2. Nel menu di navigazione, seleziona Identità e accesso > Identità del servizio.
  3. Seleziona la casella di controllo dell'identità del servizio che vuoi eliminare.
  4. Fai clic su Elimina.
  5. Viene visualizzata la finestra di dialogo di conferma. Nel campo Conferma digitando quanto segue di seguito, inserisci remove.
  6. Fai clic su Elimina.

gdcloud

Esegui questo comando per eliminare un'identità del servizio:

gdcloud iam service-accounts delete NAME \
    --project=PROJECT

Creare e aggiungere coppie di chiavi

Per creare e aggiungere coppie di chiavi in un progetto, utilizza la console GDC, gdcloud CLI o l'API.

Console

  1. Accedi alla console GDC.
  2. Nel menu di navigazione, seleziona Identità e accesso > Identità del servizio.
  3. Fai clic sul nome dell'identità del servizio a cui vuoi aggiungere la chiave.
  4. Fai clic su Crea nuova chiave.
  5. La nuova chiave viene visualizzata nell'elenco Chiavi e una finestra di dialogo conferma che hai creato la chiave correttamente.

gdcloud

Il comando gdcloud crea il file JSON delle credenziali predefinite dell'applicazione e le coppie di chiavi pubblica e privata:

gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
    --project=PROJECT \
    --iam-account=NAME \
    --ca-cert-path=CA_CERTIFICATE_PATH

Sostituisci i seguenti valori:

  • APPLICATION_DEFAULT_CREDENTIALS_FILENAME: il nome del file JSON.
  • PROJECT : seleziona il progetto per cui creare la chiave. Se gdcloud init è già impostato, puoi omettere il flag --project.
  • NAME: il nome dell'identità del servizio a cui aggiungere la chiave.
  • CA_CERTIFICATE_PATH: (facoltativo) il percorso del certificato dell'autorità di certificazione (CA) per verificare l'endpoint di autenticazione. Se non specifichi questo percorso, vengono utilizzati i certificati CA di sistema. Devi installare la CA nei certificati CA di sistema.

L'appliance con air gap di GDC aggiunge la chiave pubblica alle chiavi ProjectServiceAccount che utilizzi per verificare i token web JSON (JWT) firmati dalla chiave privata. La chiave privata viene scritta nel file JSON delle credenziali predefinite dell'applicazione.

L'esempio seguente mostra il file JSON delle credenziali predefinite dell'applicazione:

{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN PRIVATE KEY-----\nETC\n-----END PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}

Questo esempio utilizza i seguenti valori:

  • project: lo spazio dei nomi del progetto nell'organizzazione.
  • private_key_id: l'ID assegnato alla chiave.
  • private_key: la chiave privata ECDSA P256 in formato PEM generata dall'interfaccia a riga di comando.
  • name: il nome dell'identità del servizio.
  • token_uri: l'indirizzo dell'endpoint di autenticazione.

API

  1. Genera la coppia di chiavi pubblica e privata. I seguenti comandi utilizzano openssl come esempio, uno strumento comune per questo scopo.

    openssl ecparam -name prime256v1 -genkey -noout -out "key.pem"
    openssl ec -in "key.pem" -pubout > "pub.pem"
    
  2. Codifica in Base64 la chiave pubblica e recupera il relativo ID chiave:

    KEY_ID=$(openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256 | sed 's/^.* //')
    BASE64_ENCODED_KEY=$(cat pub.pem | base64)
    
  3. Crea o aggiorna il file YAML della risorsa personalizzata ProjectServiceAccount, incluse le informazioni sulla chiave generata nel passaggio precedente:

    apiVersion: resourcemanager.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
      id: KEY_ID
      key: BASE64_ENCODED_KEY
      validAfter: "START_TIME"
      validBefore: "EXPIRATION_TIME"
    

    Sostituisci le seguenti variabili:

    • NAME: il nome della risorsa ProjectServiceAccount. Il nome deve essere univoco all'interno dello spazio dei nomi del progetto.
    • PROJECT: il progetto in cui stai creando la chiave.
    • ALGORITHM: l'algoritmo della chiave. Sono supportate solo le chiavi ES256.
    • KEY_ID: l'identificatore univoco della chiave. L'ID viene utilizzato per determinare la chiave da verificare.
    • BASE64_ENCODED_KEY: la chiave pubblica con codifica Base64 in formato PEM da verificare. La chiave privata utilizzata per generare questa chiave pubblica è prevista in formato PEM ECDSA P256.
    • START_TIME: l'ora di inizio in cui la chiave diventa valida, ad esempio 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: l'ora di scadenza della chiave, ad esempio 2026-02-07T00:59:34Z.
  4. Applica la risorsa personalizzata ProjectServiceAccount al server API di gestione:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Sostituisci la variabile MANAGEMENT_API_SERVER_KUBECONFIG con il percorso del file kubeconfig per il server API di gestione.

  5. Crea il file JSON delle credenziali predefinite dell'applicazione contenente la chiave privata. Assicurati che la variabile KEY_ID nel file JSON sia impostata sullo stesso valore della variabile KEY_ID utilizzata nella specifica ProjectServiceAccount.

    cat <<EOF > "key_file.json"
    {
      "format_version": "1",
      "name": "NAME",
      "private_key": "$(tr '\n' '\t' < "key.pem" | sed 's/\t/\\n/g')",
      "private_key_id": "KEY_ID",
      "project": "PROJECT",
      "token_uri": "AUTH_URL",
      "type": "gdch_service_account"
    }
    EOF
    

    Sostituisci le seguenti variabili:

    • NAME: il nome dell'identità del servizio.
    • KEY_ID: l'identificatore univoco della chiave. L'ID viene utilizzato per determinare la chiave da verificare e deve corrispondere al valore KEY_ID utilizzato nella specifica ProjectServiceAccount.
    • PROJECT: lo spazio dei nomi del progetto nell'organizzazione.
    • AUTH_URL: l'indirizzo dell'endpoint di autenticazione.
  6. Aggiungi la coppia di chiavi al progetto attivando il account di servizio:

    gdcloud auth activate-service-account –-key-file=key_file.json
    

Elencare le credenziali per i service account

Elenca le chiavi pubbliche di un ProjectServiceAccount specifico nel progetto:

gdcloud iam service-accounts keys list \
    --project=PROJECT \
    --iam-account=NAME

Elimina credenziali

Per eliminare la chiave pubblica, utilizza la console GDC o gdcloud CLI.

Console

  1. Accedi alla console GDC.
  2. Nel menu di navigazione, seleziona Identità e accesso > Identità del servizio.
  3. Fai clic sul nome dell'identità del servizio che contiene la chiave che vuoi eliminare.
  4. Fai clic su Elimina.
  5. Nella finestra di dialogo di conferma, fai clic su Elimina.

gdcloud

Rimuovi la chiave pubblica con l'ID chiave dal ProjectServiceAccount specifico nel progetto:

gdcloud iam service-accounts keys delete KEY_ID \
    --project=PROJECT \
    --iam-account=NAME

Autorizzare un account di servizio utilizzando una chiave del account di servizio

Puoi utilizzare il comando gdcloud per attivare un account di servizio utilizzando una chiave del service account:

  1. Crea un file account di servizio account, se non ne hai già uno.

  2. Attiva il account di servizio eseguendo il comando seguente:

    gdcloud auth activate-service-account --key-file=KEY_FILE
    

    Sostituisci KEY_FILE con il percorso del file delle chiavi del account di servizio.

    Dopo aver attivato il account di servizio, gdcloud utilizza le credenziali del account di servizio per i comandi successivi, anziché le tue credenziali utente.