Cette page fournit des instructions sur les tâches courantes liées à la fonctionnalité d'authentification IAM pour le cluster Memorystore pour Redis. Pour en savoir plus sur cette fonctionnalité, consultez À propos de l'authentification IAM.
Créer une instance avec authentification IAM
Pour créer une instance de cluster Memorystore pour Redis qui utilise l'authentification IAM, exécutez la commande create
:
gcloud beta redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --shard-count=SHARD_COUNT --auth-mode=iam-auth
Remplacez les éléments suivants :
INSTANCE_ID est l'ID de l'instance de cluster Memorystore pour Redis que vous créez. Votre ID d'instance doit comporter entre 1 et 63 caractères. Il ne doit être composé que de lettres minuscules, de chiffres ou de traits d'union. Il doit commencer par une lettre minuscule et se terminer par une lettre minuscule ou un chiffre.
REGION_ID est la région dans laquelle vous souhaitez placer l'instance.
NETWORK est le réseau utilisé pour créer votre instance. Il doit utiliser le format suivant:
projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID
. L'ID réseau utilisé ici doit correspondre à celui utilisé par la règle de connexion au service. Sinon, l'opérationcreate
échoue. Pour en savoir plus, consultez la section Mise en réseau.SHARD_COUNT détermine le nombre de segments de 13 Go dans votre instance. Le nombre de segments détermine la capacité totale de la mémoire pour le stockage des données d'instance. Pour en savoir plus sur les spécifications des instances, consultez la section Spécifications des clusters et des segments.
Gérer les autorisations pour l'authentification IAM
Créer un rôle d'administrateur IAM limité pour une instance
Vous pouvez créer un rôle permettant de modifier les autorisations IAM de connexion aux instances sans accorder un accès administrateur complet à IAM. 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.
Accorder l'accès à votre instance avec IAM
Par défaut, l'attribution du rôle roles/redis.dbConnectionUser
au compte principal lui permet d'accéder à toutes les instances de votre projet. Pour accorder l'accès à un sous-ensemble de ressources dans votre projet, configurez l'accès IAM pour le rôle roles/redis.dbConnectionUser
. Pour en savoir plus, consultez Configurer l'accès basé sur les ressources.
Se connecter à une instance utilisant l'authentification IAM
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.
Installez redis-cli sur la VM Compute Engine en exécutant la commande suivante depuis le terminal SSH de Compute Engine:
sudo apt-get install redis-tools
Exécutez la commande suivante pour obtenir un jeton d'accès pour votre utilisateur IAM:
gcloud auth print-access-token
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 :
NETWORK_ADDRESS est l'adresse réseau de l'instance. Pour afficher l'adresse réseau, consultez Afficher les informations sur l'instance.
PORT est le numéro de port de l'instance. Pour afficher le numéro de port, consultez la section Afficher les informations sur l'instance.
ACCESS_TOKEN est le jeton d'accès IAM récupéré lors des étapes précédentes.
Exécutez la commande
CLUSTER SHARDS
pour afficher la topologie de votre cluster. Notez l'une des adresses IP et des numéros de port du nœud.Connectez-vous au nœud souhaité en exécutant la commande suivante:
redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
Remplacez les éléments suivants :
- NODE_IP_ADDRESS est l'adresse IP du nœud que vous avez trouvée à l'étape précédente.
- NODE_PORT est le numéro de port du nœud que vous avez trouvé à l'étape précédente.
Exécutez les commandes Redis
SET
etGET
pour vérifier que vous avez établi une connexion authentifiée à votre nœud de cluster.Une fois les tests de connexion à l'instance Redis terminés, vous devez envisager de supprimer la VM Compute Engine que vous avez utilisée pour vous connecter au cluster Redis. Vous éviterez ainsi que des frais soient facturés sur votre compte de facturation Cloud.
Exécutez la commande suivante pour utiliser redis-cli pour vous authentifier et vous connecter à votre instance, en remplaçant les variables par les valeurs appropriées:
redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
Remplacez les éléments suivants :
NETWORK_ADDRESS est l'adresse réseau de l'instance. Pour afficher l'adresse réseau, consultez Afficher les informations sur l'instance.
PORT est le numéro de port de l'instance. Pour afficher le numéro de port, consultez la section Afficher les informations sur l'instance.
ACCESS_TOKEN est le jeton d'accès IAM récupéré lors des étapes précédentes.
Exécutez une commande Redis
SET
etGET
pour vérifier que vous avez établi une connexion authentifiée à votre instance.Une fois les tests de connexion au cluster Redis terminés, vous devez envisager de supprimer la VM Compute Engine que vous avez utilisée pour vous connecter au cluster Redis. Vous éviterez ainsi que des frais soient facturés sur votre compte de facturation Cloud.
Automatiser la récupération des jetons d'accès
Nous vous recommandons d'automatiser la récupération des jetons d'accès dans votre application, car ils ne peuvent pas être facilement codés en dur en raison de leur courte durée de vie.
(Facultatif) Si vous ne l'avez pas déjà 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 un nom de compte de service à afficher dans la console Google Cloud.
Accordez à votre compte de service l'autorisation
redis.dbConnectionUser
sur votre projet.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role="redis.dbConnectionUser"
Remplacez les éléments suivants :
- PROJECT_ID est l'ID de projet.
- SA_NAME correspond au nom du compte de service.
- ROLE_NAME est un nom de rôle, par exemple
roles/compute.osLogin
.
Authentifier votre application en tant que compte de service donné Pour en savoir plus, consultez la section Comptes de service.
Pour obtenir des exemples de code qui montrent comment authentifier votre application à l'aide de bibliothèques clientes courantes, consultez Exemples de code pour les bibliothèques clientes d'authentification IAM.
Exemples de code de la bibliothèque cliente d'authentification IAM
Cette section fournit des exemples généraux de code client pour l'authentification avec l'authentification IAM pour votre cluster Memorystore avec la bibliothèque cliente Lettuce.
Laitue
public void example() { String discoveryEndpointIp = "insert discovery endpoint ip" String discoveryEndpointPort = "insert discovery endpoint port" RedisCredentialsProvider provider = () -> Mono.just(RedisCredentials.just("default", retrieveAccessToken().toCharArray())); RedisURI redisUri = RedisURI.Builder.redis(discoveryEndpointIp, discoveryEndpointPort) .withAuthentication(provider) .build(); ClientResources resources = DefaultClientResources.builder() .reconnectDelay( Delay.fullJitter( Duration.ofMillis(100), Duration.ofSeconds(5), 100, TimeUnit.MILLISECONDS)) .build(); ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() .enablePeriodicRefresh(1, TimeUnit.MINUTES) .enableAllAdaptiveRefreshTriggers() .dynamicRefreshSources(false) .closeStaleConnections(true) .build(); SocketOptions socketOptions = SocketOptions.builder() .connectTimeout(Duration.ofSeconds(5)) .keepAlive(true) .build(); // Create Redis Cluster Client RedisClusterClient clusterClient = RedisClusterClient.create(resources, redisUri); clusterClient.setOptions( ClusterClientOptions.builder() .topologyRefreshOptions(topologyRefreshOptions) .socketOptions(socketOptions) .autoReconnect(true) .nodeFilter( it -> !(it.is(RedisClusterNode.NodeFlag.FAIL) || it.is(RedisClusterNode.NodeFlag.EVENTUAL_FAIL) || it.is(RedisClusterNode.NodeFlag.NOADDR))) .validateClusterNodeMembership(false) .build()); // Establish connection to Redis Cluster StatefulRedisClusterConnectionconnection = clusterClient.connect(); // Retrieve synchronous Redis Cluster commands RedisAdvancedClusterCommands syncCommands = connection.sync(); // Perform Redis operations syncCommands.set("key1", "value1"); // Close the connection and shutdown the client connection.close(); clusterClient.shutdown(); }