Gestire l'autenticazione IAM

Questa pagina fornisce istruzioni sulle attività comuni per la funzionalità di autenticazione IAM per Memorystore for Redis Cluster. Per maggiori dettagli sulla funzionalità, consulta Informazioni sull'autenticazione IAM.

Creare un'istanza con l'autenticazione IAM

Per creare un'istanza Memorystore for Redis Cluster che utilizza l'autenticazione IAM, esegui il comando create:

gcloud redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --node-type=NODE_TYPE --shard-count=SHARD_COUNT --auth-mode=iam-auth

Sostituisci quanto segue:

  • INSTANCE_ID è l'ID dell'istanza Memorystore for Redis Cluster che stai creando. L'ID istanza deve contenere da 1 a 63 caratteri e utilizzare solo lettere minuscole, numeri o trattini. Deve iniziare con una lettera minuscola e terminare con una lettera minuscola o un numero.

  • REGION_ID è la regione in cui vuoi inserire l'istanza.

  • NETWORK è la rete utilizzata per creare l'istanza. Deve utilizzare il formato: projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID. L'ID di rete utilizzato qui deve corrispondere all'ID di rete utilizzato dalla policy di connessione al servizio. In caso contrario, l'operazione create non riesce. Per maggiori dettagli, consulta Networking.

  • NODE_TYPE è il tipo di nodo per il cluster.

  • SHARD_COUNT determina il numero di shard nell'istanza. Il numero di shard determina la capacità di memoria totale per l'archiviazione dei dati del cluster. Per visualizzare maggiori dettagli sulla specifica del cluster, consulta Specifica del cluster e del nodo.

Concedere autorizzazioni per l'autenticazione IAM

Per concedere l'accesso IAM, segui le istruzioni riportate in Concedere un ruolo IAM per concedere il roles/redis.dbConnectionUser ruolo all'entità. L'entità è un' identità a cui puoi concedere l'accesso alle risorse Google Cloud. Ad esempio, un' entità può essere un account di servizio che può accedere al tuo Google Cloud progetto.

Per impostazione predefinita, la concessione del ruolo roles/redis.dbConnectionUser a un'entità consente all'entità di accedere a tutte le istanze del progetto.

Creare un ruolo di amministratore IAM limitato per un'istanza

Potresti voler creare un ruolo che possa modificare le autorizzazioni IAM di connessione all'istanza senza concedere l'accesso completo di amministratore IAM. Per farlo, puoi creare un amministratore IAM limitato per il ruolo roles/redis.dbConnectionUser. Per maggiori dettagli, consulta Creare amministratori IAM limitati.

Connettersi a un'istanza che utilizza l'autenticazione IAM

  1. Se non hai già una VM di Compute Engine che utilizza la stessa rete autorizzata del cluster Redis, creane una e connettiti seguendo la Guida rapida all'utilizzo di una VM Linux.

  2. Per il tuo progetto, utilizza il comando gcloud compute instances set-service-account per impostare un account di servizio e abilitare l' ambito dell'API Cloud Platform per la VM di Compute Engine.

    gcloud compute instances set-service-account VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPE
    

    Esegui le seguenti sostituzioni:

    • VM_NAME: il nome della VM di Compute Engine
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email del tuo account di servizio
    • SCOPE: l'ambito dell'API Cloud Platform per la VM (cloud-platform)

    Ad esempio, il seguente comando assegna l'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com a una VM denominata example-VM e imposta l'ambito di accesso su questa VM all'API Cloud Platform:

    gcloud compute instances set-service-account example-VM \
    --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \
    --scopes=cloud-platform
    

    Per saperne di più sull'abilitazione di questo ambito di accesso, consulta Collegare il account di servizio e aggiornare l'ambito di accesso. Per saperne di più sulle best practice per questo ambito, consulta Best practice per gli ambiti.

  3. Per il tuo progetto, abilita l'API Memorystore for Redis.

    API Memorystore for Redis

  4. Installa redis-cli sulla VM di Compute Engine eseguendo il seguente comando dal terminale SSH di Compute Engine:

    sudo apt-get install redis-tools
    
  5. Esegui il seguente comando per ottenere un token di accesso per il tuo utente IAM:

    gcloud auth print-access-token
    
  6. Connettiti all'endpoint di rilevamento dell'istanza:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
    

    Sostituisci quanto segue:

  7. Esegui il comando CLUSTER SHARDS per visualizzare la topologia del cluster. Prendi nota di uno degli indirizzi IP e dei numeri di porta del nodo.

  8. Per utilizzare redis-cli per autenticare e connetterti al nodo, utilizza il seguente comando:

    redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
    

    Sostituisci quanto segue:

    • NODE_IP_ADDRESS: l'indirizzo IP del nodo che hai trovato nel passaggio precedente
    • NODE_PORT: il numero di porta del nodo che hai trovato nel passaggio precedente
    • ACCESS_TOKEN: il token di accesso IAM che hai recuperato nei passaggi precedenti
  9. Per verificare di avere una connessione autenticata al nodo, esegui un comando Redis SET e GET.

  10. Elimina la VM di Compute Engine che hai utilizzato per connetterti al cluster Redis. In questo modo, eviti di incorrere in addebiti sul tuo account di fatturazione Cloud.

Automatizzare il recupero dei token di accesso

  1. (Facoltativo) Se non l'hai ancora fatto, crea un account di servizio per la tua applicazione (vedi Creare e gestire un account di servizio).

    gcloud iam service-accounts create SA_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Sostituisci quanto segue:

    • SA_NAME è il nome del account di servizio.
    • DESCRIPTION è una descrizione facoltativa del account di servizio.
    • DISPLAY_NAME è il nome del account di servizio da visualizzare nella Google Cloud console.
  2. Concedi al tuo account di servizio il ruolo redis.dbConnectionUser nel tuo progetto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --role=roles/"ROLE_NAME"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto
    • SA_NAME: il nome del account di servizio.
    • ROLE_NAME: il nome di un ruolo Per questo esempio: redis.dbConnectionUser.
  3. Autentica l'applicazione come il account di servizio specificato. Per saperne di più, consulta Service account.

Esempio di codice per la connessione a un'istanza che utilizza l'autenticazione IAM

Puoi visualizzare un esempio di codice che mostra come autenticare l' applicazione utilizzando le librerie client più comuni. Inoltre, puoi vedere come utilizzare questo esempio di codice per connetterti a un'istanza che utilizza l'autenticazione IAM.

Risolvere i messaggi di errore con l'autenticazione IAM

Messaggio di errore Comportamento consigliato Descrizione

-WRONGPASS invalid username-password pair or user is disabled

Verifica il nome utente e il token di accesso forniti al server Memorystore for Redis Cluster Il nome utente o il token di accesso fornito non è valido. "default" è l'unico nome utente supportato. Se la tua applicazione utilizza già il nome utente "default", verifica che il token di accesso non sia scaduto e che venga recuperato seguendo le istruzioni riportate in Connettersi a un'istanza che utilizza l'autenticazione IAM. Se le autorizzazioni IAM sono state modificate di recente, la loro propagazione potrebbe richiedere alcuni minuti.

-NOAUTH Authentication required

Verifica che l'applicazione sia configurata per fornire un token di accesso IAM al server Memorystore for Redis Cluster L'applicazione non fornisce un token di accesso al server Memorystore for Redis Cluster. Verifica che l'applicazione sia configurata per fornire un token di accesso seguendo le istruzioni riportate in Connettersi a un'istanza che utilizza l'autenticazione IAM.

-ERR (ERR_IAM_EXHAUSTED) Memorystore IAM authentication backend quota exceeded. See https://cloud.google.com/memorystore/docs/cluster/manage-iam-auth#error_messages.

Effettua nuovi tentativi con backoff esponenziale Il backend IAM è sovraccarico e ha restituito un errore di superamento della quota al server Memorystore for Redis Cluster. Le applicazioni devono tentare di riprovare a eseguire questa operazione con un backoff esponenziale per evitare ulteriori errori di connessione.

-ERR (ERR_IAM_OTHER) Memorystore IAM authentication backend error. See https://cloud.google.com/memorystore/docs/cluster/manage-iam-auth#error_messages.

Effettua nuovi tentativi con backoff esponenziale Il backend IAM ha restituito un errore temporaneo al server Memorystore for Redis Cluster. Le applicazioni devono tentare di riprovare a eseguire questa operazione con un backoff esponenziale per evitare ulteriori errori di connessione.