Ativar a criptografia transparente de dados (TDE) no RPM do AlloyDB Omni

1. Introdução

Este codelab demonstra como configurar e ativar a criptografia transparente de dados (TDE, na sigla em inglês) no AlloyDB Omni usando pacotes RPM. A TDE criptografa arquivos de dados, registros prévios de escrita (WAL) e arquivos de dados temporários em repouso, oferecendo proteção de dados contra acesso não autorizado a mídias de armazenamento físico subjacentes.

Neste codelab, você vai aprender a provisionar volumes de armazenamento, inicializar e executar um cluster do AlloyDB Omni ativado para TDE usando o File KMS e verificar a criptografia de dados em repouso em arquivos de disco.

Pré-requisitos

  • Acesso a um projeto do Google Cloud e ao Cloud Shell no console do Google Cloud.
  • SDK Google Cloud (gcloud) instalado e configurado. Para mais detalhes sobre a instalação do gcloud, consulte gcloud-install (link em inglês).

O que você vai aprender

  • Como criar uma VM do Compute Engine com banco de dados dedicado, backup e discos de troca.
  • Como formatar volumes de armazenamento (XFS), configurar /etc/fstab e preparar caminhos de dados.
  • Como gerar e gerenciar chaves de criptografia de chaves (KEK) usando o File KMS.
  • Como instalar pacotes RPM do AlloyDB Omni e utilitários de cliente do PostgreSQL.
  • Como inicializar um cluster do AlloyDB Omni ativado para TDE usando ferramentas de configuração do RPM (alloydbomni18-setup) e --tde-kek-url.
  • Como verificar a criptografia no disco usando a inspeção de arquivos brutos (grep).

O que é necessário

2. Configuração e requisitos

Configuração do projeto

Criar um projeto do Google Cloud

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto na nuvem do Google Cloud.
  2. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

Iniciar Cloud Shell

Embora seja possível operar o Google Cloud remotamente no seu laptop, neste codelab você vai usar o Google Cloud Shell, um ambiente de linha de comando executado na nuvem.

Ícone para ativar o Cloud Shell

  1. Abra o console do Google Cloud e clique no ícone do Cloud Shell na barra de ferramentas superior à direita. Você também pode abrir o Cloud Shell pressionando G e S no console ou acessando shell.cloud.google.com.
  2. Normalmente, leva alguns instantes para provisionar e se conectar ao ambiente. Quando concluído, você verá um prompt de terminal pronto para entrada.

Terminal do Google Cloud Shell mostrando o ambiente conectado

3. Criar a VM do Compute Engine

Nesta seção, você vai criar uma máquina virtual (VM) do Compute Engine (GCE) executando o Rocky Linux 9 com discos permanentes dedicados para dados do banco de dados (/data1), backups/observabilidade (/obs) e espaço de troca.

  1. Defina variáveis de ambiente para o ID do projeto, o nome da VM, a zona e a região.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Configure o projeto padrão.
    gcloud config set project $PROJECT
    
  3. Crie regras de firewall de rede para tráfego 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. Como a VM é criada sem um endereço IP público, configure um Cloud Router e um gateway do Cloud NAT para fornecer acesso à Internet de saída para fazer o download de pacotes RPM. Se um Cloud NAT já existir na região do projeto, você poderá continuar.
    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
    
    Observação: se um gateway do Cloud NAT já existir na sua região, o GCP vai retornar uma mensagem indicando que o NAT já está configurado para todas as sub-redes. Você pode ignorar esse erro e continuar.
  5. Crie outros discos permanentes para dados do banco de dados, backups e espaço de troca.
    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. Provisione a instância de VM do Rocky Linux 9 com os volumes de armazenamento anexados.
    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. Preparar discos, ajuste do sistema e chave do File KMS

Nesta seção, você vai se conectar à VM, formatar e montar os volumes de armazenamento permanente, configurar a troca, ajustar o SELinux e gerar a chave de criptografia de chaves (KEK) da TDE usando o File KMS.

  1. Execute SSH na VM pelo Identity-Aware Proxy (IAP).
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Formate e monte o volume de dados (/data1) e o volume de observabilidade/backup (/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. Crie e ative o espaço de troca no disco de troca dedicado.
    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. Defina variáveis de ambiente para o diretório do banco de dados e o arquivo de chave do 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. Crie diretórios de armazenamento para o banco de dados e o armazenamento de chaves do File KMS.
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. Gere uma chave de criptografia de chaves (KEK) criptograficamente segura de 32 bytes usando o OpenSSL para o File KMS.
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. Instale os utilitários de gerenciamento do SELinux necessários.
    sudo dnf install -y policycoreutils-python-utils
    

5. Instalar pacotes RPM do AlloyDB Omni

Configure repositórios de pacotes e instale o servidor de banco de dados do AlloyDB Omni junto com as ferramentas padrão do PostgreSQL 18.

Observação:substitua $ALLOYDB_OMNI_REPOSITORY_URL pela URL do repositório recebida por e-mail após preencher o formulário de inscrição do RPM do AlloyDB Omni. Para mais informações, consulte a visão geral do AlloyDB Omni no Linux.

  1. Crie o arquivo de configuração do repositório YUM para o 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. Atualize o cache do repositório YUM e instale os pacotes RPM do servidor do AlloyDB Omni 18.
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. Instale o repositório RPM oficial do PGDG do PostgreSQL e instale o pacote de cliente padrão do PostgreSQL 18 (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. Atribua a propriedade de /data1 e do diretório de chaves do KMS ao usuário postgres.
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. Inicializar um cluster ativado para TDE

Configure cotas de recursos, abra portas de firewall de host e inicialize o cluster do AlloyDB Omni com a criptografia transparente de dados ativada pela chave do File KMS (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE").

  1. Defina o SELinux para o modo permissivo e configure regras de firewall de host para o PostgreSQL.
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Configure os parâmetros de substituição do serviço systemd para atribuir limites de recursos de memória e CPU.
    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. Defina variáveis de ambiente do administrador e inicialize o cluster de banco de dados TDE usando 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. Configure a porta do servidor 5432 em postgresql.conf.
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. Prepare catálogos e extensões do sistema usando alloydbomni18-setup preparedb.
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. Ative e inicie o serviço systemd alloydbomni18.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Verifique se a saída mostra Active: active (running).

7. Operações de banco de dados e verificação de criptografia de disco TDE

Conecte-se ao banco de dados TDE, insira registros de amostra, execute um CHECKPOINT para forçar a gravação de dados no disco e execute verificações diretas de disco (grep) para comprovar a criptografia de dados em repouso.

  1. Conecte-se ao banco de dados alloydbadmin usando psql.
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. Crie uma tabela de teste, insira uma string confidencial e acione um ponto de verificação para gravar buffers sujos no armazenamento.
    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. Consulte a visualização de estatísticas internas do AlloyDB TDE pgsnap.g$tde_stats para verificar o status de criptografia ativa, o local da KEK e as métricas de bloco.
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    Exemplo de saída confirmando a TDE ativa (is_tde_enabled = t), o caminho do arquivo KEK e os contadores de blocos criptografados:
     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. Saia do psql.
    \q
    
  5. Pesquise arquivos de armazenamento de banco de dados brutos em /data1/18/base/ para a string de senha para verificar a proteção TDE no disco.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

Aprendizado importante da verificação de chaves :

  • Em uma instância de banco de dados não TDE, a execução de grep em arquivos de relação de tabela mostra a string de texto simples no disco.
  • Em uma instância de banco de dados ativada para TDE , grep retorna zero correspondências porque todos os arquivos de dados, índices, registros prévios de escrita (WAL) e dados temporários são totalmente criptografados com cifras de bloco AES em repouso.

8. Revisão dos dados

Depois de concluir os exercícios, limpe os recursos para evitar cobranças de computação indesejadas.

  1. Desconecte-se da sessão SSH da VM.
    exit
    
  2. Remova a máquina virtual do GCE e os discos permanentes anexados.
    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. Exclua as regras de firewall e os recursos do gateway do 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. Parabéns

Parabéns! Você concluiu o codelab da TDE no AlloyDB Omni RPM.

O que vimos

  • Como provisionar discos de armazenamento (/data1, /obs), configurar a troca e formatar sistemas de arquivos XFS.
  • Como gerar e gerenciar chaves de criptografia de chaves usando o File KMS.
  • Como inicializar e iniciar um cluster do AlloyDB Omni ativado para TDE usando ferramentas RPM.
  • Como verificar a criptografia de dados em repouso usando a inspeção direta de disco bruto (grep).

Para mais informações, consulte a documentação do AlloyDB Omni.

10. Pesquisa

Como você usará este tutorial?

Apenas leitura Leitura e exercícios