La extensión rds_encdb cifra columnas específicas en el nivel del conjunto de resultados de las consultas, sin necesidad de modificar el código de su aplicación. Al asignar permisos por cuenta, usted controla si cada cuenta de base de datos ve las columnas cifradas como texto plano o como texto cifrado en los resultados de las consultas SELECT.
Actualmente no se admite la instalación manual directa de la extensión rds_encdb. Si desea instalarla por su cuenta, contáctenos para obtener la autorización correspondiente y siga los pasos descritos en este tema.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia RDS que ejecute PostgreSQL 16
Versión secundaria del motor de la instancia 20250228 o posterior
Para actualizar la versión secundaria del motor, consulte Upgrade the minor engine version.
Casos de uso
Entre los casos de uso más comunes se encuentran los siguientes:
Cifrado dinámico de datos: permite cifrar columnas específicas en los resultados de las consultas para que las cuentas restringidas siempre reciban texto cifrado.
Auditoría de cumplimiento: aplica directivas de acceso a datos en la capa de la base de datos para cumplir con los requisitos de auditoría.
Compartición de datos con terceros: facilita compartir información con entidades externas manteniendo cifradas las columnas confidenciales.
Funcionamiento
rds_encdb utiliza una tabla de metadatos (rds_encdb.encryption_rule) para registrar qué columnas se deben cifrar. Cuando una cuenta de base de datos consulta una tabla con reglas de cifrado configuradas, la extensión intercepta el conjunto de resultados y devuelve las columnas objetivo como texto cifrado, salvo que la cuenta tenga el permiso FULL ACCESS.
Los permisos de las cuentas funcionan de la siguiente manera:
|
Permiso |
Resultado de la consulta |
|
FULL ACCESS |
Las columnas cifradas se muestran como texto plano |
|
RESTRICTED ACCESS (predeterminado) |
Las columnas cifradas se muestran como texto cifrado; se visualizan como texto plano cuando se accede mediante encjdbc |
El algoritmo de cifrado es AES_256_GCM. Las reglas de cifrado surten efecto de inmediato, incluso en las sesiones existentes.
Instalación de la extensión
Configure instance parameters y establezca el Running Parameter Value de
rds_encdb.enable_encryptionen on.-
Conéctese a la base de datos de destino con una cuenta privilegiada y ejecute la siguiente instrucción. Para crear una cuenta privilegiada, consulte Create an account.
Ejecute
SELECT * FROM pg_extension;para comprobar que la extensión está instalada.CREATE EXTENSION rds_encdb;
Configuración del cifrado y los permisos de cuenta
A continuación se detalla el flujo de trabajo completo: crear una tabla, configurar las reglas de cifrado de columnas, otorgar acceso total a una cuenta y comprobar los resultados de las consultas en cada etapa.
Paso 1: Cree una tabla de prueba e inserte datos
Inicie sesión como test_user y ejecute lo siguiente:
-- Connect as test_user
CREATE TABLE test(a text, b text, c text);
INSERT INTO test VALUES ('foo', 'bar', 'hello world');
Consulte la tabla. En este punto, los resultados se muestran como texto plano:
SELECT * FROM test;
a | b | c
-----+-----+-------------
foo | bar | hello world
(1 row)
Paso 2: Configure las reglas de cifrado de columnas
Conéctese con la cuenta privilegiada (la misma que instaló rds_encdb) e inserte registros en la tabla de metadatos rds_encdb.encryption_rule para cifrar las columnas a y b de la tabla test:
-- Connect as privileged account
INSERT INTO rds_encdb.encryption_rule
VALUES
(9, 'rule1', 'test', '1'),
(10, 'rule1', 'test', '2');
La tabla rds_encdb.encryption_rule tiene la siguiente estructura:
|
Nombre de columna |
Tipo |
Descripción |
|
id |
int |
Clave principal, identificador de incremento automático |
|
rule_name |
name |
Nombre de la regla de cifrado |
|
attrelid |
regclass |
Tabla a la que aplica esta regla. Debe cumplir con la restricción UNIQUE de (rule_name, attrelid, attnum) |
|
attnum |
smallint |
Número ordinal de la columna dentro de la tabla |
Para consultar todas las reglas configuradas, agrupadas por (rule_name, table_name), utilice la vista rds_encdb.rules:
SELECT * FROM rds_encdb.rules;
rule_name | attrelid | attname_list
-----------+----------+--------------
rule1 | test | b,a
(1 row)
Paso 3: Compruebe que las cuentas restringidas ven texto cifrado
Conéctese como test_user y vuelva a consultar la tabla. Dado que test_user tiene el permiso predeterminado RESTRICTED ACCESS, las columnas a y b ahora se devuelven como texto cifrado:
-- Connect as test_user
SELECT * FROM test;
a | b | c
------------------------------------------------------------------+------------------------------------------------------------------+-------------
1yAZAAAACVyTxvBACK5JFw0w/ZU62Yt9btkv9bSN8TcJWOfXCiWVnCqnakSZCwI= | DSAZAAAACaSrnhi0usv3MiJsgRQKXA5xEArdALSdnFVjqD0nrd1s6ilShhw00EM= | hello world
(1 row)
Paso 4: Otorgue acceso total a una cuenta
Conéctese con la cuenta privilegiada y conceda a test_user el permiso FULL ACCESS con una fecha de expiración:
-- Connect as privileged account
SELECT rds_encdb.setup_encryption_role('test_user', 'FULL ACCESS', '2025-04-17 16:01:02.509447+00');
Para quitar los permisos de cifrado de columnas de una cuenta, ejecute lo siguiente:
SELECT rds_encdb.remove_encryption_role('account');
Las cuentas con permisos configurados se registran en la tabla de metadatos rds_encdb.encryption_role_auth:
|
Nombre de columna |
Tipo |
Descripción |
|
role |
regrole |
Clave principal; nombre de usuario asociado a este permiso de cifrado |
|
role_type |
char |
|
|
salt |
text |
Clave de la cuenta. Se establece y genera automáticamente por el cliente encjdbc al conectarse |
|
expire_time |
timestamptz |
Fecha de expiración del permiso. Una vez transcurrido este tiempo, el permiso vuelve a RESTRICTED ACCESS. Formato: |
Para consultar las cuentas que tienen permisos configurados, ejecute lo siguiente:
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)
Paso 5: Compruebe que la cuenta ahora ve texto plano
Conéctese como test_user y vuelva a consultar la tabla:
-- Connect as test_user
SELECT * FROM test;
a | b | c
-----+-----+-------------
foo | bar | hello world
(1 row)
Ahora test_user visualiza las columnas cifradas como texto plano.
Limitaciones
Actualmente no se admiten las siguientes funciones de SQL:
Conjuntos de resultados de consultas devueltos por funciones
Consultas que no sean SELECT, como operaciones con cursores e instrucciones
PREPARE/EXECUTEExpresiones de tabla comunes (CTE) y cláusulas
UNION