Le viste sicure parametrizzate forniscono alle applicazioni la sicurezza dei dati e controllo dell'accesso alle righe. Filtrano i risultati delle query in base all'identità dell'utente dell'applicazione.
Questo tutorial descrive come configurare viste sicure parametrizzate in Cloud SQL, configurare i ruoli e i privilegi del database per limitare l'accesso alle tabelle di base e verificare la sicurezza dei dati. Gli esempi forniti in questo documento sono solo a scopo dimostrativo.
Che cosa sono le viste sicure parametrizzate?
Come best practice generale, l'applicazione deve essere eseguita utilizzando un account di servizio con l'accesso minimo richiesto al database. Ad esempio, se la tua applicazione non deve scrivere nel database, deve utilizzare un ruolo con accesso di sola lettura. Devi configurare questi controlli degli accessi a livello di database.
Quando la tua applicazione richiede una sicurezza più granulare di quella consentita dall'accesso standard a livello di database, puoi utilizzare le viste protette parametrizzate per assicurarti che gli utenti visualizzino solo i dati autorizzati. Le viste sicure parametrizzate forniscono sicurezza dei dati dinamica e controllo dell'accesso alle righe adatto per applicazioni SaaS multi-tenant senza richiedere ruoli di database separati per ogni utente finale dell'applicazione.
L'utilizzo di viste sicure parametrizzate offre tre vantaggi principali:
- Sicurezza dei dati dinamica e controllo dell'accesso alle righe: filtra le query utilizzando gli identificatori degli utenti finali in modo che gli utenti accedano solo ai dati autorizzati, indipendentemente dalla formulazione della query.
- Gestione dei ruoli più semplice: utilizza un unico ruolo di database condiviso per tutti gli utenti dell'applicazione anziché gestire ruoli di database separati per ogni singolo utente.
Obiettivi
- Crea viste sicure parametrizzate con parametri di visualizzazione denominati.
- Crea il ruolo del database utilizzato dall'applicazione per connettersi al database e accedere alle viste sicure con parametri.
- Concedi le autorizzazioni del nuovo ruolo alle viste sicure parametrizzate e revoca l'accesso alle tabelle di base.
- Connettiti utilizzando il nuovo ruolo e verifica che non sia possibile accedere alle tabelle con limitazioni.
- Esegui query sulle viste sicure con parametri utilizzando la funzione
execute_parameterized_query()o l'API QueryData.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.
I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.
Per evitare l'addebito di ulteriori costi, elimina le risorse create al termine delle attività descritte in questo documento. Per ulteriori informazioni, consulta Esegui la pulizia.
Prima di iniziare
Prima di creare viste sicure parametrizzate, completa i seguenti prerequisiti.
Abilita la fatturazione e le API richieste
Nella console Google Cloud , seleziona un progetto.
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Cloud necessarie per creare e connetterti a Cloud SQL.
Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.
Nel passaggio Abilita API, fai clic su Abilita per abilitare quanto segue:
- API Cloud SQL per PostgreSQL
- API Knowledge Catalog
- API Data Analytics con Gemini (
geminidataanalytics.googleapis.com)
Creare e connettersi a un database
- Crea un'istanza.
- Connettiti all'istanza e crea un database.
Abilita l'API Cloud SQL Data sull'istanza Cloud SQL per PostgreSQL in modo che l'API
QueryDatapossa eseguire query su di essa:gcloud sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --data-api-access=ALLOW_DATA_APISostituisci quanto segue:
INSTANCE_ID: l'ID dell'istanza Cloud SQL per PostgreSQL.PROJECT_ID: il tuo ID progetto Google Cloud .
Concedi i ruoli richiesti e crea un utente del database IAM
Per eseguire l'autenticazione con Identity and Access Management (IAM) ed eseguire richieste queryData su viste sicure parametrizzate, configura l'utente o il account di servizio IAM:
Concedi i seguenti ruoli IAM a
IAM_USER_EMAILnel tuo progetto Google Cloud :roles/geminidataanalytics.queryDataUserroles/serviceusage.serviceUsageConsumerroles/cloudsql.instanceUser
Per saperne di più sulla concessione dei ruoli IAM, consulta Aggiungi l'associazione della policy IAM per un progetto.
Abilita l'autenticazione del database IAM sulla tua istanza Cloud SQL e aggiungi
IAM_USER_EMAILcome utente del database IAM nell'istanza. Devi creare questo utente del database IAM prima di concedergli il ruolo databasepsv_user. Per saperne di più sulla configurazione degli utenti del database IAM, consulta Gestisci gli utenti con l'autenticazione IAM del database.
prepara l'ambiente
Per prepararti a eseguire query su una vista sicura con parametri, configura il database, i ruoli del database, l'estensione parameterized_views e lo schema dell'applicazione.
Abilita il flag di database
Attiva il flag di databasecloudsql.enable_parameterized_views, che carica le librerie di estensioni richieste. Per saperne di più, consulta Configura i flag di database di un'istanza.
Configura il database
- Crea un database denominato
databaseper i dati dell'applicazione e le viste sicure parametrizzate. Per saperne di più, consulta Crea un database.
Crea i ruoli del database, l'estensione e lo schema dell'applicazione
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio utilizzando l'autenticazione dell'account amministratore.
Fai clic su Authenticate (Autentica). Il riquadro Explorer mostra un elenco degli oggetti nel database.
Fai clic su Nuova scheda dell'editor SQL o su Nuova scheda per aprire una nuova scheda.
Per utilizzare le viste parametrizzate, crea l'estensione
parameterized_viewsnel tuo database:-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;Quando viene creata l'estensione, il database crea anche uno schema denominato
parameterized_viewsin modo che le API siano contenute nello spazio dei nomi dello schema e non entrino in conflitto con le API esistenti.Accedi come utente con privilegi di super utente, ad esempio l'utente
postgresintegrato.Crea un nuovo ruolo del database per eseguire query su viste protette parametrizzate. Questo è un ruolo Cloud SQL utilizzato dall'applicazione per connettersi e accedere al database per eseguire query con accesso limitato a funzioni o oggetti pubblici al set minimo richiesto.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';Per saperne di più, vedi
CREATE USER.Connettiti come utente amministrativo.
SET role TO postgres;Crea lo schema che contiene le tabelle.
CREATE SCHEMA store;Crea le tabelle e inserisci i dati.
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 viste sicure parametrizzate e configura i privilegi di accesso
Per creare viste sicure parametrizzate e configurare i privilegi di accesso appropriati per la tabella di base e le viste, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio e connettiti al database denominato
databasecome utentepostgres.Fai clic su Authenticate (Autentica). Il riquadro Explorer mostra un elenco degli oggetti nel database.
Fai clic su Nuova scheda dell'editor SQL o su Nuova scheda per aprire una nuova scheda.
Per fornire un accesso limitato alla vista, crea una vista parametrizzata:
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;Concedi l'accesso alla vista.
GRANT SELECT ON store.secure_checked_items TO psv_user;Per accedere alla vista, concedi l'accesso allo schema.
GRANT USAGE ON SCHEMA store TO psv_user;Revocare l'accesso diretto alla tabella di base.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;SELECTInoltre, l'utente della vista con parametri deve disporre diUSAGEsullo schema della vista e diSELECTsulla vista. Ad esempio, l'utentepostgresè proprietario della vista parametrizzata, quindi dispone dei privilegiSELECTsulle tabelle di base, mentrepsv_userdeve disporre diUSAGEsullo schemastoree diSELECTsulla vista.Assicurati che
IAM_USER_EMAILsia stato aggiunto all'istanza come utente del database IAM, accedi come utentepostgrese concedi il ruolopsv_userall'utente autenticato IAM:GRANT psv_user TO "IAM_USER_EMAIL";Sostituisci
IAM_USER_EMAILcon l'indirizzo email del tuo utente IAM.
Verifica la sicurezza dei dati
Per verificare che le viste sicure parametrizzate limitino l'accesso alle viste designate, accedi al database come utente autenticato con IAM. In Cloud SQL, gli utenti IAM ereditano le autorizzazioni dei ruoli del database assegnati.
Accedi al database come utente autenticato con IAM.
Verifica che non sia possibile accedere alla tabella di base.
SELECT * FROM store.checked_items; ERROR: permission denied for table checked_itemsAccedi alle viste protette parametrizzate utilizzando la funzione
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'] );Accedi a Google Cloud CLI come
IAM_USER_EMAILeseguendogcloud auth application-default loginin modo chegcloud auth application-default print-access-tokengeneri un token per l'utente database IAM con limitazioni, quindi esegui una query sulle viste sicure parametrizzate utilizzando il metodoqueryDatacon i parametri 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": { "cloud_sql_reference": { "database_reference": { "engine": "POSTGRESQL", "project_id": "PROJECT_ID", "region": "REGION", "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 } }'Utilizza il campo
table_idsindatabase_referenceper assicurarti cheQueryDatageneri SQL solo per la vista sicura con parametristore.secure_checked_items. Se omettitable_idse il ruolo del database ha accessoSELECTalla tabella di basestore.checked_items,QueryDatapotrebbe eseguire query direttamente sulla tabella di base, ignorando la vista sicura. Specifica il nome della vista qualificato per lo schema, perché i nomi non qualificati intable_idsvengono impostati per impostazione predefinita sullo schemapublic.Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto Google Cloud .REGION: la regione in cui si trova l'istanza Cloud SQL per PostgreSQL.INSTANCE_ID: l'ID dell'istanza Cloud SQL per PostgreSQL.DATABASE_ID: l'ID del tuo database Cloud SQL per PostgreSQL, che in questo tutorial èdatabase.
Esegui la pulizia
Elimina l'istanza
Quando elimini l'istanza che hai creato nella sezione Prima di iniziare, elimini anche tutti gli oggetti che hai creato.
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Fai clic su Elimina.
Conferma di voler eliminare l'istanza inserendo il nome dell'istanza e facendo clic su Elimina.
Passaggi successivi
Scopri di più sulle viste sicure parametrizzate.
Scopri come utilizzare le viste sicure parametrizzate.