A extensão rds_encdb criptografa colunas específicas no nível do conjunto de resultados da consulta, sem exigir alterações no 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.
Atualmente, não há suporte para instalação manual direta da extensão rds_encdb. Para instalá-la, entre em contato conosco para obter autorização e siga as etapas descritas 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 da instância 20250228 ou posterior
Para atualizar a versão secundária do mecanismo, consulte Atualizar a versão secundária do mecanismo.
Casos de uso
Os casos de uso típicos incluem:
Criptografia dinâmica de dados: criptografe colunas específicas nos resultados de consultas para garantir que contas restritas sempre recebam texto cifrado.
Auditoria de conformidade: aplique políticas de acesso a dados na camada de banco de dados para atender a requisitos de auditoria.
Compartilhamento de dados com terceiros: compartilhe dados com partes externas mantendo as colunas sensíveis criptografadas.
Como funciona
A extensão rds_encdb usa 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 a permissão FULL ACCESS.
As permissões da conta funcionam da seguinte maneira:
|
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; aparecem como texto simples quando acessadas via encjdbc |
O algoritmo de criptografia é AES_256_GCM. As regras de criptografia entram em vigor imediatamente, inclusive para sessões existentes.
Instale a extensão
Configure parâmetros da instância e defina o Running Parameter Value de
rds_encdb.enable_encryptioncomo on.-
Conecte-se ao banco de dados alvo usando uma conta privilegiada e execute a instrução a seguir. Para criar uma conta privilegiada, consulte Crie uma conta.
Execute
SELECT * FROM pg_extension;para verificar se a extensão está instalada.CREATE EXTENSION rds_encdb;
Configure criptografia e permissões de conta
Este tutorial aborda o fluxo de trabalho completo: criação de uma tabela, configuração de regras de criptografia de coluna, concessão de acesso total 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 estão em texto simples:
SELECT * FROM test;
a | b | c
-----+-----+-------------
foo | bar | hello world
(1 row)
Etapa 2: Configure regras de criptografia de coluna
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 tem a seguinte estrutura:
|
Nome da coluna |
Tipo |
Descrição |
|
id |
int |
Chave primária, ID de incremento automático |
|
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 visualizar todas as regras configuradas agrupadas 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 tem a permissão padrão RESTRICTED ACCESS, as colunas a e b agora retornam como texto cifrado:
-- Connect as test_user
SELECT * FROM test;
a | b | c
------------------------------------------------------------------+------------------------------------------------------------------+-------------
1yAZAAAACVyTxvBACK5JFw0w/ZU62Yt9btkv9bSN8TcJWOfXCiWVnCqnakSZCwI= | DSAZAAAACaSrnhi0usv3MiJsgRQKXA5xEArdALSdnFVjqD0nrd1s6ilShhw00EM= | hello world
(1 row)
Etapa 4: Conceder acesso total a uma conta
Conecte-se com a conta privilegiada e conceda FULL ACCESS ao usuário test_user 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 criptografia de coluna de uma conta:
SELECT rds_encdb.remove_encryption_role('account');
As contas com permissões configuradas ficam registradas 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 durante a conexão |
|
expire_time |
timestamptz |
Tempo de expiração da permissão. Após este horário, a permissão reverte para RESTRICTED ACCESS. Formato: |
Para visualizar 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, o usuário test_user visualiza as colunas criptografadas como texto simples.
Limitações
Atualmente, não há suporte para os seguintes recursos SQL:
Conjuntos de resultados de consulta 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