Tutorial ini menunjukkan cara membuat layanan pemungutan suara yang terdiri dari:
Klien berbasis browser yang:
- Menggunakan Identity Platform untuk mengambil token ID.
- Memungkinkan pengguna untuk memilih hewan domestik favorit mereka.
- Menambahkan token ID untuk permintaan ke server Cloud Run yang memproses suara.
Server Cloud Run yang:
- Periksa untuk memastikan pengguna akhir sudah diautentikasi secara benar dengan memberikan token ID yang valid.
- Memproses suara pengguna akhir.
- Dengan menggunakan kredensialnya sendiri, mengirim suara ke Cloud SQL untuk disimpan.
Database PostgreSQL yang menyimpan suara.
Agar mudah, tutorial ini menggunakan Google sebagai penyedia: pengguna harus melakukan autentikasi menggunakan akun Google untuk mendapatkan token ID mereka. Namun, Anda dapat menggunakan penyedia atau metode autentikasi lain untuk memasukkan pengguna.
Layanan ini meminimalkan risiko keamanan dengan menggunakanSecret Manager untuk melindungi data sensitif yang digunakan untuk terhubung ke instance Cloud SQL. Opsi ini juga digunakan pada identity layanan dengan hak istimewa terendah untuk akses yang aman ke database.
Tujuan
Tulis, build, dan deploy ke Cloud Run yang menunjukkan cara:
Gunakan Identity Platform untuk mengautentikasi pengguna akhir ke backend layanan Cloud Run.
Buat identity hak istimewa terendah pada layanan untuk memberikan akses pada resource Google Cloud.
Gunakan Secret Manager untuk menangani data sensitif ketika dihubungkan dengan layanan Cloud Run ke database postgreSQL .
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Secret Manager, Cloud SQL, Artifact Registry, and Cloud Build APIs.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Administrator Repositori Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Cloud SQL Admin (
roles/cloudsql.admin
) -
Buat Akun Layanan (
roles/iam.serviceAccountCreator
) -
Identity Platform Admin (
roles/identityplatform.admin
) -
OAuth Config Editor (
roles/oauthconfig.editor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Secret Manager Admin (
roles/secretmanager.admin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Pelanggan Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Storage Admin (
roles/storage.admin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan default gcloud
Untuk mengonfigurasi gcloud dengan setelan default untuk layanan Cloud Run Anda:
Setel project default Anda:
gcloud config set project PROJECT_ID
Ganti PROJECT_ID dengan nama project yang Anda buat untuk tutorial ini.
Konfigurasi gcloud untuk region yang Anda pilih:
gcloud config set run/region REGION
Ganti REGION dengan region Cloud Run pilihan Anda yang didukung.
Lokasi Cloud Run
Cloud Run bersifat regional, berarti infrastruktur yang
menjalankan layanan Cloud Run Anda terletak di region tertentu dan
dikelola oleh Google agar tersedia secara redundan di
semua zona dalam region tersebut.
Memenuhi persyaratan latensi, ketersediaan, atau ketahanan adalah faktor utama
untuk memilih region tempat layanan Cloud Run dijalankan.
Pada umumnya, Anda dapat memilih region yang paling dekat dengan pengguna Anda, tetapi Anda harus mempertimbangkan
lokasi dari produk Google Cloud
lain yang digunakan oleh layanan Cloud Run Anda.
Menggunakan produk Google Cloud secara bersamaan di beberapa lokasi dapat memengaruhi
latensi serta biaya layanan Anda.
Cloud Run tersedia di region berikut:
Tergantung harga Tingkat 1
asia-east1
(Taiwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)asia-south1
(Mumbai, India)europe-north1
(Finlandia) CO2 Rendaheurope-southwest1
(Madrid) CO2 Rendaheurope-west1
(Belgia) CO2 Rendaheurope-west4
(Belanda) CO2 Rendaheurope-west8
(Milan)europe-west9
(Paris) CO2 Rendahme-west1
(Tel Aviv)us-central1
(Iowa) CO2 Rendahus-east1
(South Carolina)us-east4
(North Virginia)us-east5
(Columbus)us-south1
(Dallas) CO2 Rendahus-west1
(Oregon) CO2 Rendah
Tergantung harga Tingkat 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Seoul, Korea Selatan)asia-southeast1
(Singapura)asia-southeast2
(Jakarta)asia-south2
(Delhi, India)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Warsawa, Polandia)europe-west10
(Berlin) CO2 Rendaheurope-west12
(Turin)europe-west2
(London, Inggris Raya) CO2 Rendaheurope-west3
(Frankfurt, Jerman) CO2 Rendaheurope-west6
(Zurich, Swiss) CO2 Rendahme-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal) CO2 Rendahnorthamerica-northeast2
(Toronto) CO2 Rendahsouthamerica-east1
(São Paulo, Brasil) CO2 Rendahsouthamerica-west1
(Santiago, Cile) CO2 Rendahus-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Jika sudah membuat layanan Cloud Run, Anda dapat melihat region di dasbor Cloud Run di Konsol Google Cloud.
Mengambil contoh kode
Untuk mengambil contoh kode agar dapat digunakan:
Clone repositori aplikasi contoh ke komputer lokal Anda:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sebagai alternatif, anda dapat mendownload contoh seperti file zip dan mengekstraknya.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Ubah ke direktori yang memuat kode contoh Cloud Run:
Node.js
cd nodejs-docs-samples/run/idp-sql/
Python
cd python-docs-samples/run/idp-sql/
Java
cd java-docs-samples/run/idp-sql/
Memvisualisasikan arsitektur
Pengguna akhir membuat permintaan pertama untuk server Cloud Run.
Beban klien pada browser.
Pengguna memberikan kredensial login melalui dialog login dengan Google dari Identity Platform. Pemberitahuan menyambut pengguna yang login.
Kontrol dialihkan kembali ke server. Pengguna akhir memberi suara menggunakan klien, yang memberikan token ID dari Identity Platform dan menambahkannya pada header permintaan suara.
Saat server menerima permintaan, server akan memverifikasi token ID Identity Platform, mengonfirmasi bahwa pengguna akhir telah diauntentikasi secara benar. Kemudian server mengirimkan suara ke Cloud SQL menggunakan kredensialnya sendiri.
Memahami kode inti
Contoh ini diimplementasikan sebagai klien dan server, seperti yang dijelaskan berikut.
Mengintegrasikan dengan Identity Platform: kode sisi klien
Contoh ini menggunakan Firebase SDKs untuk diintegrasikan dengan Identity Platform guna login dan mengelola pengguna. Untuk terhubung ke Identity Platform, JavaScript sisi klien menyimpan referensi ke kredensial project sebagai objek konfigurasi mengimpor Firebase JavaScript SDKsyang dibutuhkan:
Firebase JavaScript SDK menangani alur login dengan meminta pengguna akhir login ke Akun Google mereka melalui jendela pop-up. Kemudian mereka akan diarahkan kembali ke layanan.
Saat pengguna berhasil login, klien akan menggunakan metode Firebase untuk membuat
token ID. Klien menambahkan token ID ke Authorization
header permintaannya
ke server.
Mengintegrasikan dengan Identity Platform: kode sisi server
Server menggunakan Firebase Admin SDK
untuk memverifikasi token ID pengguna yang dikirim dari klien. Jika token ID yang diberikan
memiliki format yang benar, masa berlakunya belum habis, dan ditandatangani dengan benar,
metode tersebut akan menampilkan token ID yang didekode. Server mengekstrak Identity Platform uid
untuk penggunanya.
Node.js
Python
Java
Menghubungkan server ke Cloud SQL
Server terhubung dengan soket domain Unix Instance Cloud SQL menggunakan
format: /cloudsql/CLOUD_SQL_CONNECTION_NAME
.
Node.js
Python
Java
Gunakan integrasi starter Spring Cloud Google Cloud PostgreSQL untuk berinteraksi dengan database PostgreSQL Anda di Cloud SQL menggunakan library Spring JDBC. Setel konfigurasi Cloud SQL untuk MySQL ke konfigurasi beanDataSource
secara otomatis, yang digabungkan dengan Spring JDBC, yang menyediakan JdbcTemplate
objek bean yang memungkinkan untuk operasi seperti melakukan kueri dan perubahan pada database.
Menangani konfigurasi sensitif dengan Secret Manager
Secret Manager menyediakan penyimpanan data sensitif yang terpusat dan aman, seperti konfigurasi Cloud SQL. Server memasukkan kredensial Cloud SQL dari Secret Manager saat runtime melalui variabel lingkungan. Pelajari lebih lanjut tentang Using Secret dengan Cloud Run.
Node.js
Python
Java
Menyiapkan Identity Platform
Identity Platform memerlukan penyiapan manual di Konsol Google Cloud.
Buka halaman Identity Platform Marketplace di Konsol Google Cloud.
Klik Aktifkan Identity Platform.
Buat Layar persetujuan OAuth Anda:
Di jendela baru, buka halaman API & Layanan > Kredensial
Buka halaman API & Layanan > Kredensial.
Pilih halaman OAuth consent screen.
Untuk tujuan pengujian, pilih Eksternal.
Klik Buat.
Dalam dialog Informasi aplikasi,
- Berikan nama aplikasi.
- Pilih salah satu email dukungan pengguna yang ditampilkan.
- Masukkan email yang ingin Anda gunakan untuk kontak developer.
Klik Save and Continue.
Pada dialog Cakupan, klik Simpan dan Lanjutkan.
Pada dialog Pengguna pengujian, klik Simpan dan Lanjutkan.
Pada dialog Summary, klik Back to Dashboard.
Di bagian Status publikasi, klik Publikasikan Aplikasi.
Klik Konfirmasi.
Buat serta dapatkan Secret dan Client ID Klien OAuth Anda:
Buka halaman API & Layanan > Kredensial.
Di bagian atas halaman, klik Buat Kredensial dan pilih
OAuth client ID
.Dari Jenis Aplikasi, pilih Aplikasi Web, dan beri nama.
Klik Buat
Perhatikan
client_id
danclient_secret
untuk digunakan nanti dalam prosedur ini.
Konfigurasi Google sebagai penyedia:
Buka halaman Penyedia Identitas di Cloud Console.
Klik Tambahkan Penyedia.
Pilih Google dari daftar.
Di setelan Konfigurasi Web SDK, masukkan nilai
client_id
danclient_secret
dari langkah sebelumnya.Di bagian bawah Konfigurasi aplikasi Anda, klik Detail Penyiapan.
Salin nilai
apiKey
danauthDomain
ke dalam contohstatic/config.js
untuk melakukan inisialisasi SDK Klien Identity Platform.Klik Simpan.
Men-deploy layanan
Ikuti langkah-langkah di bawah ini untuk menyelesaikan penyediaan dan deployment infrastruktur atau mengotomatisasi proses di Cloud Shell dengan mengklik "Jalankan di Google Cloud":
Buat instance Cloud SQL dengan database postgreSQL menggunakan Konsol atau CLI:
gcloud sql instances create CLOUD_SQL_INSTANCE_NAME \ --database-version=POSTGRES_12 \ --region=CLOUD_SQL_REGION \ --cpu=2 \ --memory=7680MB \ --root-password=DB_PASSWORD
Tambahkan nilai kredensial Cloud SQL Anda ke
postgres-secrets.json
:Node.js
Python
Java
Buat secret yang diberi versi menggunakan Konsol atau CLI:
gcloud secrets create idp-sql-secrets \ --replication-policy="automatic" \ --data-file=postgres-secrets.json
Buat akun layanan untuk server menggunakan Konsol atau CLI:
gcloud iam service-accounts create idp-sql-identity
Berikan peran untuk akses Secret Manager dan Cloud SQL menggunakan Konsol atau CLI:
Izinkan akun layanan yang terkait dengan server mengakses secret yang dibuat:
gcloud secrets add-iam-policy-binding idp-sql-secrets \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Izinkan akun layanan yang terkait dengan server untuk mengakses Cloud SQL:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client
Buat Artifact Registry:
gcloud artifacts repositories create REPOSITORY \ --repository-format docker \ --location REGION
REPOSITORY
adalah nama repositori. Untuk setiap lokasi repositori dalam project, nama repositori harus unik.
Build image container menggunakan Cloud Build:
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Java
Contoh ini menggunakan Jib untuk mem-build image Docker menggunakan alat Java umum. Jib mengoptimalkan build container tanpa memerlukan Dockerfile atau menginstal Docker. Pelajari lebih lanjut cara mem-build container Java dengan Jib.
Gunakan helper kredensial gcloud untuk memberi otorisasi Docker agar dikirim ke Artifact Registry Anda.
gcloud auth configure-docker
Gunakan Plugin Maven Jib untuk mem-build dan mengirim container ke Artifact Registry.
mvn compile jib:build -Dimage=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql
Deploy image container ke Cloud Run menggunakan konsol atau CLI. Perlu diingat bahwa server di-deploy untuk mengizinkan akses yang tidak diautentikasi. Hal ini dilakukan agar pengguna dapat memuat klien dan memulai prosesnya. Server memverifikasi token ID yang ditambahkan ke permintaan suara secara manual, sehingga mengautentikasi pengguna akhir.
gcloud run deploy idp-sql \ --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/idp-sql \ --allow-unauthenticated \ --service-account idp-sql-identity@PROJECT_ID.iam.gserviceaccount.com \ --add-cloudsql-instances PROJECT_ID:REGION:CLOUD_SQL_INSTANCE_NAME \ --update-secrets CLOUD_SQL_CREDENTIALS_SECRET=idp-sql-secrets:latest
Perhatikan juga penanda,
--service-account
,--add-cloudsql-instances
, dan--update-secrets
, yang menentukan identitas layanan, koneksi instance Cloud SQL, dan nama secret dengan versi sebagai variabel lingkungan, yang tidak responsif.
Sentuhan akhir
Identity Platform mengharuskan Anda melakukan otorisasi URL layanan Cloud Run sebagai pengalihan yang diizinkan setelah pengguna login:
Edit penyedia Google dengan mengklik ikon pena di halaman Penyedia Identitas.
Klik Add Domain di bagian Authorized Domains di panel kanan, dan masukkan URL layanan Cloud Run.
Anda dapat menemukan URL layanan di log setelah buil atau deployment, atau Anda dapat menemukannya kapan saja menggunakan:
gcloud run services describe idp-sql --format 'value(status.url)'
Buka halaman API & Layanan > Kredensial.
Klik ikon pensil di samping Client ID OAuth Anda untuk mengeditnya, lalu di bawah tombol
Authorized redirect URIs click the
Add URI.Dalam kolom, salin dan tempel URL berikut, lalu klik tombol Simpan di bagian bawah halaman.
https://PROJECT_ID.firebaseapp.com/__/auth/handler
Melakukan Percobaan
Untuk mencoba layanan lengkap:
Buka browser Anda ke URL yang diberikan pada langkah deployment di atas.
Klik tombol Login dengan Google dan ikuti alur autentikasi.
Tambahkan suara Anda!
Kodenya akan terlihat seperti berikut:
Jika Anda memilih untuk terus mengembangkan layanan ini, perlu diingat bahwa layanan tersebut telah membatasi akses Identity and Access Management (IAM) ke bagian lain dari Google Cloud dan perlu diberi peran IAM tambahan guna mengakses banyak layanan lainnya.
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa ada perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE-NAME
Dengan SERVICE-NAME adalah nama layanan pilihan Anda.
Anda juga dapat menghapus layanan Cloud Run dari Konsol Google Cloud.
Hapus konfigurasi region default gcloud yang Anda tambahkan selama penyiapan tutorial:
gcloud config unset run/region
Hapus konfigurasi project:
gcloud config unset project
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
Langkah berikutnya
- Pelajari lebih dalam Menghubungkan dari Cloud Run ke Cloud SQL
- Pelajari lebih lanjut metode login dan mengelola pengguna dengan Identity Platform
- Tinjau cara lain untuk mengautentikasi developer, layanan, dan pengguna layanan yang di-deploy ke Cloud Run
- Pelajari demo, tutorial, dan contoh Cloud Run lainnya