En este instructivo, se describe cómo usar vistas seguras parametrizadas en AlloyDB para PostgreSQL para restringir el acceso de los usuarios a las tablas de la base de datos. En este instructivo, configurarás vistas seguras parametrizadas, configurarás roles y privilegios de la base de datos para restringir el acceso a las tablas base y verificarás la seguridad de los datos. Las vistas seguras parametrizadas ayudan a proteger las aplicaciones que usan consultas en lenguaje natural generadas con la API de QueryData.
Se incluyen ejemplos para ilustrar las capacidades de las vistas seguras parametrizadas. Estos ejemplos solo se muestran con fines ilustrativos.
¿Qué son las vistas seguras parametrizadas?
Como práctica recomendada general, tu aplicación debe ejecutarse con una cuenta de servicio con el acceso mínimo requerido a tu base de datos. Por ejemplo, si tu aplicación no debe escribir en tu base de datos, debe usar un rol con acceso de solo lectura. Debes configurar estos controles de acceso a nivel de la base de datos.
Sin embargo, hay ocasiones en las que tu aplicación necesita controles de seguridad más detallados que los que permiten el acceso estándar a nivel de la base de datos. Las vistas seguras parametrizadas proporcionan seguridad de los datos de la aplicación y control de acceso a las filas mediante vistas de SQL. Ayudan a garantizar que los usuarios de la aplicación solo puedan ver los datos a los que tienen autorización para acceder.
Las vistas seguras parametrizadas mitigan los riesgos de seguridad cuando se controlan consultas en lenguaje natural ad hoc o generadas por LLM mediante la parametrización de vistas con identificadores de usuarios finales, lo que garantiza que los usuarios accedan solo a sus datos autorizados, independientemente de la fraseología de la consulta. Este enfoque también simplifica la administración de usuarios, ya que permite que un solo rol de base de datos sirva a todos los usuarios de la aplicación de forma segura, lo que evita la necesidad de crear roles de base de datos separados para cada persona para aplicar la seguridad a nivel de las filas.
Objetivos
- Crea vistas seguras parametrizadas con parámetros de vista con nombre.
- Crea el rol de base de datos que usa la aplicación para conectarse a la base de datos y acceder a vistas seguras parametrizadas.
- Otorga permisos de rol nuevos a las vistas seguras y revoca el acceso a las tablas base.
- Conéctate con el rol nuevo y verifica que no se pueda acceder a las tablas restringidas.
- Ejecuta consultas en la vista segura parametrizada con la función
execute_parameterized_queryo con la API de QueryData.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Es posible que los usuarios Google Cloud nuevos decumplan con los requisitos para acceder a una prueba gratuita.
Para evitar la facturación continua, borra los recursos que creaste cuando termines las tareas de este documento. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
Completa los siguientes requisitos previos antes de crear un conjunto de contexto.
Habilita la facturación y las APIs necesarias
En la Google Cloud consola de, selecciona un proyecto.
Asegúrate de tener habilitada la facturación para tu Google Cloud proyecto.
Habilita las API de Cloud necesarias para crear y conectarte a AlloyDB para PostgreSQL.
- En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto al que realizarás cambios.
En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:
- API de AlloyDB para PostgreSQL
- API de Dataplex Universal Catalog
Crea una base de datos y conéctate a ella
Prepara el entorno
Para prepararte para ejecutar consultas en una vista segura parametrizada, configura la base de datos, los roles de la base de datos, la extensión parameterized_view y el esquema de la aplicación.
Habilita la extensión requerida
Habilita la marca de base de datosparameterized_views.enabled, que carga las bibliotecas de extensión necesarias. Para obtener más información, consulta
Configura marcas de bases de datos de una instancia.
Configura la base de datos
- Crea una base de datos llamada
databasepara los datos de la aplicación y las vistas parametrizadas. Para obtener más información, consulta Crea una base de datos.
Crea roles de base de datos, la extensión y el esquema de la aplicación
En la Google Cloud consola de, ve a la página de AlloyDB.
Selecciona un clúster de la lista.
En el menú de navegación, haz clic en AlloyDB Studio.
Accede a Studio con la autenticación de postgres.
Haz clic en Autenticar. En el panel Explorador muestra una lista de los objetos de tu base de datos.
Haz clic en Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.
Crea la extensión
parameterized_viewsen la base de datos.-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;Cuando se crea la extensión, el sistema también crea un esquema llamado
parameterized_viewspara que las APIs se incluyan en el espacio de nombres de ese esquema y para que esas APIs no entren en conflicto con las APIs existentes.Accede como un usuario con privilegios de superusuario, como el usuario postgres integrado. Si deseas crear un superusuario nuevo, por ejemplo,
admin_user, ejecuta los siguientes comandos:CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;Para obtener más información, consulta
CREATE USER.Crea un rol de base de datos nuevo para ejecutar consultas en vistas seguras parametrizadas. Este es un rol de AlloyDB que usa la aplicación para conectarse y acceder a la base de datos para ejecutar consultas con acceso limitado a funciones u objetos públicos al conjunto mínimo requerido.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';Para obtener más información, consulta
CREATE USER.Conéctate como el usuario administrativo.
SET role TO admin_user;Crea el esquema que contiene las tablas.
CREATE SCHEMA schema;Crea las tablas e inserta datos.
CREATE TABLE store.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO store.checked_items (bag_id, timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);
Crea vistas seguras parametrizadas y configura privilegios de acceso
Para crear vistas seguras parametrizadas y configurar los privilegios de acceso adecuados para la tabla base y las vistas, sigue estos pasos:
En la Google Cloud consola de, ve a la página de AlloyDB.
Selecciona un clúster de la lista.
En el menú de navegación, haz clic en AlloyDB Studio.
Accede a Studio y conéctate a la
databasecomoadmin_user.Haz clic en Autenticar. En el panel Explorador muestra una lista de los objetos de tu base de datos.
Haz clic en Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.
Para proporcionar acceso limitado a la vista, crea una vista segura parametrizada:
CREATE VIEW store.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM store.checked_items t WHERE customer_id = $@app_end_userid;Otorga acceso a la vista.
GRANT SELECT ON store.secure_checked_items TO psv_user;Para acceder a la vista, otorga acceso al esquema.
GRANT USAGE ON SCHEMA store TO psv_user;Revoca el acceso directo a la tabla base.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;Accede como administrador
admin_usery otorga el rolpsv_usera un usuario autenticado con IAM.GRANT psv_user TO "IAM_USER_EMAIL";Reemplaza
IAM_USER_EMAILpor tu dirección de correo electrónico de usuario de IAM.
Verifica la seguridad de los datos
Para verificar que las vistas seguras parametrizadas restrinjan el acceso a las vistas designadas, accede a la base de datos como el usuario autenticado con IAM. En AlloyDB, los usuarios de IAM heredan los permisos de los roles de base de datos que se les asignaron.
Accede a la base de datos como el usuario autenticado con IAM.
Verifica que no se pueda acceder a la tabla base.
SELECT * FROM store.checked_items; ERROR: permission denied for table checked_itemsAccede a la vista segura parametrizada con la función
execute_parameterized_query:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from store.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );Consulta la vista segura parametrizada con la sintaxis de SQL y la solicitud
QueryDatacon parámetros de PSV.
curl -X POST \
"https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"prompt": "Show me the checked items.",
"context": {
"datasource_references": {
"alloydb": {
"database_reference": {
"project_id": "PROJECT_ID",
"region": "REGION",
"cluster_id": "CLUSTER_ID",
"instance_id": "INSTANCE_ID",
"database_id": "DATABASE_ID"
}
}
},
"parameterized_secure_view_parameters": {
"parameters": {
"app_end_userid": "303"
}
}
},
"generation_options": {
"generate_query_result": true,
"generate_natural_language_answer": true,
"generate_explanation": true
}
}'Reemplaza los siguientes valores:
PROJECT_ID: Es el ID del Google Cloud proyecto de.REGION: Es la región en la que se encuentra tu instancia de AlloyDB para PostgreSQL.CLUSTER_ID: Es el ID de tu clúster de AlloyDB para PostgreSQL.INSTANCE_ID: Es el ID de tu instancia de AlloyDB para PostgreSQL.DATABASE_ID: Es el ID de tu base de datos de AlloyDB para PostgreSQL.
Limpia
Borra el clúster
Cuando borras el clúster que creaste en la sección Antes de comenzar, también borras todos los objetos que creaste.
En la Google Cloud consola de, ve a la página de AlloyDB.
Selecciona un clúster de la lista.
Haz clic en Borrar clúster.
En Borrar clúster, ingresa el nombre del clúster para confirmar que deseas borrarlo.
¿Qué sigue?
- Obtén información sobre las vistas seguras parametrizadas.
- Obtén información para administrar la seguridad de los datos de la aplicación con vistas seguras parametrizadas.