Activer le chiffrement transparent des données (TDE) sur AlloyDB Omni RPM

1. Introduction

Cet atelier de programmation explique comment configurer et activer le chiffrement transparent des données (TDE) sur AlloyDB Omni à l'aide de packages RPM. TDE chiffre les fichiers de données, les journaux WAL (Write-Ahead Log) et les fichiers de données temporaires au repos. Il assure ainsi la protection des données contre les accès non autorisés aux supports de stockage physiques sous-jacents.

Dans cet atelier de programmation, vous allez apprendre à provisionner des volumes de stockage, à initialiser et à exécuter un cluster AlloyDB Omni compatible avec le chiffrement TDE à l'aide de File KMS, et à vérifier le chiffrement des données au repos dans les fichiers de disque.

Prérequis

  • Accès à un projet Google Cloud et à Cloud Shell depuis la console Google Cloud.
  • Le SDK Google Cloud (gcloud) est installé et configuré. Pour en savoir plus sur l'installation de gcloud, consultez gcloud-install.

Points abordés

  • Découvrez comment créer une VM Compute Engine avec des disques de base de données, de sauvegarde et d'échange dédiés.
  • Découvrez comment formater des volumes de stockage (XFS), configurer /etc/fstab et préparer des chemins d'accès aux données.
  • Apprendre à générer et à gérer des clés de chiffrement de clés (KEK) à l'aide de File KMS
  • Découvrez comment installer les packages RPM AlloyDB Omni et les utilitaires client PostgreSQL.
  • Découvrez comment amorcer un cluster AlloyDB Omni compatible avec TDE à l'aide des outils de configuration RPM (alloydbomni18-setup) et --tde-kek-url.
  • Comment vérifier le chiffrement sur le disque à l'aide de l'inspection des fichiers bruts (grep)

Prérequis

2. Préparation

Configuration du projet

Créer un projet Google Cloud

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.

Démarrer Cloud Shell

Bien que vous puissiez utiliser Google Cloud à distance depuis votre ordinateur portable, vous allez utiliser Google Cloud Shell, un environnement de ligne de commande exécuté dans le cloud, lors de cet atelier de programmation.

Icône d'activation de Cloud Shell

  1. Ouvrez la console Google Cloud et cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure. Vous pouvez également ouvrir Cloud Shell en appuyant sur G, puis sur S dans la console, ou en accédant à shell.cloud.google.com.
  2. Le provisionnement et la connexion à l'environnement prennent généralement quelques instants. Une fois l'opération terminée, une invite de terminal s'affiche, prête à recevoir des saisies.

Terminal Google Cloud Shell affichant l'environnement connecté

3. Créer la VM Compute Engine

Dans cette section, vous allez créer une machine virtuelle (VM) Compute Engine (GCE) exécutant Rocky Linux 9 avec des disques persistants dédiés aux données de la base de données (/data1), aux sauvegardes/à l'observabilité (/obs) et à l'espace d'échange.

  1. Définissez des variables d'environnement pour l'ID de votre projet, le nom de la VM, la zone et la région.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Configurez votre projet par défaut.
    gcloud config set project $PROJECT
    
  3. Créez des règles de pare-feu réseau pour le trafic SSH.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni-tde \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. Étant donné que la VM est créée sans adresse IP publique, configurez un routeur Cloud Router et une passerelle Cloud NAT pour fournir un accès Internet sortant permettant de télécharger les packages RPM. Si un service Cloud NAT existe déjà dans la région de votre projet, vous pouvez continuer.
    gcloud compute routers create alloydb-omni-tde-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION 2>/dev/null || true
    
    gcloud compute routers nats create alloydb-omni-tde-nat \
        --project=$PROJECT \
        --router=alloydb-omni-tde-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips 2>/dev/null || true
    
    Remarque : Si une passerelle Cloud NAT existe déjà dans votre région, GCP renverra un message indiquant que le NAT est déjà configuré pour tous les sous-réseaux. Vous pouvez ignorer cette erreur et continuer.
  5. Créez des disques persistants supplémentaires pour les données de base de données, les sauvegardes et l'espace d'échange.
    gcloud compute disks create $INSTANCE_NAME-data \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-obs \
        --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced
    
    gcloud compute disks create $INSTANCE_NAME-swap \
        --project=$PROJECT --zone=$ZONE --size=10GB --type=pd-balanced
    
  6. Provisionnez l'instance de VM Rocky Linux 9 avec les volumes de stockage associés.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=n2-highmem-16 \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=30GB \
        --boot-disk-type=pd-balanced \
        --disk=name=$INSTANCE_NAME-data,device-name=db-data,mode=rw \
        --disk=name=$INSTANCE_NAME-obs,device-name=obs,mode=rw \
        --disk=name=$INSTANCE_NAME-swap,device-name=swap,mode=rw \
        --no-address
    

4. Préparer les disques, le réglage du système et la clé KMS du fichier

Dans cette section, vous allez vous connecter à la VM, formater et monter les volumes de stockage persistant, configurer l'espace d'échange, ajuster SELinux et générer la clé de chiffrement de clé (KEK) TDE à l'aide de File KMS.

  1. Connectez-vous à la VM en SSH via Identity-Aware Proxy (IAP).
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Formatez et installez le volume de données (/data1) et le volume d'observabilité/de sauvegarde (/obs).
    sudo mkdir -p /data1 /obs
    
    sudo parted /dev/disk/by-id/google-db-data mklabel gpt
    sudo parted /dev/disk/by-id/google-db-data mkpart primary 0% 100%
    
    sudo parted /dev/disk/by-id/google-obs mklabel gpt
    sudo parted /dev/disk/by-id/google-obs mkpart primary 0% 100%
    
    sleep 3
    sudo mkfs.xfs -L data /dev/disk/by-id/google-db-data-part1
    sudo mkfs.xfs -L obs /dev/disk/by-id/google-obs-part1
    
    echo -e "LABEL=data\t/data1\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    echo -e "LABEL=obs\t/obs\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab
    
    sudo systemctl daemon-reload
    sudo mount /data1
    sudo mount /obs
    
  3. Créez et activez l'espace d'échange sur le disque d'échange dédié.
    SWAP_UUID=$(sudo mkswap /dev/disk/by-id/google-swap 2>/dev/null | awk '$0 ~ "UUID" {print $NF}')
    echo -e "${SWAP_UUID}\tswap\tswap\tdefaults\t0 0" | sudo tee -a /etc/fstab
    sudo swapon -a
    
  4. Définissez des variables d'environnement pour le répertoire de la base de données et le fichier de clé File KMS.
    export PGDATA="/data1/18"
    export KMS_DIR="/data1/kms"
    export KEK_FILE="$KMS_DIR/tde_key"
    export ALLOYDB_OMNI_REPOSITORY_URL="<your-repository-url>"
    
  5. Créez des répertoires de stockage pour la base de données et le stockage des clés KMS de fichier.
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. Générez une clé de chiffrement de clé (KEK) cryptographiquement sécurisée de 32 octets à l'aide d'OpenSSL pour File KMS.
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. Installez les utilitaires de gestion SELinux requis.
    sudo dnf install -y policycoreutils-python-utils
    

5. Installer les packages RPM AlloyDB Omni

Configurez les dépôts de packages et installez le serveur de base de données AlloyDB Omni avec les outils PostgreSQL 18 standards.

Remarque : Remplacez $ALLOYDB_OMNI_REPOSITORY_URL par l'URL du dépôt reçue par e-mail après avoir rempli le formulaire d'inscription AlloyDB Omni RPM. Pour en savoir plus, consultez la présentation d'AlloyDB Omni sur Linux.

  1. Créez le fichier de configuration du dépôt YUM pour AlloyDB Omni.
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  2. Mettez à jour le cache du dépôt YUM et installez les packages RPM du serveur AlloyDB Omni 18.
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. Installez le dépôt RPM PGDG officiel de PostgreSQL, puis le package client PostgreSQL 18 standard (psql).
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo dnf install -y postgresql18
    
  4. Attribuez la propriété de /data1 et du répertoire de clés KMS à l'utilisateur postgres.
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. Amorcer un cluster compatible avec le chiffrement TDE

Configurez les quotas de ressources, ouvrez les ports du pare-feu de l'hôte et initialisez le cluster AlloyDB Omni avec le chiffrement transparent des données activé via la clé KMS du fichier (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE").

  1. Définissez SELinux sur le mode permissif et configurez les règles de pare-feu de l'hôte pour PostgreSQL.
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Configurez les paramètres de remplacement du service systemd pour attribuer des limites de ressources de mémoire et de processeur.
    sudo mkdir -p /etc/systemd/system/alloydbomni18.service.d
    sudo tee /etc/systemd/system/alloydbomni18.service.d/override.conf << EOF
    [Service]
    CPUQuota=90%
    MemoryMax=80%
    EOF
    sudo chown root:root /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo chmod 644 /etc/systemd/system/alloydbomni18.service.d/override.conf
    sudo systemctl daemon-reload
    
  3. Définissez les variables d'environnement de l'administrateur et initialisez le cluster de base de données TDE à l'aide de alloydbomni18-setup initdb.
    export PGPASSWORD="YourStrongPassword123!"
    export POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE"
    
    sudo POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS" PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  4. Configurez le port 5432 du serveur dans postgresql.conf.
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. Préparez les catalogues et les extensions système à l'aide de alloydbomni18-setup preparedb.
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. Activez et lancez le service systemd alloydbomni18.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Vérifiez que le résultat affiche Active: active (running).

7. Opérations sur la base de données et vérification du chiffrement de disque TDE

Connectez-vous à la base de données TDE, insérez des exemples d'enregistrements, exécutez une commande CHECKPOINT pour forcer l'écriture des données sur le disque, puis exécutez des analyses directes du disque (grep) pour prouver le chiffrement des données au repos.

  1. Connectez-vous à la base de données alloydbadmin à l'aide de psql.
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. Créez une table de test, insérez une chaîne confidentielle et déclenchez un point de contrôle pour écrire les tampons modifiés dans le stockage.
    CREATE TABLE customer_credentials (
        id SERIAL PRIMARY KEY,
        username TEXT,
        secret_passcode TEXT
    );
    
    INSERT INTO customer_credentials (username, secret_passcode)
    VALUES ('alice_user', 'UNENCRYPTED_DEMO_SECRET_98765');
    
    CHECKPOINT;
    
  3. Interrogez la vue interne des statistiques TDE AlloyDB pgsnap.g$tde_stats pour vérifier l'état du chiffrement actif, l'emplacement de la clé KEK et les métriques de bloc.
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    Exemple de résultat confirmant le chiffrement TDE actif (is_tde_enabled = t), le chemin d'accès au fichier KEK et les compteurs de blocs chiffrés :
     is_tde_enabled |        tde_kek_url        | tde_data_blocks_encrypted | tde_wal_blocks_encrypted 
    ----------------+---------------------------+---------------------------+--------------------------
     t              | file:///data1/kms/tde_key |                      2023 |                     2717
    (1 row)
    
  4. Quittez psql.
    \q
    
  5. Recherchez la chaîne de code secret dans les fichiers de stockage de base de données bruts sous /data1/18/base/ pour vérifier la protection TDE sur le disque.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

Points à retenir concernant la validation :

  • Sur une instance de base de données non TDE, l'exécution de grep sur les fichiers de relations de table affiche la chaîne en texte brut sur le disque.
  • Sur une instance de base de données compatible avec le chiffrement TDE, grep renvoie zéro correspondance, car tous les fichiers de données, index, journaux WAL (Write-Ahead Log) et données temporaires sont entièrement chiffrés au repos avec des algorithmes de chiffrement par blocs AES.

8. Nettoyage

Après avoir terminé les exercices, nettoyez les ressources pour éviter que des frais de calcul inutiles ne vous soient facturés.

  1. Déconnectez-vous de la session SSH de votre VM.
    exit
    
  2. Supprimez la machine virtuelle GCE et les disques persistants associés.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    gcloud compute disks delete $INSTANCE_NAME-data $INSTANCE_NAME-obs $INSTANCE_NAME-swap --zone=$ZONE --project=$PROJECT --quiet
    
  3. Supprimez les règles de pare-feu et les ressources de passerelle Cloud NAT.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni-tde --project=$PROJECT --quiet
    gcloud compute routers nats delete alloydb-omni-tde-nat --router=alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
    

9. Félicitations

Félicitations ! Vous avez terminé l'atelier de programmation sur le TDE sur AlloyDB Omni RPM.

Points abordés

  • Comment provisionner des disques de stockage (/data1, /obs), configurer l'espace d'échange et formater les systèmes de fichiers XFS.
  • Apprendre à générer et gérer les clés de chiffrement de clés à l'aide de File KMS
  • Découvrez comment initialiser et démarrer un cluster AlloyDB Omni compatible avec TDE à l'aide des outils RPM.
  • Comment vérifier le chiffrement des données au repos à l'aide de l'inspection directe des disques bruts (grep).

Pour en savoir plus, consultez la documentation AlloyDB Omni.

10. Enquête

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices