Le viste sicure con parametri forniscono sicurezza dei dati a livello di riga e controllo dell'accesso filtrando i risultati delle query in base all'identità dell'utente dell'applicazione.
Questo tutorial descrive come configurare le viste sicure con parametri 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 con parametri?
Come best practice generale, l'applicazione deve essere eseguita utilizzando un account di servizio con l'accesso minimo richiesto al database. Ad esempio, se l'applicazione non deve scrivere nel database, deve utilizzare un ruolo con accesso di sola lettura. Devi configurare questi controlli dell'accesso a livello di database.
Quando l'applicazione richiede una sicurezza più granulare rispetto a quella consentita dall'accesso standard a livello di database, puoi utilizzare le viste sicure con parametri per assicurarti che gli utenti visualizzino solo i dati autorizzati.
L'utilizzo di viste sicure con parametri offre due vantaggi principali:
- Sicurezza dinamica a livello di riga: 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 semplificata: utilizza un singolo ruolo di database condiviso per tutti gli utenti dell'applicazione anziché gestire ruoli di database separati per ogni singolo utente.
Obiettivi
- Crea viste sicure con parametri con parametri di visualizzazione denominati.
- Crea il ruolo di database utilizzato dall'applicazione per connettersi al database e accedere alle viste sicure con parametri.
- Concedi le autorizzazioni del nuovo ruolo alle viste sicure con parametri 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 Google Cloud utenti potrebbero avere diritto a una prova senza costi.
Per evitare l'addebito di ulteriori costi, elimina le risorse che hai creato al termine delle attività descritte in questo documento. Per ulteriori informazioni, consulta Liberare spazio.
Prima di iniziare
Prima di creare viste sicure con parametri, completa i seguenti prerequisiti.
Abilita fatturazione e API richieste
Nellaconsole, seleziona un progetto. Google Cloud
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
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 le seguenti API:
- API Cloud SQL per PostgreSQL
- API Knowledge Catalog
Creare e connettersi a un 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
Abilita il flag di databasecloudsql.enable_parameterized_views, che carica le librerie di estensioni richieste. Per ulteriori informazioni, consulta Configurare i flag di database di un'istanza.
Configura il database
- Crea un database denominato
databaseper i dati dell'applicazione e le viste sicure con parametri. Per ulteriori informazioni, consulta Creare un database.
Crea ruoli di database, l'estensione e lo schema dell'applicazione
Nella Google Cloud console, 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 postgres.
Fai clic su Authenticate (Autentica). Il riquadro Explorer mostra un elenco degli oggetti nel database.
Fai clic su Nuova scheda dell'editor SQL o Nuova scheda per aprire una nuova scheda.
Per utilizzare le viste con parametri, crea l'estensione
parameterized_viewsnel 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 superutente, ad esempio l'utente
postgresintegrato.Crea un nuovo ruolo di database per l'esecuzione di query sulle viste sicure con parametri. Si tratta di un ruolo Cloud SQL che l'applicazione utilizza per connettersi e accedere al database per eseguire query con accesso limitato alle funzioni o agli oggetti pubblici al set minimo richiesto.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';Per ulteriori informazioni, consulta
CREATE USER.Connettiti come utente amministrativo.
SET role TO postgres;Crea lo schema contenente 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 con parametri e configura i privilegi di accesso
Per creare viste sicure con parametri e configurare i privilegi di accesso appropriati per la tabella e le viste di base:
Nella Google Cloud console, 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
databasecomepostgres.Fai clic su Authenticate (Autentica). Il riquadro Explorer mostra un elenco degli oggetti nel database.
Fai clic su Nuova scheda dell'editor SQL o Nuova scheda per aprire una nuova scheda.
Per fornire un accesso limitato alla vista, crea una vista con parametri:
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;Revoca l'accesso diretto alla tabella di base.
REVOKE ALL PRIVILEGES ON store.checked_items FROM psv_user;Nota: il proprietario della vista con parametri deve disporre dei privilegi
SELECTsulle tabelle di base. Inoltre, l'utente della vista con parametri deve disporre diUSAGEnello schema della vista eSELECTnella vista. Ad esempio, l'utentepostgresè il proprietario della vista con parametri, quindi dispone dei privilegiSELECTsulle tabelle di base, mentre l'utentepsv_userdeve disporre diUSAGEnello schemastoreeSELECTnella vista.Accedi come amministratore
postgrese assegna il ruolopsv_usera un utente autenticato con IAM:GRANT psv_user TO "IAM_USER_EMAIL";Sostituisci
IAM_USER_EMAILcon l'indirizzo email dell'utente IAM.
Verifica la sicurezza dei dati
Per verificare che le viste sicure con parametri 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 di 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 sicure con parametri 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'] );Esegui query sulle viste sicure con parametri utilizzando la sintassi SQL e la richiesta
QueryDatacon i parametri 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": { "cloud_sql_reference": { "database_reference": { "engine": "POSTGRESQL", "project_id": "PROJECT_ID", "region": "REGION", "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 } }'Sostituisci i seguenti valori:
PROJECT_ID: l' Google Cloud ID progetto.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 database Cloud SQL per PostgreSQL.
Libera spazio
Elimina il cluster
Quando elimini il cluster che hai creato nella sezione Prima di iniziare, elimini anche tutti gli oggetti che hai creato.
Nella Google Cloud console, 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.