Spanner Omni utilise TLS 1.3 pour chiffrer les données qui transitent entre le client et le serveur, ainsi qu'entre les serveurs Spanner Omni. Spanner Omni fournit le protocole mTLS pour renforcer la sécurité. Les deux parties établissent mutuellement leur authenticité avant d'échanger des données. Si vous utilisez le chiffrement, vos serveurs doivent communiquer via mTLS. Vous pouvez choisir si votre client et votre serveur utilisent également 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 afin de demander un accès anticipé à la version complète de Spanner Omni.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
Créez un cluster Kubernetes La configuration est compatible avec Google Kubernetes Engine (GKE) et Amazon Elastic Kubernetes Service (Amazon EKS). Vous devrez peut-être personnaliser la configuration pour qu'elle fonctionne dans d'autres environnements.
Assurez-vous que le cluster Kubernetes peut accéder à l'artefact Artifact Registry qui héberge le conteneur Spanner Omni.
Installez et configurez l'outil de ligne de commande
kubectlet Helm.Si vous configurez l'environnement Kubernetes sur des machines de la plate-forme de virtualisation vSphere, désactivez la virtualisation du compteur d'horodatage (TSC) en ajoutant
monitor_control.virtual_rdtsc = FALSEau fichier de configuration.vmxde la machine virtuelle. Cela permet à TrueTime de fonctionner correctement.Vérifiez que votre environnement répond à la configuration système requise pour Spanner Omni.
Étape 1 : Générez les certificats
Vous devez créer trois ensembles de certificats :
Certificats d'API : ils permettent de protéger le serveur de l'API Spanner Omni.
Certificats de serveur : ils permettent de protéger la communication entre les serveurs.
Certificats client : les utilisateurs finaux ou les applications les utilisent pour établir leur identité et leur fiabilité auprès des serveurs Spanner Omni.
Ces certificats sont émis par une autorité de certification. Spanner Omni fournit des outils permettant de créer une autorité de certification autosignée et les trois types de certificats.
Effectuez les étapes suivantes sur l'une de vos machines. Les étapes supposent que l'espace de noms est spanner-ns. Remplacez-le par l'espace de noms que vous comptez utiliser dans votre déploiement.
Vous pouvez créer ces certificats sur votre poste de travail à l'aide de la CLI Spanner Omni.
1. Créer une autorité de certification (CA)
Une autorité de certification (CA) émet tous les certificats. Votre organisation peut disposer d'une autorité de certification centrale, ou vous pouvez utiliser une autorité de certification publique. Bien que vous puissiez utiliser la même autorité de certification pour tous les certificats, les certificats d'API et les certificats client doivent utiliser la même autorité de certification.
Spanner Omni vous permet de créer une CA privée.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
La commande create-ca génère le certificat de l'autorité de certification dans le répertoire certs.
Vous pouvez copier ce certificat pour l'utiliser comme autorité de certification pour les certificats d'API ou créer une autre autorité de certification. Assurez-vous d'utiliser la bonne autorité de certification lorsque vous créez des certificats.
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.
Il est essentiel de sauvegarder et de sécuriser ce répertoire. Les utilisateurs ayant accès à la clé privée peuvent signer des certificats arbitraires auxquels les clients faisant confiance à l'autorité de certification autosignée font confiance. Vous pouvez également créer une autre autorité de certification (ou utiliser une autorité de certification externe de confiance) pour les certificats d'API. Ce document utilise la même CA pour tous les types de certificats.
2. Générer des certificats de serveur
Vous devez générer deux types de certificats de serveur :
Certificat d'API : utilisez ce certificat pour chiffrer la communication des systèmes interagissant avec le déploiement.
Certificat de serveur Spanner : les serveurs Spanner Omni utilisent ce certificat pour chiffrer les communications entre eux.
Cette configuration offre une flexibilité dans la gestion de ces certificats. Par exemple, il vous permet d'utiliser la rotation des certificats.
Créer le certificat de serveur Spanner
Pour créer le certificat de serveur, exécutez la commande suivante :
# Comma-separate names of the Spanner servers; wildcards are supported.
SERVER_NAMES=*.pod.NAMESPACE
./google/spanner/bin/spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Cette commande crée server.crt et server.key dans le répertoire certs.
Créer le certificat d'API
Pour créer le certificat d'API, exécutez la commande suivante :
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Cette commande crée api.crt et api.key dans le répertoire certs. Si nécessaire, utilisez une autorité de certification externe de confiance pour les certificats d'API.
3. Générer des certificats client
Vous pouvez utiliser des certificats clients pour authentifier les utilisateurs et les applications. Les certificats client permettent d'activer mTLS entre le client et le serveur. Vous pouvez ignorer cette étape si vous ne prévoyez pas d'utiliser mTLS.
La même autorité de certification qui signe le certificat de l'API doit signer les certificats client, qui doivent également contenir un nom d'utilisateur pour l'autorisation. Pour cet exemple, utilisez l'utilisateur admin, qui est l'utilisateur par défaut de chaque nouvelle base de données. Pour en savoir plus, consultez Authentification et autorisation dans Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Cette commande crée client.crt et client.key dans le répertoire clientcerts. Envoyez ces fichiers à n'importe quelle machine se connectant au déploiement.
Si vous prévoyez d'utiliser des 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
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Étape 2 : Transférez les certificats vers le cluster Kubernetes
Exécutez les commandes suivantes pour transférer les certificats vers votre cluster Kubernetes :
kubectl create namespace NAMESPACE
kubectl create secret generic tls-certs \
--from-file=ca.crt="certs/ca.crt" \
--from-file=ca-api.crt="certs/ca-api.crt" \
--from-file=server.crt="certs/server.crt" \
--from-file=server.key="certs/server.key" \
--from-file=api.crt="certs/api.crt" \
--from-file=api.key="certs/api.key" \
-n NAMESPACE
Étape 3 : Créer le déploiement avec le chiffrement TLS
Pour créer votre déploiement avec chiffrement TLS, procédez comme suit.
1. Préparer la configuration Helm
Consultez Créer une configuration de graphique Helm et créez la configuration de déploiement pour votre environnement.
Pour activer TLS, définissez les valeurs suivantes dans la configuration de votre chart Helm :
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. Créer le déploiement
Exécutez la commande suivante pour créer le déploiement :
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version VERSION \
--set global.platform=gke \
--set global.insecureMode=false \
--set deployment.enableClientCertificateAuthentication=true \
--namespace NAMESPACE \
--set monitoring.enabled=true
La commande déclenche un job d'amorçage. Vous pouvez suivre la progression en consultant les journaux de ce job :
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Le résultat indique la progression. Une fois l'opération terminée, le message "Déploiement créé" s'affiche.
3. Vérifier l'état des pods
Exécutez la commande suivante pour vérifier l'état du pod :
kubectl get pods --watch --namespace NAMESPACE
Tous les pods sont à l'état READY.
4. Mettre à jour le certificat et le déploiement avec les informations de l'équilibreur de charge
Cette étape est obligatoire si vous souhaitez que les clients se connectent depuis l'extérieur du cluster Kubernetes.
# Get the service details
kubectl get service spanner -n NAMESPACE
# The EXTERNAL-IP:PORT is the API or deployment endpoint for your deployment.
# Update the API certificate with these details.
OMNI_ENDPOINT=EXTERNAL_IP,spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates update --filename_prefix=api --hostnames=${OMNI_ENDPOINT} --ca_certificate_directory certs --output_directory certs --overwrite
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
Étape 4 : Interagir avec Spanner Omni
Vous pouvez interagir avec votre déploiement Spanner Omni depuis n'importe quelle VM à l'aide de la CLI Spanner Omni.
Si vous avez activé mTLS pour les clients, utilisez les indicateurs suivants avec chaque commande :
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. Se connecter à Spanner Omni
Exécutez la commande suivante pour vous connecter :
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Le mot de passe par défaut est admin.
Successfully logged in as "admin"
2. Créer une base de données
Exécutez la commande suivante pour créer une base de données :
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. Ouvrir le shell SQL
Exécutez la commande suivante pour ouvrir le shell :
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Créer une table et ajouter des données
Exécutez les commandes SQL suivantes :
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)
5. Vérifier le déploiement
Pour lister les bases de données, exécutez la commande suivante :
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
La sortie ressemble à ceci :
| NOM | ÉTAT | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | READY | 1 h | 2025-02-07T12:25:30Z | faux |
Pour interroger les données, exécutez la commande suivante :
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Exécutez les commandes SQL suivantes :
SHOW TABLES;
SELECT * FROM names;
Vous pouvez également suivre les instructions de la section Utiliser PGAdapter avec Spanner Omni pour configurer PGAdapter et interagir à l'aide d'outils tels que psql.
Étape 5 : Surveiller le déploiement
Si vous avez installé Spanner Omni avec monitoring.enabled=true, Prometheus extrait les métriques. Vous pouvez utiliser Grafana pour visualiser ces métriques.
1. Obtenir les détails du service
Exécutez les commandes suivantes pour obtenir les détails du service :
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring
Étapes suivantes
- Utilisez les bibliothèques clientes et les pilotes JDBC pour connecter votre application au déploiement.
- Gérer les utilisateurs et les rôles