A extensão rds_encdb criptografa colunas específicas no nível do conjunto de resultados da consulta, sem necessidade de alterar o código da aplicação. Ao atribuir permissões por conta, você controla se cada conta de banco de dados visualiza as colunas criptografadas como texto simples ou texto cifrado nos resultados de consultas SELECT.
No momento, não há suporte para a instalação manual direta da extensão rds_encdb. Para instalá-la por conta própria, entre em contato conosco para obter autorização e, em seguida, siga os passos descritos neste tópico.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância RDS executando PostgreSQL 16
Versão secundária do mecanismo 20250228 ou posterior
Para atualizar a versão secundária do mecanismo, consulte Upgrade the minor engine version.
Casos de uso
Entre os casos de uso típicos estão:
Criptografia dinâmica de dados: criptografa colunas específicas nos resultados das consultas, garantindo que contas restritas sempre recebam texto cifrado.
Auditoria de conformidade: aplica políticas de acesso a dados na camada do banco de dados para atender a requisitos de auditoria.
Compartilhamento de dados com terceiros: permite compartilhar dados com partes externas mantendo as colunas sensíveis criptografadas.
Como funciona
A extensão rds_encdb utiliza uma tabela de metadados (rds_encdb.encryption_rule) para rastrear quais colunas devem ser criptografadas. Quando uma conta de banco de dados consulta uma tabela com regras de criptografia configuradas, a extensão intercepta o conjunto de resultados e retorna as colunas-alvo como texto cifrado — a menos que a conta possua permissão FULL ACCESS.
As permissões de conta funcionam da seguinte forma:
|
Permissão |
Resultado da consulta |
|
FULL ACCESS |
As colunas criptografadas aparecem como texto simples |
|
RESTRICTED ACCESS (padrão) |
As colunas criptografadas aparecem como texto cifrado; exibidas como texto simples quando acessadas via encjdbc |
O algoritmo de criptografia utilizado é AES_256_GCM. As regras de criptografia entram em vigor imediatamente, inclusive para sessões já existentes.
Instale a extensão
Configure instance parameters e defina o Running Parameter Value de
rds_encdb.enable_encryptioncomo on.-
Conecte-se ao banco de dados de destino com uma conta privilegiada e execute a instrução a seguir. Para crie uma conta privilegiada, consulte Create an account.
Execute
SELECT * FROM pg_extension;para verifique se a extensão foi instalada.CREATE EXTENSION rds_encdb;
Configure criptografia e permissões de conta
O passo a passo a seguir abrange todo o fluxo de trabalho: criação de uma tabela, configuração de regras de criptografia de colunas, concessão de acesso completo a uma conta e verificação dos resultados da consulta em cada etapa.
Etapa 1: Crie uma tabela de teste e inserir dados
Conecte-se como test_user e execute:
-- Connect as test_user
CREATE TABLE test(a text, b text, c text);
INSERT INTO test VALUES ('foo', 'bar', 'hello world');
Consulte a tabela. Neste momento, os resultados aparecem em texto simples:
SELECT * FROM test;
a | b | c
-----+-----+-------------
foo | bar | hello world
(1 row)
Etapa 2: Configure regras de criptografia de colunas
Conecte-se com a conta privilegiada (a conta que instalou a extensão rds_encdb) e insira registros na tabela de metadados rds_encdb.encryption_rule para criptografar as colunas a e b da tabela test:
-- Connect as privileged account
INSERT INTO rds_encdb.encryption_rule
VALUES
(9, 'rule1', 'test', '1'),
(10, 'rule1', 'test', '2');
A tabela rds_encdb.encryption_rule possui a seguinte estrutura:
|
Nome da coluna |
Tipo |
Descrição |
|
id |
int |
Chave primária, ID com autoincremento |
|
rule_name |
name |
Nome da regra de criptografia |
|
attrelid |
regclass |
Tabela associada a esta regra. Deve satisfazer a restrição UNIQUE de (rule_name, attrelid, attnum) |
|
attnum |
smallint |
Número ordinal da coluna na tabela |
Para visualize todas as regras configuradas, agregadas por (rule_name, table_name), consulte a view rds_encdb.rules:
SELECT * FROM rds_encdb.rules;
rule_name | attrelid | attname_list
-----------+----------+--------------
rule1 | test | b,a
(1 row)
Etapa 3: Verifique se contas restritas veem texto cifrado
Conecte-se como test_user e consulte a tabela novamente. Como test_user possui a permissão padrão RESTRICTED ACCESS, as colunas a e b agora são retornadas como texto cifrado:
-- Connect as test_user
SELECT * FROM test;
a | b | c
------------------------------------------------------------------+------------------------------------------------------------------+-------------
1yAZAAAACVyTxvBACK5JFw0w/ZU62Yt9btkv9bSN8TcJWOfXCiWVnCqnakSZCwI= | DSAZAAAACaSrnhi0usv3MiJsgRQKXA5xEArdALSdnFVjqD0nrd1s6ilShhw00EM= | hello world
(1 row)
Etapa 4: Conceder acesso completo a uma conta
Conecte-se com a conta privilegiada e conceda a test_user a permissão FULL ACCESS com um tempo de expiração:
-- Connect as privileged account
SELECT rds_encdb.setup_encryption_role('test_user', 'FULL ACCESS', '2025-04-17 16:01:02.509447+00');
Para remover as permissões de colunas criptografadas de uma conta:
SELECT rds_encdb.remove_encryption_role('account');
O sistema registra as contas com permissões configuradas na tabela de metadados rds_encdb.encryption_role_auth:
|
Nome da coluna |
Tipo |
Descrição |
|
role |
regrole |
Chave primária; nome de usuário associado a esta permissão de criptografia |
|
role_type |
char |
|
|
salt |
text |
Chave da conta. Definida e gerada pelo cliente encjdbc na conexão |
|
expire_time |
timestamptz |
Tempo de expiração da permissão. Após esse momento, a permissão reverte para RESTRICTED ACCESS. Formato: |
Para visualize as contas com permissões configuradas:
SELECT * FROM rds_encdb.encryption_role_auth;
role | role_type | salt | expire_time
-----------+-----------+------+-------------------------------
test_user | f | | 2025-04-18 00:01:02.509447+08
(1 row)
Etapa 5: Verifique se a conta agora vê texto simples
Conecte-se como test_user e consulte a tabela novamente:
-- Connect as test_user
SELECT * FROM test;
a | b | c
-----+-----+-------------
foo | bar | hello world
(1 row)
Agora, test_user visualiza as colunas criptografadas como texto simples.
Limitações
Os seguintes recursos SQL não têm suporte atualmente:
Conjuntos de resultados retornados por funções
Consultas que não sejam SELECT, como operações de cursor e instruções
PREPARE/EXECUTECommon Table Expressions (CTEs) e cláusulas
UNION