Mengonfigurasi secret untuk tugas

Tugas 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 diselesaikan pada waktu startup instance. Jadi, jika Anda ingin menggunakan metode ini, Google merekomendasikan Anda untuk menyematkan secret ke versi tertentu daripada menggunakan latest sebagai versi.

Untuk mengetahui informasi selengkapnya, lihat praktik terbaik Secret Manager.

Cara pemeriksaan secret saat deployment dan runtime

Selama pembuatan tugas, 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 rahasia Cloud Run berbeda-beda menurut lingkungan eksekusi dan jenis deployment.

Saat Anda memasang volume secret menggunakan lingkungan eksekusi generasi kedua, yang selalu terjadi untuk tugas, root memiliki volume tersebut.

Sebelum memulai

  1. Enable the Secret Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

Peran yang diperlukan

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

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

Untuk mengetahui petunjuk tentang 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 tugas Cloud Run Anda berinteraksi dengan Google Cloud API, seperti Library Klien Cloud, 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 bisa diakses oleh tugas Anda menggunakan konsol Google Cloud , Google Cloud CLI, atau YAML:

Konsol

  1. Di konsol Google Cloud , buka halaman tugas Cloud Run:

    Buka Cloud Run

  2. Pilih Jobs dari menu, lalu klik Deploy container untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang ada, pilih tugas, lalu klik Edit.

  3. Klik Container(s), Volumes, Connections, Security untuk memperluas halaman properti tugas.

  4. Klik tab Variabel & Secret.

    gambar

    • Di tab Variabel & Secret:

      • Untuk mengekspos secret sebagai variabel lingkungan:

        1. Klik tab Container.
        2. Di tab Variables and Secrets, klik Reference a secret.
        3. Di kolom Name 1, masukkan nama variabel lingkungan.
        4. Dari daftar Secret, pilih secret yang ingin Anda gunakan.
        5. Dari daftar Version 1, pilih versi secret yang akan direferensikan.
        6. Klik Selesai.
        7. Klik Buat atau Deploy.
      • Untuk memasang secret sebagai volume:

        1. Klik tab Volumes, lalu pilih Add volume.
        2. Di daftar Volume type, pilih Secret.
        3. Di kolom Volume name, masukkan nama atau terima nama default.
        4. Dari daftar Secret, pilih secret yang ingin Anda gunakan.
        5. Di kolom Path 1, masukkan nama file yang akan di-mount.
        6. Dalam daftar Version 1, pilih versi secret yang akan direferensikan. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya.
        7. Klik Selesai.
        8. Buka tab Container(s) untuk memasang secret ke container.
        9. Di tab Volume mounts, klik Mount volume.
        10. Dari daftar Name 1, pilih nama volume Anda.
        11. Di kolom Mount path 1, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.
        12. Klik Selesai.
        13. Klik Buat atau Deploy.
  5. Klik Buat atau Perbarui.

gcloud

  • Untuk menentukan secret dalam variabel lingkungan pada saat membuat tugas baru:

    gcloud run jobs create JOB_NAME \
    --image IMAGE_URL \
    --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION

    Ganti kode berikut:

    • JOB_NAME: nama tugas Anda.
    • ENV_VAR_NAME: nama variabel lingkungan yang akan digunakan untuk secret.
    • SECRET_NAME: nama rahasia dalam project yang sama—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.

    Anda dapat menentukan beberapa pasangan variabel lingkungan/secret, menggunakan daftar yang dipisahkan dengan tanda koma.

  • Untuk menentukan secret dalam variabel lingkungan pada saat memperbarui tugas:

    gcloud run jobs update JOB_NAME \
    --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
  • Untuk memasang secret sebagai volume pada saat membuat tugas:

    gcloud run jobs create JOB_NAME \
    --image IMAGE_URL \
    --set-secrets=PATH=SECRET_NAME:VERSION

    Ganti kode berikut:

    • JOB_NAME: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
    • SECRET_NAME: nama rahasia dalam project yang sama—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
  • Untuk memperbarui secret dalam tugas yang sudah ada:

    gcloud run jobs update JOB_NAME \
    --update-secrets=PATH=SECRET_NAME:VERSION

YAML

Karena keterbatasan seputar kompatibilitas API, lokasi secret harus disimpan dalam anotasi.

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

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Untuk secret yang diekspos sebagai variabel lingkungan:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - env:
                - name: SECRET_NAME
                  valueFrom:
                    secretKeyRef:
                      key: VERSION
                      name: SECRET_LOOKUP_NAME
                image: IMAGE_URL 

    Ganti kode berikut:

    • JOB: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid—misalnya, my-secret. Nilainya bisa sama dengan SECRET_NAME.
  3. Untuk secret yang dipasang sebagai jalur file:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE_URL
                volumeMounts:
                - mountPath: MOUNT_PATH
                  name: VOLUME_NAME
              volumes:
              - name: VOLUME_NAME
                secret:
                  items:
                  - key: VERSION
                    path: FILENAME
                  secretName: SECRET_LOOKUP_NAME

    Ganti kode berikut:

    • JOB_NAME: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid—misalnya, my-secret. Nilainya bisa sama dengan SECRET_NAME.
    • VOLUME_NAME: nama apa pun—misalnya, my-volume. Link ini bisa sama dengan SECRET_NAME.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Tambahkan kode berikut ke resource google_cloud_run_v2_job di konfigurasi Terraform Anda:

Untuk secret yang diekspos sebagai variabel lingkungan:

resource "google_cloud_run_v2_job" "default" {
  name     = "JOB_NAME"
  location = "REGION"

  template {
    template {
      containers {
        image = "IMAGE_URL"

        env {
          name = "SECRET_NAME"

          value_source {
            secret_key_ref {
              secret = "SECRET_NAME"
              version = "VERSION"
            }
          }
        }
      }
    }
  }
}

Ganti kode berikut:

  • JOB_NAME: nama tugas Cloud Run Anda.
  • REGION: Google Cloud region. Contohnya, europe-west1.
  • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
  • SECRET_NAME: nama secret—misalnya, mysecret.
  • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.

Untuk secret yang dipasang sebagai jalur file:

resource "google_cloud_run_v2_job" "default" {
  name     = "JOB_NAME"
  location = "REGION"

  template {
    template {
      containers {
        image = "IMAGE_URL"

        volume_mounts {
          name       = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        secret {
          secret = "SECRET_NAME"
        }
      }
    }
  }
}

Ganti kode berikut:

  • JOB_NAME: nama tugas Cloud Run Anda.
  • REGION: Google Cloud region. Contohnya, europe-west1.
  • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
  • VOLUME_NAME: nama apa pun—misalnya, my-volume. Link ini bisa sama dengan SECRET_NAME.
  • MOUNT_PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
  • SECRET_NAME: nama secret—misalnya, mysecret.

Merujuk secret dari project lain

Anda dapat mereferensikan secret dari project lain jika akun layanan project Anda telah diizinkan untuk mengakses secret.

Konsol

  1. Di konsol Google Cloud , buka halaman tugas Cloud Run:

    Buka Cloud Run

  2. Pilih Jobs dari menu, lalu klik Deploy container untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang ada, pilih tugas, lalu klik Edit.

  3. Klik Container(s), Volumes, Connections, Security untuk memperluas halaman properti tugas.

  4. Klik tab Variabel & Secret.

    gambar

    • Di tab Variabel & Secret:

      • Untuk mengekspos secret sebagai variabel lingkungan:

        1. Klik tab Container.
        2. Di tab Variables and Secrets, klik Reference a secret.
        3. Di kolom Name 1, masukkan nama variabel lingkungan.
        4. Dari daftar Secret, klik Masukkan secret secara manual.
        5. Masukkan ID resource secret dalam format berikut:

          projects/PROJECT_NUMBER/secrets/SECRET_NAME
          

          Ganti kode berikut:

          • PROJECT_NUMBER dengan Google Cloud nomor project Anda. Untuk petunjuk mendetail tentang cara menemukan nomor project, lihat Membuat dan mengelola project.

          • SECRET_NAME: Nama secret di Secret Manager.

        6. Dari daftar Version 1, pilih versi secret yang akan direferensikan.

        7. Klik Selesai.

        8. Klik Buat atau Deploy.

      • Untuk memasang secret sebagai volume:

        1. Klik tab Volumes, lalu pilih Add volume.
        2. Di daftar Volume type, pilih Secret.
        3. Di kolom Volume name, masukkan nama atau terima nama default.
        4. Dari daftar Secret, klik Masukkan secret secara manual.
        5. Masukkan ID resource secret dalam format berikut:

          projects/PROJECT_NUMBER/secrets/SECRET_NAME
          

          Ganti kode berikut:

          • PROJECT_NUMBER dengan Google Cloud nomor project Anda. Untuk petunjuk mendetail tentang cara menemukan nomor project, lihat Membuat dan mengelola project.

          • SECRET_NAME: Nama secret di Secret Manager.

        6. Di kolom Path 1, masukkan nama file yang akan di-mount.

        7. Dalam daftar Version 1, pilih versi secret yang akan direferensikan. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya.

        8. Klik Selesai.

        9. Buka tab Container(s) untuk memasang secret ke container.

        10. Di tab Volume mounts, klik Mount volume.

        11. Dari daftar Name 1, pilih nama volume Anda.

        12. Di kolom Mount path 1, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.

        13. Klik Selesai.

        14. Klik Buat atau Deploy.

  5. Klik Buat atau Perbarui.

gcloud

  • Untuk memasang secret sebagai volume saat memperbarui tugas:

    gcloud run jobs update JOB_NAME \
    --image IMAGE_URL \
    --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
    • JOB_NAME: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.

YAML

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

    gcloud run jobs describe JOB_NAME --format export > job.yaml

Karena keterbatasan seputar kompatibilitas API, lokasi secret harus disimpan dalam anotasi.

  1. Untuk secret yang diekspos sebagai variabel lingkungan:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          template:
            spec:
              containers:
              - env:
                - name: SECRET_NAME
                  valueFrom:
                    secretKeyRef:
                      key: VERSION
                      name: SECRET_LOOKUP_NAME
                image: IMAGE_URL 

    Ganti kode berikut:

    • JOB: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid—misalnya, my-secret. Nilainya bisa sama dengan SECRET_NAME.
  2. Untuk secret yang dipasang sebagai jalur file:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          template:
            spec:
              containers:
              - image: IMAGE_URL
                volumeMounts:
                - mountPath: MOUNT_PATH
                  name: VOLUME_NAME
              volumes:
              - name: VOLUME_NAME
                secret:
                  items:
                  - key: VERSION
                    path: FILENAME
                  secretName: SECRET_LOOKUP_NAME

    Ganti kode berikut:

    • JOB_NAME: nama tugas Anda.
    • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
    • PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
    • PROJECT_NUMBER: nomor project untuk project tempat secret dibuat.
    • SECRET_NAME: nama secret—misalnya, mysecret.
    • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.
    • SECRET_LOOKUP_NAME: nama apa pun yang memiliki sintaksis nama secret yang valid—misalnya, my-secret, nama tersebut bisa sama seperti SECRET_NAME.
    • VOLUME_NAME: nama apa pun—misalnya, my-volume, bisa sama dengan SECRET_NAME.

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Tambahkan kode berikut ke resource google_cloud_run_v2_job di konfigurasi Terraform Anda:

Untuk secret yang diekspos sebagai variabel lingkungan:

resource "google_cloud_run_v2_job" "default" {
  name     = "JOB_NAME"
  location = "REGION"

  template {
    template {
      containers {
        image = "IMAGE_URL"
        env {
          name = "SECRET_NAME"
          value_source {
            secret_key_ref {
              secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
              version = "VERSION"
            }
          }
        }
      }
    }
  }
}

Ganti kode berikut:

  • JOB_NAME: nama tugas Cloud Run Anda.
  • REGION: Google Cloud region. Contohnya, europe-west1.
  • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
  • SECRET_NAME: nama secret—misalnya, mysecret.
  • PROJECT_ID: project ID tempat secret dibuat.
  • VERSION: versi secret. Gunakan latest untuk versi terbaru, atau angka—misalnya, 2.

Untuk secret yang dipasang sebagai jalur file:

resource "google_cloud_run_v2_job" "default" {
  name     = "JOB_NAME"
  location = "REGION"

  template {
    template {
      containers {
        image = "IMAGE_URL"

        volume_mounts {
          name       = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        secret {
          secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
        }
      }
    }
  }
}

Ganti kode berikut:

  • JOB_NAME: nama tugas Cloud Run Anda.
  • REGION: Google Cloud region—misalnya, europe-west1.
  • IMAGE_URL: referensi ke image container—misalnya, us-docker.pkg.dev/cloudrun/container/job:latest.
  • VOLUME_NAME: nama apa pun—misalnya, my-volume, bisa sama dengan SECRET_NAME.
  • MOUNT_PATH: jalur pemasangan volume dan nama file secret. Nama ini harus diawali dengan garis miring—misalnya, /etc/secrets/dbconfig/password, dengan /etc/secrets/dbconfig/ sebagai jalur pemasangan volume, dan password sebagai nama file secret.
  • PROJECT_ID: project ID tempat secret dibuat.
  • SECRET_NAME: nama secret—misalnya, mysecret.

Lihat setelan secret

Untuk melihat setelan secret saat ini pada tugas Cloud Run Anda:

Konsol

  1. Di konsol Google Cloud , buka halaman tugas Cloud Run:

    Buka tugas Cloud Run

  2. Klik tugas yang Anda minati untuk membuka halaman Detail pekerjaan.

  3. Klik Lihat dan Edit konfigurasi tugas.

  4. Temukan setelan secret di detail konfigurasi.

gcloud

  1. Gunakan perintah berikut:

    gcloud run jobs describe JOB_NAME
  2. Temukan setelan secret dalam konfigurasi yang ditampilkan.

Jalur dan batasan yang tidak diizinkan

Batasan berikut berlaku untuk pemasangan rahasia:

  • 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.

Mengganti direktori

Jika secret dipasang sebagai volume di Cloud Run, dan direktori terakhir di jalur pemasangan volume sudah ada, maka file atau folder apa pun di direktori yang ada menjadi tidak 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.