Nesta página, descrevemos a auditoria de banco de dados usando a extensão pgAudit, que ajuda a configurar muitos dos registros frequentemente necessários para cumprir as certificações governamentais, financeiras e ISO.
Para informações gerais sobre as extensões do PostgreSQL no Cloud SQL, consulte Extensões do PostgreSQL.
Visão geral
A auditoria do banco de dados no Cloud SQL para PostgreSQL está disponível pela extensão pgAudit de código aberto.
Ao usar essa extensão, é possível registrar e rastrear seletivamente as operações SQL realizadas em uma determinada instância de banco de dados. Com a extensão, você tem recursos de auditoria para monitorar e registrar um subconjunto selecionado de operações.
A extensão pgAudit se aplica aos comandos e consultas SQL executados. Por outro lado, os registros de auditoria do Cloud precisam ser usados para auditar operações administrativas e de manutenção realizadas em uma instância do Cloud SQL.
Consulte a página Registros de auditoria para ver mais informações sobre a geração de registros de auditoria no Cloud SQL.
Configurar auditoria de banco de dados no Cloud SQL
As etapas para a geração de registros de auditoria usando a extensão pgAudit incluem:
- Como ativar a sinalização
cloudsql.enable_pgauditno Cloud SQL. - Como executar um comando para criar a extensão pgAudit.
- Definir valores para a sinalização
pgaudit.log.
Depois de configurar a auditoria do banco de dados, será possível visualizar os registros e, se necessário, desativar a geração de registros.
Configurar auditoria
Nesta seção, você verá os conceitos básicos da configuração de operações de auditoria do banco de dados.
Sinalização inicial para ativar a auditoria
No Cloud SQL, você usa sinalizações de banco de dados para muitas operações, incluindo o ajuste
dos parâmetros do PostgreSQL e a configuração de uma instância. A sinalização cloudsql.enable_pgaudit permite a auditoria para uma determinada instância de banco de dados. É possível alterar o valor da cloudsql.enable_pgaudit
sinalização pelo Google Cloud console ou pelo gcloud comando.
Use as instruções padrão para sinalizações para
ativar a sinalização cloudsql.enable_pgaudit, definindo o valor como on. Por
exemplo, para usar o comando gcloud, especifique o seguinte, substituindo o nome da
instância por [INSTANCE_NAME]:
gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on
A sinalização cloudsql.enable_pgaudit é listada com as outras
sinalizações compatíveis
e é específica para o Cloud SQL.
Executar o comando para criar a extensão pgAudit
Depois de ativar o flag de banco de dados, execute o comando CREATE EXTENSION usando um cliente psql compatível. O comando a seguir cria a
extensão pgAudit para todos os bancos de dados em uma instância do Cloud SQL:
CREATE EXTENSION pgaudit;
Definir valores para a sinalização pgaudit.log
Use as instruções padrão para sinalizações para
definir valores para a sinalização pgaudit.log.
Por exemplo, para ativar a auditoria de todas as operações de banco de dados em uma instância,
use o seguinte comando gcloud:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Definir outras configurações do banco de dados
Para definir as configurações de auditoria do banco de dados, siga os procedimentos na seção Como personalizar a geração de registros de auditoria do banco de dados.
Ver registros de auditoria de banco de dados
Para visualizar os registros de auditoria, ative os registros de auditoria de acesso a dados do seu projeto. Os registros pgAudit gerados para uma determinada instância são enviados para o Cloud Logging como registros de auditoria de acesso a dados. Os usuários podem visualizar os registros pgAudit gerados pelo aplicativo Explorador de registros.
No aplicativo Explorador de registros, os registros pgAudit podem ser visualizados ao selecionar o filtro de registro cloudaudit.googleapis.com/data_access.
Como alternativa, você pode usar a seguinte consulta para mostrar todos os registros pgAuditoria para determinado projeto do Cloud SQL:
resource.type="cloudsql_database"
logName="projects/<your-project-name>/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
Formato de registro de pgAudit
Cada entrada de registro pgAudit nos registros de auditoria de acesso a dados tem campos que representam as informações coletadas para uma consulta.
Exemplo:
{
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
methodName: "cloudsql.instances.query"
request: {
@type: "type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
auditClass: "READ"
auditType: "SESSION"
chunkCount: "1"
chunkIndex: "1"
command: "SELECT"
database: "finance"
databaseSessionId: 2209692
parameter: "[not logged]"
statement: "SELECT * FROM revenue"
statementId: 2
substatementId: 1
user: "alice"
}
}
}
Veja a seguir as descrições dos campos nos registros de auditoria de acesso a dados:
- auditClass. O tipo da instrução que é registrada. Os valores
possíveis são
READ,WRITE,FUNCTION,ROLE,DDL,MISC, eMISC_SET. - auditType.
SESSIONouOBJECT. - chunkCount. A divisão pode ocorrer nos dados fornecidos nos campos
parameterestatement. O campochunkCountindica o número total de partes. Consulte também a descrição do campochunkIndex. - chunkIndex. Especifica o número de índice dos blocos de dados nos
campos
parameterestatement(no contêinerrequestatual). O número inicial é1. Consulte também a descrição do campochunkCount. - comando. Por exemplo,
ALTER TABLEouSELECT. - parâmetro. O campo
chunkIndexdetermina o conteúdo desse campo. Veja a descrição do campochunkIndex. Se o valor depgaudit.log_parameterestiver definido, o campoparameterconterá os parâmetros de instrução como dados CSV entre aspas. Se não houver parâmetros, este campo conterá[none]. Caso contrário, este campo conterá[not logged]. - instrução. Instrução executada no back-end.
O campo
chunkIndexdetermina o conteúdo do campostatement. Veja a descrição do campochunkIndex. - statementId. ID de instrução exclusivo para esta sessão. Cada ID de instrução representa uma chamada de back-end. Os IDs de instruções são sequenciais, mesmo que algumas instruções não sejam registradas.
- substatementId. ID sequencial para cada instrução dentro da instrução principal.
Alguns desses campos também estão descritos na documentação de pgAudit (em inglês).
Desativar auditoria
Para desativar a auditoria do banco de dados, defina o valor da sinalização cloudsql.enable_pgaudit como off. O valor pode ser alterado pelo Google Cloud console ou pelo
gcloud comando. Use the
instruções padrão para sinalizações para
desativar a cloudsql.enable_pgaudit sinalização.
Além disso, execute o comando DROP EXTENSION usando um
cliente psql compatível para remover o estado da extensão:
DROP EXTENSION pgaudit;
Personalizar a geração de registros de auditoria de banco de dados no Cloud SQL
Nesta seção, você verá maneiras de personalizar o comportamento de auditoria de uma instância de banco de dados.
Para ver outros recursos da extensão, leia a documentação pgAudit (em inglês).
Requisito para privilégios de superusuário
No Cloud SQL, as extensões só podem ser criadas por usuários que fazem parte do
papel cloudsqlsuperuser. Quando você cria uma nova instância do PostgreSQL, o usuário
padrão do PostgreSQL é criado para você, ainda que seja necessário definir a senha do usuário.
O usuário padrão do PostgreSQL faz parte do papel cloudsqlsuperuser. Para mais informações, consulte
Usuários do PostgreSQL.
Configurar a auditoria de todas as operações de banco de dados na instância
Para configurar a auditoria de todos os bancos de dados em uma instância, é preciso aplicar as configurações de pgAudit no nível do sistema. Os parâmetros de auditoria no nível do sistema só podem ser definidos
apenas como sinalizações do banco de dados pelo Google Cloud console ou pelo gcloud comando.
Por exemplo, para ativar a auditoria de todas as operações de banco de dados em uma instância, use o seguinte comando gcloud:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Configurar operações específicas em todos os bancos de dados de instâncias
Para auditoria em todos os bancos de dados da instância, use o
Google Cloud console ou o gcloud comando. Por exemplo, para ativar a auditoria apenas para operações de leitura e gravação na instância, use o seguinte comando gcloud. Este exemplo usa uma
sintaxe baseada em lista para especificar
vários valores:
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags ^:^cloudsql.enable_pgaudit=on:pgaudit.log=read,write
O comando substitui as sinalizações do banco de dados existentes.
Configurar auditoria de um banco de dados específico
Para configurar a auditoria de um banco de dados específico, defina os parâmetros pgAudit no nível do banco de dados. Por exemplo, o comando SQL a seguir pode ser usado para ativar a auditoria de leitura e gravação de um banco de dados chamado finance:
finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';
Configurar a auditoria de uma relação
A auditoria de uma relação é mais restrita do que a auditoria de um banco de dados específico.
Quando você faz auditoria de uma relação, um papel de auditor exclusivo
é atribuído ao parâmetro pgaudit.role. Qualquer objeto ou relação concedido a esse papel
é registrado.
Por exemplo, para configurar a auditoria de todas as consultas SELECT na
relação salary no banco de dados employee, use estes comandos:
employee=> CREATE ROLE auditor WITH NOLOGIN;
employee=> ALTER DATABASE employee SET pgaudit.role = 'auditor';
employee=> GRANT SELECT ON salary TO auditor;
Também é possível auditar um subconjunto de colunas para uma determinada relação.
Por exemplo, o comando a seguir configura a geração de registros de auditoria para ocorrer somente
quando as colunas income e tax_status são acessadas a partir
do relacionamento salary:
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Configurar a auditoria de um usuário do banco de dados
É possível ativar a auditoria de um usuário específico definindo o
parâmetro pgaudit.log por nível ROLE.
Por exemplo, o comando SQL a seguir define a auditoria para todas as operações de banco de dados executadas pelo usuário Alice:
finance=> ALTER ROLE alice SET pgaudit.log = 'all';
Mascarar dados sensíveis em registros de auditoria
Para melhorar a privacidade de dados e a segurança, é possível configurar o pgAudit para mascarar valores literais
nas instruções SQL registradas usando a cloudsql.pgaudit_mask_literals
flag. Quando esse recurso está ativado, constantes de string, números e outros valores literais são substituídos por marcadores de posição nos registros de auditoria. Isso permite auditar a estrutura das consultas e as operações realizadas sem registrar valores de dados potencialmente sensíveis.
Benefícios
- Impede que dados sensíveis incorporados em consultas apareçam em registros de auditoria, incluindo os exemplos a seguir:
- Senhas
- Informações pessoais
- Secrets
- Ajuda a atender aos requisitos de conformidade e regulamentares relacionados à privacidade de dados.
Como funciona
Quando a sinalização cloudsql.pgaudit_mask_literals está definida como on, a extensão pgAudit processa a instrução SQL antes de gravá-la no registro de auditoria. Se a extensão identificar valores literais na consulta, ela os substituirá antes de registrar a consulta:
Instrução original :
INSERT INTO users (id, email) VALUES (123, 'sensitive@example.com');Instrução no registro de auditoria, com a máscara ativada :
INSERT INTO users (id, email) VALUES ($1, $2);
Observe que os valores literais do ID e do e-mail são substituídos no registro de auditoria retornado.
Requisitos
- A sinalização
cloudsql.pgaudit_mask_literalsé compatível com o Cloud SQL para PostgreSQL nas versões 14 e mais recentes. - A sinalização
cloudsql.enable_pgauditestá desativada por padrão e precisa ser definida comoonpara ser usada.
Ativar a máscara
Para ativar a máscara literal, defina o flag de banco de dados cloudsql.pgaudit_mask_literals como on. É possível definir sinalizações de banco de dados usando o Google Cloud console, a CLI gcloud,
ou a API Cloud SQL Admin.
Para mais informações, consulte Configurar sinalizações do banco de dados.
gcloud sql instances patch INSTANCE_NAME \
--database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=on
Substitua INSTANCE_NAME pelo nome da instância.
Desativar a máscara
Para desativar a máscara literal, defina a sinalização cloudsql.pgaudit_mask_literals como off.
gcloud sql instances patch INSTANCE_NAME \
--database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=off
Substitua INSTANCE_NAME pelo nome da instância.
Dicas para gerenciamento de auditoria no Cloud SQL
Ao personalizar o comportamento da auditoria, lembre-se do seguinte:
- Quando o flag de banco de dados
cloudsql.enable_pgauditestá desativado, a geração de registros de auditoria é interrompida imediatamente. No entanto, as configurações pgAudit aplicadas (por exemplo, as configurações de parâmetropgaudit.log) são preservadas, a menos que sejam removidas explicitamente. - A instância do banco de dados é reiniciada sempre que o valor do flag de banco de dados para
cloudsql.enable_pgaudité alterado. - Os usuários do banco de dados criados por comandos
CREATE ROLEexplícitos não têm o privilégio para modificar configurações de auditoria. Somente os usuários do banco de dados criados pelo Google Cloud console e ogcloudcomando podem modificar as configurações de auditoria. - Quando você ativa os registros de auditoria de sessão e de objeto, as instruções relativas a ambos são adicionadas aos registros. Os registros de sessão e objeto não se cancelam nem modificam entre si.
Limitações da extensão pgAudit no Cloud SQL para PostgreSQL
Os registros de auditoria são gravados temporariamente no disco da instância, ocupando espaço em disco antes de serem enviados para o Cloud Logging. Portanto analise todas as informações a seguir antes de usar esse recurso:
- A taxa de ingestão de registros é de 4 MB por segundo. Quando a carga da geração de registros
excede a taxa de ingestão, pode ocorrer o seguinte:
- Pode haver um crescimento indesejado no uso do disco.
- O espaço em disco pode ser esgotado.
- Se você tiver ativado esse recurso e executar muitas consultas que atendam aos critérios de auditoria, o uso do disco poderá crescer rapidamente.
- Antes de usar esse recurso, planeje:
- Ativar aumento automático de armazenamento.
- monitorar o uso geral do disco. O carregamento da geração de registros não pode ser monitorado separadamente. Use a métrica cloudsql.googleapis.com/database/disk/utilization no Metrics Explorer.
- Se necessário, reduza o uso do disco executando menos consultas ou reduzindo a auditoria.
- Se o espaço disponível em disco estiver esgotado, os registros de auditoria de algumas consultas poderão ser perdidos.