Dokumen ini menjelaskan cara menyajikan konten statis yang aman dari Cloud Storage menggunakan Cloud Run dan Identity-Aware Proxy.
Cloud Run memungkinkan Anda menghosting server web yang menayangkan konten statis dari bucket Cloud Storage pribadi. Menambahkan IAP membantu Anda mengamankan layanan Cloud Run, mencegah akses yang tidak sah, sekaligus menghindari kebutuhan untuk membangun ulang image container saat konten berubah.
Hosting situs statis Cloud Storage hanya menyajikan konten publik dan memerlukan
pemberian akses baca ke allUsers. Jika organisasi Anda membatasi bucket publik menggunakan
kebijakan seperti pencegahan akses publik atau
berbagi yang dibatasi domain,
fitur hosting situs statis Cloud Storage bawaan tidak tersedia.
Sebagai gantinya, tetap jadikan bucket Anda pribadi, deploy server web NGINX di Cloud Run dengan bucket yang di-mount sebagai volume, dan gunakan IAP untuk mengontrol akses ke layanan Cloud Run.
Sebelum memulai
Untuk menyelesaikan petunjuk dalam dokumen ini, Anda memerlukan hal berikut:
- Project Google Cloud dengan penagihan diaktifkan. Buka konsol Google Cloud
- Bucket Cloud Storage pribadi yang berisi file statis Anda (misalnya,
index.html, CSS, dan gambar). Pastikan bucket tidak bersifat publik. - Google Cloud CLI telah diinstal.
Memberikan akses ke bucket Cloud Storage
Cloud Run memerlukan izin untuk membaca file dari bucket Cloud Storage pribadi Anda. Anda harus memberikan peran Storage Object Viewer (roles/storage.objectViewer) kepada identitas layanan Cloud Run di bucket.
Sebaiknya gunakan akun layanan yang dikelola pengguna untuk layanan Cloud Run, bukan akun layanan Compute Engine default.
Buat akun layanan untuk digunakan sebagai identitas layanan:
gcloud iam service-accounts create RUN_SERVICE_ACCOUNT \ --description="Service account for Cloud Run serving Cloud Storage" \ --display-name="Cloud Run Cloud Storage Reader"Berikan peran Storage Object Viewer (
roles/storage.objectViewer) kepada akun layanan di bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Men-deploy layanan Cloud Run
Deploy server web NGINX ke Cloud Run dan pasang bucket Cloud Storage. Anda harus menggunakan lingkungan eksekusi generasi kedua untuk mendukung pemasangan volume.
Untuk memasang bucket, deploy layanan dengan flag volume:
gcloud run deploy SERVICE_NAME \
--image=nginx \
--port=80 \
--execution-environment=gen2 \
--service-account=RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--add-volume=name=static,type=cloud-storage,bucket=BUCKET_NAME,readonly=true \
--add-volume-mount=volume=static,mount-path=/usr/share/nginx/html \
--no-allow-unauthenticated
Ganti kode berikut:
SERVICE_NAME: nama layanan Cloud Run AndaRUN_SERVICE_ACCOUNT: akun layanan yang Anda buat pada langkah sebelumnyaPROJECT_ID: Project ID Google Cloud AndaBUCKET_NAME: nama bucket Cloud Storage Anda
Bucket dipasang ke /usr/share/nginx/html, yang merupakan direktori
default tempat NGINX mencari aset statis. Artinya, file di bucket Anda dipetakan langsung ke jalur root layanan Anda. Misalnya, file yang disimpan di gs://BUCKET_NAME/index.html dapat diakses di https://SERVICE_URL/index.html.
Untuk memverifikasi deployment, periksa apakah layanan memblokir akses yang tidak diautentikasi dan menampilkan status 403 Forbidden saat diakses tanpa kredensial:
curl -I SERVICE_URL
Atau, Anda dapat menguji apakah container merender file dengan benar dari bucket Cloud Storage pribadi Anda sebelum mengonfigurasi akses IAP. Untuk melakukannya, jalankan perintah berikut untuk mengirim permintaan yang diautentikasi menggunakan kredensial developer Anda:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Ganti SERVICE_URL dengan URL layanan Cloud Run Anda.
Mengaktifkan IAP
Setelah men-deploy layanan Cloud Run, Anda dapat mengaktifkan IAP untuk mengamankannya.
Sebaiknya aktifkan IAP langsung di layanan Cloud Run. Untuk mengetahui petunjuknya, lihat Mengonfigurasi IAP untuk Cloud Run.
Atau, jika Anda menggunakan load balancer HTTPS eksternal di depan layanan Cloud Run, Anda dapat mengaktifkan IAP di layanan backend. Untuk mengetahui petunjuknya, lihat Mengaktifkan IAP dari layanan backend atau load balancer.
Penyimpanan ke cache dan performa
Saat Anda menggunakan pemasangan volume Cloud Storage, setiap file yang dibaca oleh Cloud Run akan diterjemahkan menjadi panggilan Cloud Storage API. Untuk meminimalkan latensi dan biaya API, Anda dapat mengonfigurasi caching di server web (misalnya, menggunakan direktif caching NGINX) atau mengonfigurasi opsi pemasangan Cloud Storage FUSE.
Jika menggunakan load balancer HTTPS eksternal, Anda juga dapat mengaktifkan Cloud CDN di layanan backend. IAP tidak kompatibel dengan Cloud CDN pada layanan backend yang sama, jadi Anda mungkin perlu menyusun arsitektur dengan tepat jika memerlukan keduanya.
Batasan
Membaca file dari pemasangan volume Cloud Storage mungkin lebih lambat daripada mengakses sistem file lokal. Untuk mengurangi latensi baca, konfigurasi penyimpanan dalam cache.
Kasus penggunaan lainnya
Anda juga dapat menggunakan pemasangan volume Cloud Storage untuk skenario lain:
- Fungsi berbasis peristiwa: Fungsi membaca file yang diupload langsung dari sistem file.
- Aplikasi AI generatif: Aplikasi memuat database vektor (seperti Chroma) dari bucket Cloud Storage menggunakan pembacaan sistem file standar.
Alternatif: Memasang volume NFS
Jika file Anda disimpan di Filestore atau server NFS yang dihosting sendiri, Anda dapat memasang volume NFS ke layanan Cloud Run, bukan bucket Cloud Storage. Untuk mengetahui informasi selengkapnya, lihat Memasang volume NFS.