Konfigurasi rahasia untuk instance

Instance Anda mungkin memerlukan kunci API, sandi, sertifikat, atau informasi sensitif lainnya untuk dependensinya. Untuk Cloud Run, Google merekomendasikan penyimpanan informasi sensitif ini di secret yang Anda buat di Secret Manager.

Buat secret tersedia untuk container Anda dengan salah satu cara berikut:

  • Saat Anda memasang setiap secret sebagai volume, Cloud Run akan membuat secret tersedia untuk container sebagai file. Saat membaca volume, Cloud Run selalu mengambil nilai secret dari Secret Manager untuk menggunakan nilai dengan versi terbaru. Metode ini juga berfungsi dengan baik pada rotasi secret.
  • Teruskan secret menggunakan variabel lingkungan. Variabel lingkungan di-resolve pada waktu startup instance. Jadi, jika Anda menggunakan metode ini, Google merekomendasikan agar Anda menyematkan secret ke versi tertentu, bukan menggunakan latest sebagai versi.

Untuk mengetahui informasi selengkapnya, lihat Praktik terbaik Secret Manager .

Cara pemeriksaan secret saat deployment dan runtime

Selama deployment instance, Cloud Run akan memeriksa semua secret yang Anda gunakan. Pemeriksaan ini memastikan bahwa akun layanan yang menjalankan container memiliki izin untuk mengakses secret ini.

Selama runtime, pada saat instance dimulai:

  • Jika secret adalah variabel lingkungan, Cloud Run akan mengambil nilai secret sebelum memulai instance. Jika proses pengambilan secret gagal, instance tidak akan dimulai.
  • Jika Anda memasang secret sebagai volume, Cloud Run tidak akan melakukan pemeriksaan apa pun selama startup instance. Namun, jika selama runtime secret tidak dapat diakses, upaya untuk membaca volume yang terpasang akan gagal.

Kepemilikan volume

Kepemilikan volume secret Cloud Run berbeda menurut lingkungan eksekusi dan jenis deployment.

Saat Anda memasang volume secret menggunakan lingkungan eksekusi generasi kedua, yang selalu berlaku untuk instance, root akan memiliki volume tersebut.

Sebelum memulai

  1. Mengaktifkan Secret Manager API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Mengaktifkan API

  2. Gunakan secret yang sudah ada atau buat secret di Secret Manager, seperti yang dijelaskan dalam Membuat secret.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi secret, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengizinkan Cloud Run mengakses secret, identitas layanan harus memiliki peran berikut:

Untuk mengetahui petunjuk cara menambahkan akun utama identitas layanan ke peran Secret Manager Secret Accessor, lihat Mengelola akses ke secret.

Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika instance Cloud Run Anda berinteraksi dengan Google Cloud API, seperti Cloud Client Libraries, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.

Membuat secret dapat diakses oleh Cloud Run

Anda dapat membuat secret dapat diakses oleh instance Anda menggunakan Google Cloud CLI atau YAML saat Anda men-deploy instance baru atau memperbarui instance yang sudah ada:

gcloud

  • Untuk mengekspos secret sebagai variabel lingkungan saat Anda men-deploy instance, jalankan perintah berikut:

    gcloud beta run instances deploy INSTANCE \
      --image IMAGE_URL \
      --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Ganti kode berikut:

    • INSTANCE: nama instance Anda.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • ENV_VAR_NAME: nama variabel lingkungan yang ingin Anda gunakan dengan secret.
    • SECRET_NAME: nama secret di project yang sama—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.
  • Untuk memperbarui beberapa secret secara bersamaan, pisahkan opsi konfigurasi untuk setiap secret dengan koma. Perintah berikut memperbarui satu secret yang dipasang sebagai volume dan secret lain yang diekspos sebagai variabel lingkungan. Untuk memperbarui secret yang ada, jalankan perintah berikut:

    gcloud beta run instances deploy INSTANCE \
    --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Untuk menghapus secret yang ada dan membuat secret baru dapat diakses oleh instance, gunakan flag --set-secrets:

    gcloud beta run instances update INSTANCE \
     --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

  1. Jika Anda membuat instance baru, lewati langkah ini. Jika Anda memperbarui instance yang sudah ada, download konfigurasi YAML-nya:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Untuk secret yang diekspos sebagai variabel lingkungan:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        env:
        - name: ENV_VAR
          valueFrom:
            secretKeyRef:
              key: SECRET_VERSION
              name: SECRET_NAME

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • ENV_VAR: nama variabel lingkungan.
    • SECRET_VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.
    • SECRET_NAME: nama secret—misalnya, mysecret.
  3. Untuk secret yang dipasang sebagai jalur file:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - image: IMAGE_URL
        volumeMounts:
        - name: VOLUME_NAME
          mountPath: MOUNT_PATH
      volumes:
      - name: VOLUME_NAME
        secret:
          secretName: SECRET_NAME
          items:
          - key: SECRET_VERSION
            path: SECRET_NAME

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda.
    • MOUNT_PATH: jalur relatif tempat Anda memasang volume—misalnya, /mnt/my-volume.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • SECRET_VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.
  4. Ganti instance dengan konfigurasi barunya menggunakan perintah berikut:

    gcloud beta run services replace service.yaml

Mereferensikan secret dari project lain

Untuk mereferensikan secret dari project lain, pastikan akun instance project Anda memiliki akses ke secret tersebut.

gcloud

Untuk mereferensikan secret sebagai variabel lingkungan, jalankan perintah berikut:

gcloud beta run instances deploy INSTANCE \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

Ganti kode berikut:

  • INSTANCE: nama instance Anda.
  • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
  • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
  • SECRET_NAME: nama secret—misalnya, mysecret.
  • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.

YAML

  1. Jika Anda membuat instance baru, lewati langkah ini. Jika Anda memperbarui instance yang sudah ada, download konfigurasi YAML-nya:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. Untuk secret yang diekspos sebagai variabel lingkungan:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: SECRET_VERSION
                  name: SECRET_LOOKUP_NAME

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid —misalnya, my-secret, dapat sama dengan SECRET_NAME.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • ENV_VAR: nama variabel lingkungan.
    • SECRET_VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.
  3. Untuk secret yang dipasang sebagai jalur file:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    metadata:
      annotations:
        run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
    spec:
      containers:
      - image: IMAGE_URL
        volumeMounts:
        - name: VOLUME_NAME
          mountPath: MOUNT_PATH
      volumes:
      - name: VOLUME_NAME
        secret:
          secretName: SECRET_NAME
          items:
          - key: SECRET_VERSION
            path: SECRET_LOOKUP_NAME

    Ganti kode berikut:

    • INSTANCE: nama instance Cloud Run Anda.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid —misalnya, my-secret. Dapat sama dengan SECRET_NAME.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME: nama apa pun yang Anda inginkan untuk volume Anda.
    • MOUNT_PATH: jalur relatif tempat Anda memasang volume—misalnya, /mnt/my-volume.
    • SECRET_VERSION: versi secret. Gunakan latest untuk versi terbaru, atau nomor—misalnya, 2.
  4. Ganti instance dengan konfigurasi barunya menggunakan perintah berikut:

    gcloud beta run instances replace instance.yaml

Lihat setelan secret

Untuk melihat setelan secret saat ini untuk instance Cloud Run Anda:

gcloud

  1. Gunakan perintah berikut:

    gcloud beta run instances describe INSTANCE
  2. Temukan setelan secret dalam konfigurasi yang ditampilkan.

Menghapus secret dari instance

Anda dapat menghapus secret dari instance menggunakan gcloud CLI:

gcloud

Anda dapat menghapus semua secret dari instance atau menentukan satu atau beberapa secret yang akan dihapus.

Untuk menghapus semua secret, jalankan perintah berikut:

  gcloud beta run instances deploy INSTANCE --image IMAGE_URL \
      --clear-secrets

Ganti kode berikut:

  • INSTANCE: nama instance Anda.
  • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.

Untuk menentukan daftar secret yang akan dihapus, gunakan flag --remove-secrets. Perintah berikut menghapus satu secret yang dipasang sebagai volume dan secret lain yang diekspos sebagai variabel lingkungan.

  gcloud beta run instances deploy INSTANCE --image IMAGE_URL \
      --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH

Ganti kode berikut:

  • INSTANCE: nama instance Anda.
  • IMAGE_URL: referensi ke image container, seperti us-docker.pkg.dev/cloudrun/container/hello:latest.
  • ENV_VAR_NAME: nama variabel lingkungan.
  • SECRET_FILE_PATH: jalur lengkap secret. Misalnya, /mnt/secrets/primary/latest, dengan /mnt/secrets/primary/ sebagai jalur pemasangan dan latest sebagai jalur secret. Anda juga dapat menentukan jalur pemasangan dan secret secara terpisah:

    --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION

Menggunakan secret dalam kode Anda

Untuk mengetahui contoh cara mengakses secret dalam kode Anda sebagai variabel lingkungan, lihat tutorial tentang autentikasi pengguna akhir, terutama bagian Menangani konfigurasi sensitif dengan Secret Manager.

Batasan

Bagian berikut menjelaskan batasan yang berlaku untuk pemasangan secret.

Jalur yang tidak diizinkan

  • Cloud Run tidak mengizinkan Anda memasang secret di /dev, /proc, dan /sys, atau di subdirektorinya.
  • Cloud Run tidak mengizinkan Anda memasang beberapa secret di jalur yang sama karena dua penyangga volume tidak dapat dipasang di lokasi yang sama.

Secret regional

Cloud Run tidak mendukung secret regional.

Mengganti direktori

Jika secret dipasang sebagai volume di Cloud Run, dan direktori terakhir di jalur pemasangan volume sudah ada, semua file atau folder di direktori yang ada tidak akan dapat diakses.

Misalnya, jika secret bernama my-secret dipasang ke jalur /etc/app_data, semua konten di dalam direktori app_data akan ditimpa, dan satu-satunya file yang terlihat adalah /etc/app_data/my-secret.

Untuk menghindari penimpaan file di direktori yang ada, buat direktori baru untuk memasang secret, misalnya, /etc/app_data/secrets, sehingga jalur pemasangan untuk secret adalah /etc/app_data/secrets/my-secret.