GSP920
Visão geral
As chaves de criptografia gerenciadas pelo cliente (CMEK) permitem usar suas próprias chaves criptográficas em dados em repouso no Cloud SQL. Depois de adicionar chaves de criptografia gerenciadas pelo cliente, sempre que uma chamada de API for feita, o Cloud SQL usará suas chaves para acessar os dados.
Este laboratório traz orientações detalhadas sobre como proteger uma instância do Cloud SQL para PostgreSQL. Primeiro, implante uma nova instância do Cloud SQL usando uma CMEK. Depois de criar a instância do Cloud SQL para PostgreSQL, configure o pgAudit para registrar e rastrear seletivamente as operações SQL realizadas nessa instância. Por fim, configure e teste a autenticação do banco de dados do IAM do Cloud SQL.
Atividades deste laboratório
- Configurar a CMEK do Cloud SQL para PostgreSQL.
- Ativar e configurar o pgAudit em uma instância do Cloud SQL para PostgreSQL.
- Configurar a autenticação do banco de dados do IAM do Cloud SQL para PostgreSQL.
Público-alvo
O conteúdo deste laboratório prático é mais voltado a administradores do banco de dados PostgreSQL. Ele foi criado para oferecer aos profissionais uma experiência prática na configuração de recursos do Google Cloud para dar suporte ao PostgreSQL.
Configuração e requisitos
Antes de clicar no botão Começar o Laboratório
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é ativado quando você clica em Iniciar laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, e não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
Observação: para executar este laboratório, use o modo de navegação anônima (recomendado) ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e de estudante, o que poderia causar cobranças extras na sua conta pessoal.
- Tempo para concluir o laboratório: não se esqueça que, depois de começar, não será possível pausar o laboratório.
Observação: use apenas a conta de estudante neste laboratório. Se usar outra conta do Google Cloud, você poderá receber cobranças nela.
Como iniciar seu laboratório e fazer login no console do Google Cloud
-
Clique no botão Começar o laboratório. Se for preciso pagar por ele, uma caixa de diálogo vai aparecer para você selecionar a forma de pagamento.
No painel Detalhes do Laboratório, à esquerda, você vai encontrar o seguinte:
- O botão Abrir Console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer Login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
-
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Username"}}}
Você também encontra o nome de usuário no painel Detalhes do Laboratório.
-
Clique em Próxima.
-
Copie a Senha abaixo e cole na caixa de diálogo de Olá.
{{{user_0.password | "Password"}}}
Você também encontra a senha no painel Detalhes do Laboratório.
-
Clique em Próxima.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud.
Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
-
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Observação: para acessar os produtos e serviços do Google Cloud, clique no Menu de navegação ou digite o nome do serviço ou produto no campo Pesquisar.
Tarefa 1: criar uma instância do Cloud SQL para PostgreSQL com a CMEK ativada
Nesta tarefa, você vai criar uma instância do Cloud SQL para PostgreSQL com a CMEK ativada. É fundamental manter as chaves seguras, já que não é possível gerenciar o banco de dados sem elas.
Criar uma conta de serviço por produto e por projeto para o Cloud SQL
Crie a conta de serviço necessária para a CMEK do Cloud SQL usando o comando gcloud beta services identity create.
- No Cloud Shell, execute o seguinte comando para criar a conta de serviço:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)')
gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=$PROJECT_ID
- Clique no botão Autorizar se solicitado.
Isso cria a conta de serviço que será vinculada à CMEK em uma etapa posterior.
Criar um keyring e uma chave do Cloud Key Management Service
Nesta seção, você vai criar um keyring e uma chave do Cloud KMS para usar com a CMEK.
- No Cloud Shell, execute o comando a seguir para criar o keyring do Cloud KMS:
export KMS_KEYRING_ID=cloud-sql-keyring
export ZONE=$(gcloud compute instances list --filter="NAME=bastion-vm" --format=json | jq -r .[].zone | awk -F "/zones/" '{print $NF}')
export REGION=${ZONE::-2}
gcloud kms keyrings create $KMS_KEYRING_ID \
--location=$REGION
- No Cloud Shell, execute o seguinte comando para criar a chave do Cloud KMS:
export KMS_KEY_ID=cloud-sql-key
gcloud kms keys create $KMS_KEY_ID \
--location=$REGION \
--keyring=$KMS_KEYRING_ID \
--purpose=encryption
- No Cloud Shell, execute o comando a seguir para vincular a chave à conta de serviço:
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} \
--format 'value(projectNumber)')
gcloud kms keys add-iam-policy-binding $KMS_KEY_ID \
--location=$REGION \
--keyring=$KMS_KEYRING_ID \
--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
O nome da conta de serviço é o mesmo que foi retornado pelo comando gcloud beta services identity create na subtarefa anterior.
Criar uma instância do Cloud SQL com a CMEK ativada
Nesta seção, você vai criar uma instância do Cloud SQL para PostgreSQL com a CMEK ativada. Não é possível corrigir uma instância atual para ativar a CMEK. Lembre-se disso caso queira usar a CMEK para criptografar seus dados.
Para acessar sua instância do Cloud SQL em ambientes externos de desenvolvimento ou de aplicativos, configure a instância com um endereço IP público e controle o acesso adicionando o IP desses ambientes à lista de permissões. Isso faz com que o acesso à interface pública fique limitado aos intervalos de endereços especificados.
A instância de VM do Compute Engine é tratada no laboratório como um ambiente de desenvolvimento e, portanto, é preciso autorizar o endereço IP externo dessa instância. O endereço IP externo do Cloud Shell também é adicionado à lista de permissões para facilitar a conclusão das tarefas no laboratório.
- No Cloud Shell, execute o comando a seguir para encontrar o endereço IP externo da instância de VM
bastion-vm:
export AUTHORIZED_IP=$(gcloud compute instances describe bastion-vm \
--zone=$ZONE \
--format 'value(networkInterfaces[0].accessConfigs.natIP)')
echo Authorized IP: $AUTHORIZED_IP
- No Cloud Shell, execute o comando a seguir para encontrar o endereço IP externo do Cloud Shell:
export CLOUD_SHELL_IP=$(curl ifconfig.me)
echo Cloud Shell IP: $CLOUD_SHELL_IP
- No Cloud Shell, execute o comando a seguir para criar a instância do Cloud SQL para PostgreSQL com:
export KEY_NAME=$(gcloud kms keys describe $KMS_KEY_ID \
--keyring=$KMS_KEYRING_ID --location=$REGION \
--format 'value(name)')
export CLOUDSQL_INSTANCE=postgres-orders
gcloud sql instances create $CLOUDSQL_INSTANCE \
--project=$PROJECT_ID \
--authorized-networks=${AUTHORIZED_IP}/32,$CLOUD_SHELL_IP/32 \
--disk-encryption-key=$KEY_NAME \
--database-version=POSTGRES_13 \
--cpu=1 \
--memory=3840MB \
--region=$REGION \
--root-password=supersecret!
- Digite "y" se solicitado depois de inserir o comando.
Criar uma instância do Cloud SQL com a CMEK ativada
Tarefa 2: ativar e configurar o pgAudit em um banco de dados do Cloud SQL para PostgreSQL
Nesta tarefa, você vai ativar e configurar a extensão de banco de dados pgAudit, que permite controlar de forma granular a geração de registros de todos os tipos de atividades do banco de dados.
- No Cloud Shell, execute o comando a seguir para adicionar as flags de banco de dados pgAudit à instância do Cloud SQL:
gcloud sql instances patch $CLOUDSQL_INSTANCE \
--database-flags cloudsql.enable_pgaudit=on,pgaudit.log=all
- Digite "y" se for solicitado para confirmar e continuar.
Observação: aguarde a conclusão do comando patch antes de continuar. Quando a mensagem Patching Cloud SQL instance...done aparecer, vá para a etapa seguinte.
-
No console do Cloud, acesse o Menu de navegação (
) e clique em SQL.
-
Clique na instância do Cloud SQL chamada postgres-orders.
-
No menu superior do painel Visão geral do Cloud SQL, clique em Reiniciar para reiniciar a instância após o patch executado na etapa 1.
Se solicitado novamente, clique em Reiniciar na caixa de diálogo pop-up.
Observação: pode levar alguns minutos para reiniciar a instância do Cloud SQL para PostgreSQL. Quando aparecer a mensagem dizendo que a instância foi reiniciada com sucesso (Restarted postgres-orders), vá para a etapa seguinte.
- No console do Cloud, na seção Conectar-se a esta instância, clique em Abrir o Cloud Shell.
Observação: se você receber uma mensagem de erro e não conseguir se conectar, reinicie e aguarde alguns minutos até que ser possível acessar a instância novamente e repita a etapa 6.
Um comando para se conectar à instância será preenchido automaticamente no Cloud Shell.
- Execute esse comando da forma como está escrito e insira a senha
supersecret! quando solicitado.
Uma sessão do psql será iniciada no Cloud Shell.
- Em psql, execute o comando a seguir para criar o banco de dados
orders e ativar a extensão pgAudit para registrar todas as leituras e gravações:
CREATE DATABASE orders;
\c orders;
-
Digite a senha supersecret! novamente.
-
Em psql, execute o comando a seguir para criar e configurar a extensão do banco de dados:
CREATE EXTENSION pgaudit;
ALTER DATABASE orders SET pgaudit.log = 'read,write';
Ativar o registro de auditoria no console do Cloud
Nesta seção, você vai ativar o registro de auditoria no console do Cloud.
- No console do Cloud, acesse o Menu de navegação (
) e clique em IAM e administrador > Registros de auditoria.
Observação: se aparecer a mensagem you don't have permission to view inherited audit logs configuration data for one or more parent resources (você não tem permissão para visualizar os dados de configuração de registros de auditoria herdados de um ou mais recursos pai) na parte de cima da página, pode ignorá-la e continuar para a etapa seguinte.
-
Na caixa Filtro em Configuração de registros de auditoria de acesso a dados, digite Cloud SQL e selecione a entrada na lista suspensa.
-
Marque a caixa de seleção Cloud SQL à esquerda e, em seguida, marque as seguintes caixas de seleção no painel de informações à direita:
- Leitura de administradores
- Leitura de dados
- Gravação de dados
- Clique em Salvar no painel de informações.
Preencher um banco de dados no Cloud SQL para PostgreSQL
Nesta seção, você vai preencher o banco de dados orders com os dados fornecidos.
-
Clique no ícone + na barra de título do Cloud Shell para abrir uma nova guia.
-
Na nova guia, execute o comando a seguir para baixar os scripts de dados e de preenchimento do banco de dados:
export SOURCE_BUCKET=gs://spls/gsp920
gsutil -m cp ${SOURCE_BUCKET}/create_orders_db.sql .
gsutil -m cp ${SOURCE_BUCKET}/DDL/distribution_centers_data.csv .
gsutil -m cp ${SOURCE_BUCKET}/DDL/inventory_items_data.csv .
gsutil -m cp ${SOURCE_BUCKET}/DDL/order_items_data.csv .
gsutil -m cp ${SOURCE_BUCKET}/DDL/products_data.csv .
gsutil -m cp ${SOURCE_BUCKET}/DDL/users_data.csv .
- Continue na nova guia e execute o comando a seguir para criar e preencher o banco de dados:
export CLOUDSQL_INSTANCE=postgres-orders
export POSTGRESQL_IP=$(gcloud sql instances describe $CLOUDSQL_INSTANCE --format="value(ipAddresses[0].ipAddress)")
export PGPASSWORD=supersecret!
psql "sslmode=disable user=postgres hostaddr=${POSTGRESQL_IP}" \
-c "\i create_orders_db.sql"
- Saia da sessão de terminal na nova guia:
exit
- Volte para a sessão psql na guia original do Cloud Shell e execute o comando a seguir para registrar todas as operações
SELECT em uma relação específica (como a tabela order_items):
CREATE ROLE auditor WITH NOLOGIN;
ALTER DATABASE orders SET pgaudit.role = 'auditor';
GRANT SELECT ON order_items TO auditor;
- Execute a primeira consulta
SELECT abaixo:
SELECT
users.id AS users_id,
users.first_name AS users_first_name,
users.last_name AS users_last_name,
COUNT(DISTINCT order_items.order_id ) AS order_items_order_count,
COALESCE(SUM(order_items.sale_price ), 0) AS order_items_total_revenue
FROM order_items
LEFT JOIN users ON order_items.user_id = users.id
GROUP BY 1, 2, 3
ORDER BY 4 DESC
LIMIT 500;
SELECT
products.id AS products_id,
products.name AS products_name,
products.sku AS products_sku,
products.cost AS products_cost,
products.retail_price AS products_retail_price,
products.distribution_center_id AS products_distribution_center_id,
COUNT(DISTINCT order_items.order_id ) AS order_items_order_count,
COALESCE(SUM(order_items.sale_price ), 0) AS order_items_total_revenue
FROM order_items
LEFT JOIN inventory_items ON order_items.inventory_item_id = inventory_items.id
LEFT JOIN products ON inventory_items.product_id = products.id
GROUP BY 1, 2, 3, 4, 5, 6
ORDER BY 7 DESC
LIMIT 500;
SELECT
order_items.order_id AS order_id,
distribution_centers.id AS distribution_centers_id,
distribution_centers.name AS distribution_centers_name,
distribution_centers.latitude AS distribution_centers_latitude,
distribution_centers.longitude AS distribution_centers_longitude
FROM order_items
LEFT JOIN inventory_items ON order_items.inventory_item_id = inventory_items.id
LEFT JOIN products ON inventory_items.product_id = products.id
LEFT JOIN distribution_centers ON products.distribution_center_id = distribution_centers.id
GROUP BY 1, 2, 3, 4, 5
ORDER BY 2
LIMIT 500;
-
A resposta tem 500 linhas. Digite q para fechar os resultados e voltar ao comando orders=>.
-
Repita as etapas 5 e 6 para as outras duas guias de consulta no bloco de código.
-
Execute o comando a seguir para sair do psql:
\q
Acessar registros do pgAudit
Nesta etapa, você vai visualizar a geração de registros de atualizações e consultas do banco de dados nos registros do pgAudit.
-
No console do Cloud, acesse o Menu de navegação (
) e clique em Ver todos os produtos. Em Observabilidade, clique em Geração de registros para abrir a página Análise de registros.
-
Na guia Consulta da Análise de registros, cole o comando a seguir e clique em Executar consulta:
resource.type="cloudsql_database"
logName="projects/{{{project_0.project_id|(GCP Project)}}}/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
- No histograma exibido, você pode conferir a atividade de auditoria associada às suas inserções de DDL e às consultas
SELECT executadas anteriormente.

- Clique na última barra do histograma, que corresponde às consultas
SELECT executadas.
As entradas de registro estão listadas no painel Resultados da consulta abaixo do histograma.
- Abra uma entrada de registro. Em
protoPayload.request, você vai encontrar a consulta SELECT.
Ativar e configurar o pgAudit em um banco de dados do Cloud SQL para PostgreSQL
Tarefa 3: configurar a autenticação de banco de dados do IAM do Cloud SQL
Nesta tarefa, você vai configurar a autenticação do banco de dados do IAM do Cloud SQL. Todas as tarefas de acesso e atualização do banco de dados realizadas até agora usaram contas de usuário integradas do PostgreSQL. Também é possível criar usuários do Cloud SQL para PostgreSQL usando contas do Cloud IAM. Os usuários do banco de dados podem se autenticar no Cloud SQL usando o Cloud IAM em vez de contas de banco de dados integradas, e permissões granulares no nível do banco de dados podem ser concedidas a esses usuários.
Nesta tarefa, você vai: configurar a conta de usuário do laboratório como sendo do IAM do Cloud SQL; conceder acesso à tabela de banco de dados orders.order_items usando a conta de administrador postgres; e testar o acesso à tabela de banco de dados orders.order_items na linha de comando usando o utilitário de linha de comando psql.
O processo de autenticação usado nesta tarefa é explicado em detalhes na documentação de autenticação do IAM do Cloud SQL para PostgreSQL.
Testar o acesso ao banco de dados usando um usuário do Cloud IAM antes de configurar a autenticação do IAM do Cloud SQL.
Você vai tentar acessar o banco de dados com um usuário do Cloud IAM antes que a autenticação do IAM do Cloud SQL tenha sido ativada para confirmar que ele não pode acessar os dados. Essa tentativa de conexão vai falhar antes de você passar para a seção seguinte e resolver o problema.
- No Cloud Shell, teste o acesso ao banco de dados
orders usando a conta de estudante do laboratório como nome de usuário:
export USERNAME=$(gcloud config list --format="value(core.account)")
export CLOUDSQL_INSTANCE=postgres-orders
export POSTGRESQL_IP=$(gcloud sql instances describe $CLOUDSQL_INSTANCE --format="value(ipAddresses[0].ipAddress)")
export PGPASSWORD=$(gcloud auth print-access-token)
psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders
Como o usuário do IAM do Cloud SQL ainda não foi criado, essa tentativa de conexão vai falhar e uma mensagem de falha na autenticação semelhante à seguinte vai aparecer:
psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders
psql: error: connection to server at "35.226.251.234", port 5432 failed: FATAL: password authentication failed for user "student-01-22fa974575e4@qwiklabs.net"
connection to server at "35.226.251.234", port 5432 failed: FATAL: password authentication failed for user "student-01-22fa974575e4@qwiklabs.net"
A autenticação do banco de dados do IAM do Cloud SQL usa tokens de acesso do OAuth 2.0 como a senha de usuário do Cloud IAM. Eles são válidos por apenas uma hora, por isso é necessário gerar um novo token sempre que precisar se autenticar. O token de acesso sempre precisa ser transmitido para o comando psql usando a variável de ambiente PGPASSWORD, já que o buffer do parâmetro de senha psql é muito pequeno para armazenar a string do token OAuth 2.0.
Criar um usuário do IAM do Cloud SQL
Nesta seção, você vai criar um usuário do IAM do Cloud SQL e confirmar se a autenticação dele foi ativada.
-
No console do Cloud, acesse o Menu de navegação (
) e clique em SQL.
-
Clique na instância do Cloud SQL chamada postgres-orders.
No painel Configuração à direita, observe que a lista Flags e parâmetros do banco de dados inclui apenas pgAudit.log e cloudsql.enable_pgaudit.
-
Em Instância principal no menu SQL (painel à esquerda), clique em Usuários para abrir o painel Usuários.
-
Clique em Adicionar conta de usuário.
-
Selecione Cloud IAM.
-
Na caixa Principal, insira o nome do estudante do laboratório:
-
Clique em Adicionar.
Aguarde até que o novo usuário seja adicionado.
Na página principal de visão geral da instância, observe no painel Configuração à direita que cloudsql.iam_authentication foi adicionado à lista Flags e parâmetros do banco de dados.
Conceder ao usuário do Cloud IAM acesso a uma tabela do banco de dados do Cloud SQL
Agora, você vai se conectar à instância postgres-orders usando a conta de administrador postgres integrada e vai conceder ao usuário do Cloud IAM acesso à tabela orders.order_items.
- Na seção Conectar-se a esta instância da página principal de visão geral da instância, clique em Abrir o Cloud Shell.
Um comando para se conectar à instância será preenchido automaticamente no Cloud Shell.
-
Execute esse comando da forma como está escrito e insira a senha supersecret! quando solicitado.
-
Insira o comando SQL a seguir para mudar para o banco de dados orders:
\c orders
Quando for solicitada uma senha, insira supersecret! novamente.
- Insira o comando SQL a seguir para conceder ao usuário do laboratório todas as permissões na tabela
order_items. O nome de usuário do Cloud IAM para o laboratório foi inserido nesta consulta para você.
GRANT ALL PRIVILEGES ON TABLE order_items TO "{{{user_0.username|[IAM Username]}}}";
\q
Teste o acesso ao banco de dados usando um usuário do Cloud IAM depois que a autenticação do IAM do Cloud SQL for configurada.
Agora, repita a tentativa de acessar o banco de dados com um usuário do Cloud IAM depois que a autenticação do IAM do Cloud SQL for ativada para verificar se ele já pode acessá-lo.
Teste o acesso ao banco de dados novamente com o usuário do Cloud IAM em vez do usuário postgres integrado:
- No Cloud Shell, execute o comando a seguir para se conectar ao banco de dados com o usuário do banco de dados do Cloud IAM:
export PGPASSWORD=$(gcloud auth print-access-token)
psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders
A conexão é estabelecida, e agora você consegue se conectar à instância usando a autenticação de usuário do Cloud IAM.
- Teste sua permissão de acesso executando esta consulta:
SELECT COUNT(*) FROM order_items;
Isso agora retorna um resultado bem-sucedido:
orders=> SELECT COUNT(*) FROM order_items;
count
--------
198553
(1 row)
- Confirme se você não tem acesso a uma das outras tabelas executando esta consulta:
SELECT COUNT(*) FROM users;
Essa consulta não retorna um resultado bem-sucedido:
orders=> SELECT COUNT(*) FROM users;
ERROR: permission denied for table users
Configure Cloud SQL IAM database authentication
Parabéns!
Neste laboratório, você protegeu os dados em repouso no Cloud SQL para PostgreSQL usando uma chave de criptografia gerenciada pelo cliente, ativou o pgAudit e configurou a autenticação de usuário do banco de dados do IAM do Cloud SQL.
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 3 de setembro de 2025
Laboratório testado em 2 de julho de 2025
Copyright 2026 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.