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_pgaudit
no 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 sinalização cloudsql.enable_pgaudit
por meio do Console do Cloud ou do comando gcloud
.
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 a sinalização do 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.
SESSION
ouOBJECT
. - chunkCount. A divisão pode ocorrer nos dados fornecidos nos campos
parameter
estatement
. O campochunkCount
indica 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
parameter
estatement
(no contêinerrequest
atual). O número inicial é1
. Consulte também a descrição do campochunkCount
. - comando. Por exemplo,
ALTER TABLE
ouSELECT
. - parâmetro. O campo
chunkIndex
determina o conteúdo desse campo. Veja a descrição do campochunkIndex
. Se o valor depgaudit.log_parameter
estiver definido, o campoparameter
conterá 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
chunkIndex
determina 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 por meio do Console do Google Cloud ou do
comando gcloud
. Use as
instruções padrão para sinalizações para
desativar a sinalização cloudsql.enable_pgaudit
.
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
como sinalizações do banco de dados por meio do Console do Google Cloud ou do comando gcloud
.
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
Console do Google Cloud ou o comando gcloud
. Por exemplo,
para ativar a auditoria apenas para operações de leitura e gravação na instância, é possível
usar 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/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';
Dicas para gerenciamento de auditoria no Cloud SQL
Ao personalizar o comportamento da auditoria, lembre-se do seguinte:
- Quando a sinalização do banco de dados
cloudsql.enable_pgaudit
é desativada, 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 da sinalização do banco de dados
para
cloudsql.enable_pgaudit
é alterado. - Os usuários do banco de dados criados por meio de comandos
CREATE ROLE
explícitos não têm o privilégio para modificar configurações de auditoria. Somente os usuários do banco de dados criados por meio do Console do Cloud e o comandogcloud
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.