Ce document explique comment ajouter le chiffrement TLS à un déploiement Spanner Omni sur des machines virtuelles (VM). Un déploiement avec des fonctionnalités de sécurité réseau utilise le protocole TLS (Transport Layer Security) 1.3 pour chiffrer et authentifier la communication au sein du déploiement et avec ses clients. Spanner Omni fournit le protocole mTLS (TLS mutuel) pour une sécurité renforcée, où les deux parties établissent leur authenticité avant d'échanger des données. Le protocole mTLS est facultatif entre le client et le serveur, mais les serveurs Spanner Omni communiquent entre eux via mTLS.
La version Preview de Spanner Omni n'est pas compatible avec le chiffrement TLS. Pour bénéficier des fonctionnalités qui vous permettent de créer des déploiements avec chiffrement TLS, contactez Google pour demander un accès anticipé à la version complète de Spanner Omni.
Avant de commencer
Avant de commencer, assurez-vous que votre environnement répond aux exigences suivantes :
Assurez-vous de disposer d'un accès SSH à chaque machine du déploiement. Cet accès vous permet de télécharger et d'exécuter le binaire Spanner Omni.
Votre réseau doit autoriser la communication TCP sur les ports 15000 à 15025.
Chaque machine doit disposer d'un espace de stockage suffisant pour héberger les données gérées par le déploiement.
Consultez la page Configuration système requise pour vous assurer que votre configuration répond aux exigences.
Si vous exécutez les binaires sur la plate-forme de virtualisation vSphere, désactivez la virtualisation TSC. Pour ce faire, ajoutez le paramètre
monitor_control.virtual_rdtsc = FALSEau fichier de configuration.vmxde la machine virtuelle.
Étape 1 : Créer un déploiement sans chiffrement TLS
Suivez les étapes décrites dans Créer un déploiement de VM Spanner Omni sans chiffrement. Vérifiez que votre déploiement de VM sans chiffrement ni fonctionnalités de sécurité fonctionne correctement. Cette page suppose que vous avez créé un déploiement régional avec trois zones.
Étape 2 : Générer les certificats
Vous devez créer trois ensembles de certificats :
| Type de certificat | Description |
|---|---|
| Certificats d'API | Les certificats d'API permettent de protéger le serveur d'API Spanner. |
| Certificats de serveur | Les certificats de serveur permettent de protéger la communication entre les serveurs. |
| Certificats client | Les utilisateurs finaux ou les applications utilisent des certificats client pour établir leur identité et leur confiance auprès des serveurs Spanner Omni. |
Une autorité de certification (CA) émet ces certificats. Spanner Omni fournit des outils permettant de créer une autorité de certification et les trois types de certificats. Effectuez les étapes suivantes sur l'une de vos machines.
Vous pouvez créer ces certificats sur votre poste de travail à l'aide de la CLI Spanner Omni, puis transférer les fichiers de certificat vers chaque serveur Spanner Omni. Pour en savoir plus, consultez le guide de démarrage rapide à l'aide de la CLI Spanner Omni.
Pour générer des certificats, vous devez suivre les étapes suivantes :
- Créer une autorité de certification (CA)
- Générer des certificats de serveur
- Générer des certificats client
Créer une autorité de certification (CA)
Cette autorité est l'autorité de certification racine pour tous les certificats client et serveur que vous générez lors des étapes suivantes.
spanner certificates create-ca --ca-certificate-directory=certs
Le répertoire certs contient le certificat CA. Créez une copie de ce certificat à utiliser comme autorité de certification pour les certificats d'API.
cp certs/ca.crt certs/ca-api.crt
Le répertoire $HOME/.spanner/private-keys contient la clé privée de l'autorité de certification.
Sauvegardez et sécurisez ce répertoire. Un utilisateur ayant accès à la clé privée peut signer des certificats arbitraires approuvés par les clients qui approuvent l'autorité de certification autosignée.
Bien que vous puissiez utiliser la même autorité de certification pour tous les certificats, il est obligatoire que les certificats d'API et les certificats client utilisent la même autorité de certification. Vous pouvez également créer une autorité de certification supplémentaire (ou utiliser une autorité de certification approuvée en externe) pour les certificats d'API.
Assurez-vous d'utiliser la bonne autorité de certification lors des étapes suivantes lorsque vous créez des certificats. Ce document utilise la même autorité de certification pour tous les types de certificats.
Générer des certificats de serveur
Vous générez deux types de certificats de serveur :
Certificat de serveur Spanner : chiffre la communication entre les serveurs Spanner Omni.
Certificat d'API : chiffre la communication des systèmes interagissant avec le déploiement.
Cette configuration offre une gestion plus flexible de ces certificats, comme une rotation des certificats.
Créer le certificat de serveur Spanner
Les serveurs Spanner Omni utilisent des certificats de serveur pour chiffrer la communication entre eux (communication entre serveurs).
Créez le certificat de serveur en exécutant la commande suivante. Remplacez SERVER_LIST par une liste de noms de serveurs ou de suffixes Spanner séparés par une virgule.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Cette commande crée deux fichiers, server.crt et server.key, dans le répertoire certs.
Créer le certificat d'API
Les certificats d'API chiffrent la communication des systèmes interagissant avec le déploiement. L'utilisation de certificats distincts pour l'API et la communication entre serveurs vous permet de gérer et de faire alterner chaque type indépendamment.
Créez le certificat d'API en exécutant la commande suivante. Remplacez LB_DNS par le DNS de l'équilibreur de charge.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Cette commande crée deux fichiers supplémentaires, api.crt et api.key, dans le répertoire certs. Si nécessaire, vous pouvez utiliser une autorité de certification approuvée en externe pour les certificats d'API.
Distribuer les certificats à tous les serveurs
Copiez le répertoire certs sur tous les autres serveurs du déploiement pour les démarrer avec des fonctionnalités de sécurité réseau.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
Étape 3 : Générer des certificats client
Vous pouvez utiliser des certificats client pour authentifier les utilisateurs et les applications dans Spanner. Les certificats client activent le protocole mTLS entre le client et le serveur.
Les certificats client doivent être signés par la même autorité de certification que le certificat d'API et doivent contenir un nom d'utilisateur pour l'autorisation. Cet exemple utilise l'utilisateur admin, qui est l'utilisateur par défaut pour chaque base de données. Pour en savoir plus sur les
utilisateurs, les rôles et les options d'authentification, consultez
Authentification et autorisation dans Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Cette commande crée les fichiers client.crt et client.key dans le répertoire clientcerts. Envoyez ces fichiers à n'importe quelle machine qui se connecte aux serveurs du déploiement.
Si vous prévoyez d'utiliser les certificats client avec la bibliothèque cliente Java, vous devez générer la clé de certificat au format PKCS#8. Exécutez la commande suivante :
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
Étape 4 : Redémarrer les serveurs
Une fois que vous avez généré les certificats et que vous les avez copiés sur tous les serveurs de votre déploiement, redémarrez chaque serveur.
Déploiement de serveur unique
Pour les déploiements de serveur unique, exécutez la commande suivante :
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Le serveur démarre. Consultez l'étape 7 : Interagir avec le déploiement pour interagir avec le déploiement.
Déploiement avec scaling horizontal
Pour les déploiements avec scaling horizontal, démarrez le serveur sur chaque machine. Les valeurs de server_address et zone doivent correspondre à celles de la configuration du déploiement.
Le réseau doit résoudre server_address. Les serveurs l'utilisent pour la communication interne. Exécutez la commande suivante pour démarrer le serveur racine :
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
La commande suivante montre un exemple avec des valeurs spécifiques :
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Pour activer le protocole mTLS pour les clients, utilisez l'option --enable-client-certificate-authentication=true lorsque vous démarrez le serveur.
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false \
--enable-client-certificate-authentication=true &
Les serveurs étant désormais exécutés sur chaque machine, vous êtes prêt à créer le déploiement.
Étape 5 : Créer un déploiement avec chiffrement TLS
Exécutez la commande spanner deployment create à partir de l'un des serveurs racines :
spanner deployment create --config-file=deployment.yaml
La console de chaque machine affiche des messages indiquant que le déploiement inclut désormais le chiffrement TLS. Tous les serveurs communiquent entre eux via un canal chiffré.
Étape 6 : Configurer un équilibreur de charge (facultatif)
Pour gérer et distribuer le trafic client sur les serveurs de votre déploiement, configurez un équilibreur de charge. Assurez-vous que la configuration de l'équilibreur de charge pour la vérification de l'état utilise le protocole HTTPS au lieu du protocole HTTP. Utilisez les informations de configuration suivantes :
| Paramètre | Valeur |
|---|---|
| Protocole | TCP |
| Adresse IP du backend | Adresses IP de vos serveurs. |
| Port | 15000 (port par défaut. Si vous avez utilisé un autre
port dans l'option --server-address, utilisez ce port.) |
| URL de la vérification d'état | https://IP_ADDRESS:15012/healthz |
| Stratégie d'équilibrage | roundrobin (distribue les requêtes de manière séquentielle sur les serveurs) |
Étape 7 : Interagir avec le déploiement
Vous pouvez interagir avec votre déploiement Spanner Omni à partir de n'importe quelle VM à l'aide de la CLI Spanner Omni.
Vous devez inclure l'option suivante avec chaque commande pour établir une connexion chiffrée :
--ca-certificate-file=certs/ca-api.crt
Si vous avez activé le protocole mTLS pour les clients, incluez également l'option suivante avec chaque commande :
--client-certificate-directory=clientcerts
Pour vous connecter et interagir avec votre déploiement, procédez comme suit :
Se connecter à Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTLe mot de passe par défaut est
admin.Successfully logged in as "admin"Créer une base de données
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.Ouvrir le shell SQL
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>Créer une table et ajouter des données
spanner> create table names (nameId INT64 NOT NULL, name String(100)) Primary Key (nameId); Query OK, 0 rows affected (4.62 sec) spanner> insert names (nameId, name) values (1, "Jack"); Query OK, 1 rows affected (0.18 sec)Vérifier les données
Répertoriez les bases de données :
spanner databases list --ca-certificate-file=certs/ca-api.crtNAME STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME KMS_KEY_NAME ENABLE_DROP_PROTECTION mydb READY 1h 2025-02-07T12:25:30Z falseObtenez les données de la table :
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner> show tables; +----------------+ | Tables_in_mydb | +----------------+ | names | +----------------+ 1 rows in set (0.14 sec) spanner> select * from names; +--------+--------+ | nameId | name | +--------+--------+ | 1 | Jack | +--------+--------+ 1 rows in set (18.69 msecs)
Étape 8 : Mettre à l'échelle le déploiement (facultatif)
Vous pouvez ajouter des serveurs non racines à une zone pour mettre à l'échelle la capacité de la zone. Pour ce faire, générez le certificat de serveur pour les serveurs non racines comme expliqué à l'étape 2 : Générer les certificats, puis démarrez le serveur à l'aide de la commande suivante :
spanner start \
--server-address=NON_ROOT_MACHINE \
--join-servers=ROOT_SERVER1,ROOT_SERVER2,ROOT_SERVER3 \
--zone=us-central1-a \
--base-dir=./spandir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false
Étapes suivantes
- Utilisez des bibliothèques clientes et des pilotes JDBC pour connecter votre application au déploiement.
- Gérez les utilisateurs et les rôles.