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.

Crea 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 posizionare 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 dal criterio di connessione di servizio. In caso contrario, l'operazione create non va a buon fine. Per maggiori dettagli, consulta Networking.

  • NODE_TYPE è il tipo di nodo per il cluster.

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

Concedi autorizzazioni per l'autenticazione IAM

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

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 amministrativo IAM limitato per un'istanza

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

Connettiti 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 tua VM Compute Engine.

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

    Effettua le seguenti sostituzioni:

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

    Ad esempio, il seguente comando assegna il 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'attivazione di questo ambito di accesso, consulta Collega il account di servizio e aggiorna 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 Compute Engine eseguendo questo comando dal terminale SSH di Compute Engine:

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

    gcloud auth print-access-token
    

    I token di accesso scadono dopo un'ora. Per saperne di più, consulta Periodo di validità del token di accesso IAM.

  6. Connettiti all'endpoint di rilevamento della tua istanza:

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

    Sostituisci quanto segue:

    Non utilizzare un nome utente o un nome account di servizio per connetterti all'endpoint. Inoltre, le connessioni autenticate sono valide per 12 ore. Per saperne di più, consulta Intervallo di tempo del token di accesso IAM.

    Se abiliti la crittografia dei dati in transito sul cluster, devi aggiungere i flag Transport Layer Security (TLS). Ad esempio:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  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. Esegui questo comando per recuperare un token di accesso per il tuo utente IAM:

    gcloud auth print-access-token
    

    I token di accesso scadono dopo un'ora. Per saperne di più, consulta Periodo di validità del token di accesso IAM.

  9. Connettiti all'endpoint di rilevamento della tua istanza:

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

    Sostituisci quanto segue:

    Non utilizzare un nome utente o un nome account di servizio per connetterti all'endpoint. Inoltre, le connessioni autenticate sono valide per 12 ore. Per saperne di più, consulta Intervallo di tempo del token di accesso IAM.

    Se abiliti la crittografia dei dati in transito sul cluster, devi aggiungere i flag Transport Layer Security (TLS). Ad esempio:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  10. Esegui il comando CLUSTER SHARDS per visualizzare la topologia del cluster. Prendi nota dell'indirizzo IP e del numero di porta di uno dei nodi.

  11. Per utilizzare redis-cli per autenticarti e connetterti al tuo 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 annotato nel passaggio precedente
    • NODE_PORT: il numero di porta del nodo annotato nel passaggio precedente.
    • ACCESS_TOKEN: il token di accesso IAM recuperato in precedenza in questa procedura

    Le connessioni autenticate sono valide per 12 ore. Per saperne di più, consulta Periodo di validità del token di accesso IAM.

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

    Sostituisci quanto segue:

    • NODE_IP_ADDRESS: l'indirizzo IP del nodo annotato nel passaggio precedente
    • NODE_PORT: il numero di porta del nodo annotato nel passaggio precedente.
    • ACCESS_TOKEN: il token di accesso IAM recuperato in precedenza in questa procedura

    Le connessioni autenticate sono valide per 12 ore. Per saperne di più, consulta Periodo di validità del token di accesso IAM.

  12. Per verificare di avere una connessione autenticata al tuo nodo, esegui un comando Redis SET e GET.

  13. Elimina la VM 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 Creazione e gestione di un service account).

    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 di un account di servizio da visualizzare nella consoleGoogle Cloud .
  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: un nome del ruolo. Per questo esempio: redis.dbConnectionUser.
  3. Autentica la tua applicazione come 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 la tua 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.

Risoluzione dei messaggi di errore con l'autenticazione IAM

Messaggio di errore Azione consigliata 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 sono state modificate di recente, la propagazione delle autorizzazioni IAM 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 ripetere l'operazione con 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 ripetere l'operazione con backoff esponenziale per evitare ulteriori errori di connessione.