As visualizações seguras parametrizadas oferecem segurança de dados e controle de acesso a linhas para aplicativos. Eles filtram os resultados da consulta com base na identidade do usuário do aplicativo.
Neste tutorial, descrevemos como configurar visualizações seguras parametrizadas no AlloyDB para PostgreSQL, configurar papéis e privilégios de banco de dados para restringir o acesso a tabelas base e verificar a segurança de dados. Os exemplos fornecidos neste documento são apenas para fins de demonstração.
O que são visualizações seguras parametrizadas?
Como prática recomendada geral, seu aplicativo deve ser executado usando uma conta de serviço com o acesso mínimo necessário ao banco de dados. Por exemplo, se o aplicativo não precisar gravar no banco de dados, ele deverá usar um papel com acesso somente leitura. Configure esses controles de acesso no nível do banco de dados.
Quando o aplicativo precisa de uma segurança mais granular do que o acesso padrão no nível do banco de dados, é possível usar visualizações seguras parametrizadas para garantir que os usuários tenham acesso de visualização apenas aos dados autorizados. As visualizações seguras parametrizadas oferecem segurança de dados dinâmica e controle de acesso a linhas adequados para aplicativos SaaS multilocatários sem exigir papéis de banco de dados separados para cada usuário final do aplicativo.
O uso de visualizações seguras parametrizadas oferece três benefícios principais:
- Segurança de dados dinâmica e controle de acesso por linha: filtra consultas usando identificadores de usuário final para que os usuários acessem apenas os dados autorizados, independentemente da frase da consulta.
- Gerenciamento de papéis mais fácil: usa um único papel de banco de dados compartilhado para todos os usuários do aplicativo, em vez de gerenciar papéis de banco de dados separados para cada indivíduo.
Objetivos
- Criar visualizações seguras parametrizadas com parâmetros de visualização nomeados.
- Crie o papel de banco de dados usado pelo aplicativo para se conectar ao banco de dados e acessar visualizações seguras parametrizadas.
- Conceda as permissões do novo papel às visualizações seguras parametrizadas e revogue o acesso às tabelas base.
- Conecte-se usando o novo papel e verifique se as tabelas restritas não podem ser acessadas.
- Execute consultas nas visualizações seguras parametrizadas usando a função
execute_parameterized_query()ou a API QueryData.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Novos usuários do Google Cloud podem estar qualificados para um teste sem custo financeiro.
Para evitar o faturamento contínuo, exclua os recursos criados ao concluir as tarefas deste documento. Para mais informações, consulte Limpeza.
Antes de começar
Antes de criar visualizações seguras parametrizadas, conclua os pré-requisitos a seguir.
Ativar o faturamento e as APIs necessárias
No Google Cloud console, selecione um projeto.
Verifique se o faturamento está ativado para seu projeto do Google Cloud .
Ative as APIs do Cloud necessárias para criar e se conectar ao AlloyDB para PostgreSQL.
Na etapa Confirmar projeto, clique em Avançar para confirmar o nome do projeto no qual você vai fazer alterações.
Na etapa Ativar APIs, clique em Ativar para ativar o seguinte:
- API AlloyDB para PostgreSQL
- API Knowledge Catalog
- API Data Analytics com Gemini (
geminidataanalytics.googleapis.com)
Criar e se conectar a um banco de dados
Conceder os papéis necessários e criar um usuário de banco de dados do IAM
Para autenticar com o Identity and Access Management (IAM) e executar solicitações queryData em visualizações seguras parametrizadas, configure o usuário ou a conta de serviço do IAM:
Conceda os seguintes papéis do IAM a
IAM_USER_EMAILno projeto do Google Cloud :roles/geminidataanalytics.queryDataUserroles/serviceusage.serviceUsageConsumerroles/alloydb.databaseUser
Para mais informações sobre como conceder papéis do IAM, consulte Adicionar vinculação de política do IAM a um projeto.
Ative a autenticação do IAM na instância do AlloyDB e adicione
IAM_USER_EMAILcomo um usuário de banco de dados baseado no IAM no cluster. É preciso criar esse usuário do banco de dados do IAM antes de conceder a ele o papel de banco de dadospsv_user. Para mais informações sobre como configurar usuários de banco de dados do IAM, consulte Gerenciar a autenticação do IAM.
Preparar o ambiente
Para se preparar para executar consultas em uma visualização segura parametrizada, configure o banco de dados, os papéis do banco de dados, a extensão parameterized_views e o esquema do aplicativo.
Ativar a flag de banco de dados
Ative a flag de banco de dadosparameterized_views.enabled, que carrega as
bibliotecas de extensão necessárias. Para mais informações, consulte
Configurar flags de banco de dados de uma instância.
Configurar o banco de dados
- Crie um banco de dados chamado
databasepara os dados do aplicativo e as visualizações seguras parametrizadas. Para mais informações, consulte Criar um banco de dados.
Criar papéis de banco de dados, a extensão e o esquema do aplicativo
No console do Google Cloud , acesse a página do AlloyDB.
Selecione um cluster na lista.
No menu de navegação, clique em AlloyDB Studio.
Faça login no Studio usando a autenticação da conta de administrador.
Clique em Autenticar. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
Clique em Nova guia do editor de SQL ou Nova guia para abrir uma nova guia.
Para usar visualizações parametrizadas, crie a extensão
parameterized_viewsno banco de dados:-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;Quando a extensão é criada, o banco de dados também cria um esquema chamado
parameterized_viewspara que as APIs sejam contidas no namespace desse esquema e não entrem em conflito com as APIs atuais.Faça login como um usuário com privilégios de superusuário, como o usuário
postgresintegrado. Se você quiser criar um novo superusuário, por exemplo,admin_user, execute os seguintes comandos:CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;Para obter mais informações, consulte
CREATE USER.Criar um novo papel de banco de dados para executar consultas em visualizações seguras parametrizadas e conceder a
admin_usera capacidade de administrar esse papel. Esse é um papel do AlloyDB que o aplicativo usa para se conectar e fazer login no banco de dados para executar consultas com acesso limitado a funções ou objetos públicos ao conjunto mínimo necessário.CREATE ROLE psv_user WITH LOGIN PASSWORD '...'; GRANT psv_user TO admin_user WITH ADMIN OPTION;Para obter mais informações, consulte
CREATE USER.Conecte-se como usuário administrativo.
SET role TO admin_user;Crie o esquema que contém as tabelas.
CREATE SCHEMA store;Crie as tabelas e insira os dados.
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);
Criar visualizações seguras parametrizadas e configurar privilégios de acesso
Para criar visualizações seguras parametrizadas e configurar os privilégios de acesso adequados para a tabela base e as visualizações, siga estas etapas:
No console do Google Cloud , acesse a página do AlloyDB.
Selecione um cluster na lista.
No menu de navegação, clique em AlloyDB Studio.
Faça login no Studio e conecte-se ao banco de dados chamado
databasecomo o usuárioadmin_user.Clique em Autenticar. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
Clique em Nova guia do editor de SQL ou Nova guia para abrir uma nova guia.
Para fornecer acesso limitado à visualização, crie uma visualização 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;Conceda acesso à visualização.
GRANT SELECT ON store.secure_checked_items TO psv_user;Para acessar a visualização, conceda acesso ao esquema.
GRANT USAGE ON SCHEMA store TO psv_user;Revogue o acesso direto à tabela base.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;Observação: o proprietário da visualização parametrizada precisa ter privilégios
SELECTnas tabelas base. Além disso, o usuário da visualização parametrizada precisa terUSAGEno esquema da visualização eSELECTna visualização. Por exemplo, o usuárioadmin_useré o proprietário da visualização parametrizada, então ele tem privilégiosSELECTnas tabelas base, enquantopsv_userprecisa terUSAGEno esquemastoreeSELECTna visualização.Verifique se
IAM_USER_EMAILfoi adicionado ao cluster como um usuário do banco de dados do IAM, faça login como o usuáriopostgresou comoadmin_usere conceda o papelpsv_userao usuário autenticado pelo IAM:GRANT psv_user TO "IAM_USER_EMAIL";Substitua
IAM_USER_EMAILpelo endereço de e-mail do usuário do IAM.
Verificar a segurança de dados
Para verificar se as visualizações seguras parametrizadas estão restringindo o acesso às visualizações designadas, faça login no banco de dados como o usuário autenticado pelo IAM. No AlloyDB, os usuários do IAM herdam as permissões dos papéis de banco de dados atribuídos a eles.
Faça login no banco de dados como o usuário autenticado pelo IAM.
Verifique se a tabela base não pode ser acessada.
SELECT * FROM store.checked_items; ERROR: permission denied for table checked_itemsAcesse as visualizações seguras parametrizadas usando a função
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'] );Faça login na Google Cloud CLI como
IAM_USER_EMAILexecutandogcloud auth application-default loginpara quegcloud auth application-default print-access-tokengere um token para o usuário restrito do banco de dados do IAM. Em seguida, consulte as visualizações seguras parametrizadas usando o métodoqueryDatacom parâmetros de PSV:curl -X POST \ "https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -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", "table_ids": [ "store.secure_checked_items" ] } } }, "parameterized_secure_view_parameters": { "parameters": [ { "key": "app_end_userid", "value": "303" } ] } }, "generation_options": { "generate_query_result": true, "generate_natural_language_answer": true, "generate_explanation": true } }'Use o campo
table_idsemdatabase_referencepara garantir que oQueryDatagere SQL apenas na visualização segura parametrizadastore.secure_checked_items. Se você omitirtable_idse o papel do banco de dados tiver acessoSELECTna tabela basestore.checked_items,QueryDatapoderá consultar a tabela base diretamente, ignorando a visualização segura. Especifique o nome da visualização qualificada pelo esquema, porque os nomes não qualificados emtable_idsusam o esquemapublicpor padrão.Substitua:
PROJECT_ID: o ID do projeto Google Cloud .REGION: a região em que a instância do AlloyDB para PostgreSQL está localizada.CLUSTER_ID: o ID do cluster do AlloyDB para PostgreSQL.INSTANCE_ID: o ID da instância do AlloyDB para PostgreSQL.DATABASE_ID: o ID do banco de dados do AlloyDB para PostgreSQL, que édatabaseneste tutorial.
Limpar
excluir o cluster
Quando você exclui o cluster criado na seção Antes de começar, todos os objetos criados também são excluídos.
No console do Google Cloud , acesse a página do AlloyDB.
Selecione um cluster na lista.
Clique em Excluir cluster.
Em Excluir cluster, insira o nome do cluster para confirmar que você quer excluí-lo.
A seguir
- Saiba mais sobre as visualizações seguras parametrizadas.
Saiba como gerenciar a segurança de dados de aplicativos usando visualizações seguras parametrizadas.