Mengaktifkan IAP untuk bucket Cloud Storage

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.

  1. 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"
    
  2. 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 Anda
  • RUN_SERVICE_ACCOUNT: akun layanan yang Anda buat pada langkah sebelumnya
  • PROJECT_ID: Project ID Google Cloud Anda
  • BUCKET_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.