Tampilan aman berparameter memberikan keamanan data dan kontrol akses baris ke aplikasi. Aturan ini memfilter hasil kueri berdasarkan identitas pengguna aplikasi.
Tutorial ini menjelaskan cara menyiapkan tampilan aman berparameter di Cloud SQL, mengonfigurasi peran dan hak istimewa database untuk membatasi akses ke tabel dasar, serta memverifikasi keamanan data. Contoh yang diberikan dalam dokumen ini hanya untuk tujuan demonstrasi.
Apa yang dimaksud dengan tampilan aman berparameter?
Sebagai praktik terbaik umum, aplikasi Anda harus berjalan menggunakan akun layanan dengan akses minimum yang diperlukan ke database Anda. Misalnya, jika aplikasi Anda tidak boleh menulis ke database, aplikasi tersebut harus menggunakan peran dengan akses hanya baca. Anda harus mengonfigurasi kontrol akses ini di tingkat database.
Jika aplikasi Anda memerlukan keamanan yang lebih terperinci daripada izin akses tingkat database standar, Anda dapat menggunakan tampilan aman berparameter untuk memastikan bahwa pengguna hanya melihat data yang diizinkan. Tampilan aman berparameter memberikan keamanan data dinamis dan kontrol akses baris yang sesuai untuk aplikasi SaaS multi-tenant tanpa memerlukan peran database terpisah untuk setiap pengguna akhir aplikasi.
Penggunaan tampilan aman berparameter memberikan tiga manfaat utama:
- Keamanan data dinamis dan kontrol akses baris: Memfilter kueri menggunakan ID pengguna akhir sehingga pengguna hanya mengakses data yang diizinkan, terlepas dari susunan kata kueri.
- Pengelolaan peran yang lebih mudah: Menggunakan satu peran database bersama untuk semua pengguna aplikasi, bukan mengelola peran database terpisah untuk setiap individu.
Tujuan
- Membuat tampilan aman berparameter dengan parameter tampilan bernama.
- Buat peran database yang digunakan oleh aplikasi untuk terhubung ke database dan mengakses tampilan aman berparameter.
- Berikan izin peran baru ke tampilan aman berparameter dan cabut akses ke tabel dasar.
- Hubungkan menggunakan peran baru dan verifikasi bahwa tabel yang dibatasi tidak dapat diakses.
- Jalankan kueri pada tampilan berparameter menggunakan prosedur tersimpan
mysql.execute_parameterized_queryatau menggunakan QueryData API.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.
Untuk menghindari penagihan berkelanjutan, hapus resource yang Anda buat setelah menyelesaikan tugas dalam dokumen ini. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Sebelum Anda membuat tampilan aman berparameter, selesaikan prasyarat berikut.
Mengaktifkan penagihan dan API yang diperlukan
Di konsol Google Cloud , pilih project.
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Cloud API yang diperlukan untuk membuat dan terhubung ke Cloud SQL.
Pada langkah Confirm project, klik Next untuk mengonfirmasi nama project yang akan Anda ubah.
Pada langkah Enable APIs, klik Enable untuk mengaktifkan hal berikut:
- Cloud SQL for MySQL API
- Knowledge Catalog API
- Data Analytics API with Gemini (
geminidataanalytics.googleapis.com)
Membuat dan menghubungkan ke database
- Membuat instance.
- Menghubungkan ke instance dan membuat database.
Aktifkan Cloud SQL Data API di instance Cloud SQL untuk MySQL agar
QueryDataAPI dapat menjalankan kueri terhadapnya:gcloud sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --data-api-access=ALLOW_DATA_APIGanti kode berikut:
INSTANCE_ID: ID instance Cloud SQL untuk MySQL Anda.PROJECT_ID: Project ID Google Cloud Anda.
Memberikan peran yang diperlukan dan membuat pengguna database IAM
Untuk melakukan autentikasi dengan Identity and Access Management (IAM) dan menjalankan permintaan queryData terhadap tampilan aman berparameter, konfigurasikan pengguna atau akun layanan IAM:
Berikan peran IAM berikut ke
IAM_USER_EMAILdi project Google Cloud Anda:roles/geminidataanalytics.queryDataUserroles/serviceusage.serviceUsageConsumerroles/cloudsql.instanceUser
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, lihat Menambahkan binding kebijakan IAM untuk project.
Aktifkan autentikasi database IAM di instance Cloud SQL Anda dan tambahkan
IAM_USER_EMAILsebagai pengguna database IAM di instance tersebut. Anda harus membuat pengguna database IAM ini sebelum memberikan peran databasepsv_userkepadanya. Untuk mengetahui informasi selengkapnya tentang cara menyiapkan pengguna database IAM, lihat Mengelola pengguna dengan autentikasi database IAM.
Menyiapkan lingkungan Anda
Untuk mempersiapkan menjalankan kueri pada tampilan aman berparameter, siapkan database, peran database, dan skema aplikasi.
Mengaktifkan flag database
- Pastikan instance Cloud SQL untuk MySQL Anda menjalankan Cloud SQL untuk MySQL 8.0.43 atau yang lebih baru. Jika instance Cloud SQL untuk MySQL 8.0 Anda menjalankan versi minor yang lebih lama, Anda dapat melakukan upgrade versi minor.
- Aktifkan flag database
cloudsql_parameterized_secure_viewuntuk instance Anda. Perubahan flag ini tidak memerlukan mulai ulang database. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database instance.
Menyiapkan database dan peran
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan akun pengguna administratif.
Klik Authenticate. Panel Explorer menampilkan daftar objek dalam database Anda.
Klik New SQL editor tab atau New tab untuk membuka tab baru.
Buat database bernama
store_dbuntuk data dan tampilan aplikasi:CREATE DATABASE IF NOT EXISTS store_db; USE store_db;Buat peran database baru untuk menjalankan kueri terhadap tampilan berparameter. Aplikasi menggunakan peran ini untuk terhubung ke database dan menjalankan kueri dengan akses yang dibatasi hanya untuk tampilan yang diizinkan:
CREATE ROLE 'psv_user';
Membuat tabel dan menyisipkan data
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance Cloud SQL untuk MySQL dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan autentikasi database.
Klik New tab untuk membuka tab editor SQL baru.
Buat tabel dan sisipkan data:
CREATE TABLE store_db.checked_items ( bag_id INT, timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT ); INSERT INTO store_db.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);
Membuat tampilan aman berparameter dan menyiapkan hak istimewa akses
Untuk membuat tampilan aman berparameter, ikuti langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio dan hubungkan ke database
store_dbsebagai akun pengguna administratif, sepertirootatauADMIN_USER, yang Anda gunakan di bagian sebelumnya.Klik Authenticate. Panel Explorer menampilkan daftar objek dalam database Anda.
Klik New SQL editor tab atau New tab untuk membuka tab baru.
Untuk memberikan akses terbatas ke tampilan, buat tampilan berparameter:
CREATE VIEW store_db.secure_checked_items AS SELECT bag_id, timestamp, location FROM store_db.checked_items t WHERE customer_id = @app_end_userid;Berikan akses SELECT pada tampilan berparameter ke peran
psv_user:GRANT SELECT ON store_db.secure_checked_items TO 'psv_user';Berikan izin eksekusi pada prosedur tersimpan sistem bawaan yang digunakan untuk menjalankan kueri berparameter dengan aman:
GRANT EXECUTE ON PROCEDURE mysql.execute_parameterized_query TO 'psv_user';Opsional. Cabut secara eksplisit semua hak istimewa langsung pada tabel dasar dari
psv_useruntuk memastikan pengguna tidak dapat mengabaikan tampilan aman:REVOKE ALL PRIVILEGES ON store_db.checked_items FROM 'psv_user';Pastikan
IAM_USER_EMAILtelah ditambahkan ke instance sebagai pengguna database IAM, lalu berikan peranpsv_userke pengguna database yang diautentikasi IAM atau akun login aplikasi:GRANT 'psv_user' TO 'IAM_USERNAME'@'%'; SET DEFAULT ROLE 'psv_user' TO 'IAM_USERNAME'@'%';Ganti
IAM_USERNAMEdengan nama pengguna database IAM atau akun login aplikasi Anda. Untuk akun pengguna IAM, Cloud SQL untuk MySQL menghapus@dan nama domain dari alamat email, jadi tentukan awalan email sebelum@, sepertiuseruntukuser@example.com.
Memverifikasi keamanan data
Untuk memverifikasi bahwa Anda dapat membuat kueri tampilan aman berparameter, ikuti langkah-langkah berikut:
Login ke Cloud SQL Studio menggunakan alamat email IAM atau login aplikasi yang dibatasi.
Klik New tab untuk membuka tab editor SQL baru.
Buat kueri tabel dasar dan pastikan akses ditolak.
SELECT * FROM store_db.checked_items;Database menampilkan error
ERROR 1142 (42000): SELECT command denied to user 'IAM_USERNAME'@'%' for table 'checked_items'.Buat kueri tampilan aman berparameter menggunakan prosedur tersimpan
mysql.execute_parameterized_querybawaan.CALL mysql.execute_parameterized_query( 'SELECT * FROM store_db.secure_checked_items', 'app_end_userid=303' );Login ke Google Cloud CLI sebagai
IAM_USER_EMAILdengan menjalankangcloud auth application-default loginagargcloud auth application-default print-access-tokenmembuat token untuk pengguna database IAM yang dibatasi, lalu buat kueri tampilan aman berparameter menggunakan metodequeryDatadengan parameter 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": "MYSQL", "project_id": "PROJECT_ID", "region": "REGION", "instance_id": "INSTANCE_ID", "database_id": "DATABASE_ID", "table_ids": [ "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 } }'Gunakan kolom
table_idsdidatabase_referenceuntuk memastikanQueryDatahanya membuat SQL terhadap tampilan aman berparametersecure_checked_items. Jika Anda menghilangkantable_idsdan peran database memiliki aksesSELECTpada tabel dasarchecked_items,QueryDatamungkin akan mengkueri tabel dasar secara langsung, sehingga mengabaikan tampilan aman.Ganti kode berikut:
PROJECT_ID: Project ID Google Cloud Anda.REGION: region tempat instance Cloud SQL untuk MySQL Anda berada.INSTANCE_ID: ID instance Cloud SQL untuk MySQL Anda.DATABASE_ID: ID database Cloud SQL untuk MySQL Anda, yaitustore_dbdalam tutorial ini.
Pembersihan
Menghapus instance
Saat menghapus instance yang Anda buat di bagian Sebelum memulai, Anda juga menghapus semua objek yang Anda buat.
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Klik Hapus.
Konfirmasi bahwa Anda ingin menghapus instance dengan memasukkan nama instance dan mengklik Delete.
Langkah berikutnya
Pelajari tampilan aman berparameter.
Pelajari cara menggunakan tampilan aman berparameter.