Gérer l'authentification IAM

Cette page fournit des instructions sur les tâches courantes liées à la fonctionnalité d'authentification IAM pour Memorystore for Redis Cluster. Pour en savoir plus sur cette fonctionnalité, consultez À propos de l'authentification IAM.

Créer une instance avec l'authentification IAM

Pour créer une instance Memorystore pour Redis Cluster qui utilise l'authentification IAM, exécutez la commande create :

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

Remplacez les éléments suivants :

  • INSTANCE_ID est l'ID de l'instance Memorystore pour Redis Cluster que vous créez. L'ID de l'instance doit comporter entre 1 et 63 caractères, et ne peut contenir que des lettres minuscules, des chiffres ou des traits d'union. Il doit commencer par une lettre minuscule et se terminer par une lettre minuscule ou un chiffre.

  • REGION_ID : région dans laquelle vous souhaitez placer l'instance.

  • NETWORK est le réseau utilisé pour créer votre instance. Il doit respecter le format suivant : projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID. L'ID de réseau utilisé ici doit correspondre à celui utilisé par la règle de connexion au service. Sinon, l'opération create échoue. Pour en savoir plus, consultez Mise en réseau.

  • NODE_TYPE est le type de nœud du cluster.

  • SHARD_COUNT détermine le nombre de segments dans votre instance. Le nombre de partitions détermine la capacité de mémoire totale pour stocker les données du cluster. Pour en savoir plus sur la spécification du cluster, consultez Spécification du cluster et des nœuds.

Accorder des autorisations pour l'authentification IAM

Pour accorder l'accès IAM, suivez les instructions de la section Attribuer un rôle IAM afin d'attribuer le rôle roles/redis.dbConnectionUser au compte principal. Le compte principal est une identité à laquelle vous pouvez accorder l'accès aux ressources dans Google Cloud. Par exemple, un compte principal peut être un compte de service pouvant accéder à votre projet Google Cloud .

Par défaut, l'attribution du rôle roles/redis.dbConnectionUser à un compte principal lui permet d'accéder à toutes les instances de votre projet.

Créer un rôle d'administrateur IAM limité pour une instance

Vous pouvez créer un rôle qui peut modifier les autorisations IAM de connexion à une instance sans accorder un accès administrateur IAM complet. Pour ce faire, créez un administrateur IAM limité pour le rôle roles/redis.dbConnectionUser. Pour en savoir plus, consultez Créer des administrateurs IAM limités.

Se connecter à une instance qui utilise l'authentification IAM

  1. Si vous ne disposez pas encore d'une VM Compute Engine utilisant le même réseau autorisé que votre cluster Redis, créez-en une et connectez-vous en suivant les instructions de la page Démarrage rapide à l'aide d'une VM Linux.

  2. Pour votre projet, utilisez la commande gcloud compute instances set-service-account afin de définir un compte de service et d'activer le champ d'application de l'API Cloud Platform pour votre VM Compute Engine.

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

    Effectuez les remplacements suivants :

    • VM_NAME : nom de votre VM Compute Engine
    • SERVICE_ACCOUNT_EMAIL : adresse e-mail de votre compte de service
    • SCOPE : le champ d'application de l'API Cloud Platform pour la VM (cloud-platform)

    Par exemple, la commande suivante attribue le compte de service my-sa-123@my-project-123.iam.gserviceaccount.com à une VM appelée example-VM et définit le niveau d'accès sur cette VM sur l'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
    

    Pour en savoir plus sur l'activation de ce niveau d'accès d'accès, consultez Associer le compte de service et mettre à jour le niveau d'accès. Pour en savoir plus sur les bonnes pratiques concernant ce niveau d'accès, consultez Bonnes pratiques concernant les niveaux d'accès.

  3. Activez l'API Memorystore pour Redis pour votre projet.

    API Memorystore pour Redis

  4. Installez redis-cli sur la VM Compute Engine en exécutant la commande suivante depuis le terminal SSH Compute Engine :

    sudo apt-get install redis-tools
    
  5. Exécutez la commande suivante pour récupérer un jeton d'accès pour votre utilisateur IAM :

    gcloud auth print-access-token
    

    Les jetons d'accès expirent au bout d'une heure. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

  6. Connectez-vous au point de terminaison de découverte de votre instance :

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

    Remplacez les éléments suivants :

    N'utilisez pas de nom d'utilisateur ni de nom de compte de service pour vous connecter au point de terminaison. De plus, les connexions authentifiées sont valides pendant 12 heures. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

    Si vous activez le chiffrement en transit sur le cluster, vous devez ajouter les indicateurs TLS (Transport Layer Security). Exemple :

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  7. Exécutez la commande CLUSTER SHARDS pour afficher la topologie de votre cluster. Notez l'une des adresses IP et l'un des numéros de port du nœud.

  8. Exécutez la commande suivante pour récupérer un jeton d'accès pour votre utilisateur IAM :

    gcloud auth print-access-token
    

    Les jetons d'accès expirent au bout d'une heure. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

  9. Connectez-vous au point de terminaison de découverte de votre instance :

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

    Remplacez les éléments suivants :

    N'utilisez pas de nom d'utilisateur ni de nom de compte de service pour vous connecter au point de terminaison. De plus, les connexions authentifiées sont valides pendant 12 heures. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

    Si vous activez le chiffrement en transit sur le cluster, vous devez ajouter les indicateurs TLS (Transport Layer Security). Exemple :

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  10. Exécutez la commande CLUSTER SHARDS pour afficher la topologie de votre cluster. Notez l'adresse IP et le numéro de port de l'un des nœuds.

  11. Pour utiliser redis-cli afin de vous authentifier et de vous connecter à votre nœud, utilisez la commande suivante :

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

    Remplacez les éléments suivants :

    • NODE_IP_ADDRESS : adresse IP du nœud que vous avez notée à l'étape précédente.
    • NODE_PORT : numéro de port du nœud que vous avez noté à l'étape précédente
    • ACCESS_TOKEN : jeton d'accès IAM que vous avez récupéré précédemment dans cette procédure.

    Les connexions authentifiées sont valides pendant 12 heures. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

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

    Remplacez les éléments suivants :

    • NODE_IP_ADDRESS : adresse IP du nœud que vous avez notée à l'étape précédente.
    • NODE_PORT : numéro de port du nœud que vous avez noté à l'étape précédente
    • ACCESS_TOKEN : jeton d'accès IAM que vous avez récupéré précédemment dans cette procédure.

    Les connexions authentifiées sont valides pendant 12 heures. Pour en savoir plus, consultez Période de validité des jetons d'accès IAM.

  12. Pour vérifier que vous disposez d'une connexion authentifiée à votre nœud, exécutez une commande Redis SET et GET.

  13. Supprimez la VM Compute Engine que vous avez utilisée pour vous connecter au cluster Redis. Cela vous permet d'éviter que des frais ne soient facturés sur votre compte de facturation Cloud.

Automatiser la récupération des jetons d'accès

  1. (Facultatif) Si vous ne l'avez pas encore fait, créez un compte de service pour votre application (consultez Créer et gérer un compte de service).

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

    Remplacez les éléments suivants :

    • SA_NAME correspond au nom du compte de service.
    • DESCRIPTION est une description facultative du compte de service.
    • DISPLAY_NAME est le nom du compte de service à afficher dans la consoleGoogle Cloud .
  2. Attribuez le rôle redis.dbConnectionUser à votre compte de service dans votre projet.

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet.
    • SA_NAME : nom du compte de service.
    • ROLE_NAME : nom d'un rôle. Pour cet exemple :redis.dbConnectionUser.
  3. Authentifiez votre application en tant que compte de service donné. Pour en savoir plus, consultez Comptes de service.

Exemple de code pour se connecter à une instance qui utilise l'authentification IAM

Vous pouvez consulter un exemple de code qui vous montre comment authentifier votre application à l'aide de bibliothèques clientes populaires. Vous pouvez également découvrir comment utiliser cet exemple de code pour vous connecter à une instance qui utilise l'authentification IAM.

Dépannage des messages d'erreur liés à l'authentification IAM

Message d'erreur Action recommandée Description

-WRONGPASS invalid username-password pair or user is disabled

Vérifier le nom d'utilisateur et le jeton d'accès fournis au serveur Memorystore for Redis Cluster Le nom d'utilisateur ou le jeton d'accès fournis ne sont pas valides. "default" est le seul nom d'utilisateur accepté. Si votre application utilise déjà le nom d'utilisateur "default", vérifiez que le jeton d'accès n'a pas expiré et qu'il est récupéré en suivant les instructions de la section Se connecter à une instance qui utilise l'authentification IAM. Si vous avez récemment modifié vos autorisations IAM, la propagation peut prendre quelques minutes.

-NOAUTH Authentication required

Vérifiez que l'application est configurée pour fournir un jeton d'accès IAM au serveur Memorystore pour Redis Cluster. L'application ne fournit pas de jeton d'accès au serveur Memorystore for Redis Cluster. Vérifiez que l'application est configurée pour fournir un jeton d'accès en suivant les instructions de la section Se connecter à une instance qui utilise l'authentification IAM.

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

Réessayer avec un intervalle exponentiel entre les tentatives Le backend IAM est surchargé et a renvoyé une erreur de dépassement de quota au serveur Memorystore pour Redis Cluster. Les applications doivent essayer de corriger cette erreur avec un intervalle exponentiel entre les tentatives pour éviter d'autres échecs de connexion.

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

Réessayer avec un intervalle exponentiel entre les tentatives Le backend IAM a renvoyé une erreur temporaire au serveur Memorystore for Redis Cluster. Les applications doivent essayer de corriger cette erreur avec un intervalle exponentiel entre les tentatives pour éviter d'autres échecs de connexion.