Mengonfigurasi secret

Tugas Anda mungkin perlu memiliki dependensi yang memerlukan kunci API, sandi, sertifikat, atau informasi sensitif lainnya. Untuk Cloud Run, Google merekomendasikan agar Anda menyimpan informasi sensitif seperti ini di secret yang dibuat di Secret Manager.

Anda dapat membuat secret tersedia untuk container dengan salah satu dari dua cara berikut:

  • Instal setiap secret sebagai volume, yang membuat secret tersedia untuk container sebagai file. Membaca volume akan selalu mengambil nilai secret dari Secret Manager, sehingga dapat digunakan 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 versi terbaru.

Untuk informasi selengkapnya, lihat dokumen praktik terbaik di Secret Manager.

Cara secret diperiksa pada saat deployment and runtime

Selama pembuatan tugas, seluruh secret yang digunakan, baik sebagai variabel lingkungan maupun yang dipasang sebagai volume, akan diperiksa untuk memastikan akun layanan used to run the container memiliki akses ke secret tersebut. Jika pemeriksaan gagal, seluruh pembuatan tugas juga akan gagal.

Selama runtime, pada saat instance dimulai:

  • Jika secret adalah variabel lingkungan, nilai secret akan diambil sebelum instance dimulai. Jadi, jika pengambilan secret gagal, instance tidak akan dimulai.
  • Jika secret dipasang sebagai volume, tidak akan ada pemeriksaan yang dilakukan selama startup instance. Namun, jika selama runtime secret tidak dapat diakses, upaya untuk membaca volume yang terpasang juga akan gagal.

Kepemilikan volume berbeda berdasarkan lingkungan eksekusi dan jenis deployment

Saat Anda memasang volume secret menggunakan lingkungan eksekusi generasi kedua, untuk kasus tugas, volume akan dimiliki oleh root.

Sebelum memulai

  1. Enable the Secret Manager API.

    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 memberikan peran IAM berikut:

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

Untuk 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 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. Pada konsol Google Cloud, buka halaman tugas Cloud Run:

    Buka Cloud Run

  2. Klik Deploy container dan pilih Job untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang sudah ada, pilih tugas, lalu klik Edit.

  3. Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.

  4. Klik tab Variabel & Secret.

    gambar

    • Di tab Variabel & Secret:
      • Di bagian Secret, klik Tambahkan referensi secret
      • Pilih secret yang ingin Anda gunakan dari daftar pull-down Secret.
      • Di menu pull-down,Referensi metode pilih bagaimana cara Anda menggunakan secret, yang dipasang sebagai volume atau diekspos sebagai variabel lingkungan.
      • Jika Anda memasang secret sebagai volume,
        1. Di bagian Jalur pemasangan, tentukan jalur pemasangan yang Anda gunakan untuk secret.
        2. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya. Di bagian Lokasi spesifik untuk versi secret, tentukan jalur ke versi dan nomor versi.
        3. Klik Selesai.
      • Jika Anda mengekspos secret sebagai variabel lingkungan:
        1. Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
        2. Klik Selesai.
  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

    • JOB_NAME dengan nama tugas Anda.
    • ENV_VAR_NAME dengan nama variabel lingkungan yang akan digunakan untuk secret.
    • SECRET_NAME dengan nama secret dalam project yang sama, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau angka, misalnya, 2.
    • Ganti IMAGE_URL dengan mereferensikan 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:

    • JOB_NAME dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/job:latest
    • PATH dengan 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 nama file secret.
    • SECRET_NAME dengan nama secret dalam project yang sama, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, 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 mengupdate 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:

    • JOB dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • SECRET_NAME dengan nama secret, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, misalnya, 2.
    • SECRET_LOOKUP_NAME dengan setiap nama yang memiliki sintaksis nama secret yang valid (misalnya. my-secret), nama tersebut bisa sama seperti 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:

    • JOB_NAME dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH dengan 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 nama file secret.
    • PROJECT_NUMBER dengan nomor project untuk project tempat secret dibuat.
    • SECRET_NAME dengan nama secret, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, misalnya, 2.
    • SECRET_LOOKUP_NAME dengan setiap nama yang memiliki sintaksis nama secret yang valid (misalnya. my-secret), nama tersebut bisa sama seperti SECRET_NAME
    • VOLUME_NAME dengan nama apa pun (misalnya my-volume), bisa sama seperti SECRET_NAME

Merujuk secret dari project lain

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

Konsol

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

    Buka Cloud Run

  2. Klik Deploy container dan pilih Job untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang sudah ada, pilih tugas, lalu klik Edit.

  3. Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.

  4. Klik tab Variabel & Secret.

    gambar

    • Di tab Variabel & Secret:
      • Di bagian Secret, klik Tambahkan referensi secret
      • Pilih Masukkan secret secara manual dari menu drop-down Secrets untuk menampilkan formulir berikut:

        Secret lintas project

      • Pada formulir Tambahkan secret by resource ID, masukkan secret dari project lain, dalam format projects/PROJECT_NUMBER/secrets/SECRET_NAME. Atau, Anda dapat menyalin dan menempelkan ID resource dari project lain jika memiliki akses ke project tersebut, dengan memilih secret, mengklik elipsis Tindakan di sebelah kanan secret, dan memilih Salin resource ID dari menu pull-down.
      • Klik Tambahkan secret.
      • Di menu pull-down Metode referensi, pilih cara Anda ingin menggunakan secret, yang dipasang sebagai volume atau diekspos sebagai variabel lingkungan.
      • Jika Anda memasang secret sebagai volume,
        1. Di bagian Jalur pemasangan, tentukan jalur pemasangan yang Anda gunakan untuk secret.
        2. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya. Di bagian Lokasi spesifik untuk versi secret, tentukan jalur ke versi dan nomor versi.
        3. Klik Selesai.
      • Jika Anda mengekspos secret sebagai variabel lingkungan:
        1. Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
        2. Klik Selesai.
  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 dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH dengan 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 nama file secret.
    • PROJECT_NUMBER dengan nomor project untuk project tempat secret dibuat.
    • SECRET_NAME dengan nama secret, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, misalnya, 2.

YAML

  1. Jika Anda membuat tugas baru, lewati langkah ini. Jika Anda mengupdate 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 ditampilkan 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:

    • JOB dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • SECRET_NAME dengan nama secret, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, misalnya, 2.
    • PROJECT_NUMBER dengan nomor project untuk project tempat secret dibuat.
    • SECRET_LOOKUP_NAME dengan setiap nama yang memiliki sintaksis nama secret yang valid (misalnya. my-secret), nama tersebut bisa sama seperti 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:

    • JOB_NAME dengan nama tugas Anda.
    • IMAGE_URL dengan mereferensikan ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH dengan 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 nama file secret.
    • PROJECT_NUMBER dengan nomor project untuk project tempat secret dibuat.
    • SECRET_NAME dengan nama secret, misalnya mysecret.
    • VERSION dengan versi secret. Gunakan latest untuk versi terbaru, atau nomor, misalnya, 2.
    • SECRET_LOOKUP_NAME dengan setiap nama yang memiliki sintaksis nama secret yang valid (misalnya. my-secret), nama tersebut bisa sama seperti SECRET_NAME.
    • VOLUME_NAME dengan nama apa pun (misalnya my-volume), bisa sama seperti SECRET_NAME.

Lihat setelan secret

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

Konsol

  1. Pada 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 tab Konfigurasi.

  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

Cloud Run tidak mengizinkan Anda memasang secrets di /dev, /proc, dan /sys, atau di subdirektorinya.

Jika Anda memasang secret pada /tmp dan Anda menggunakan lingkungan eksekusi generasi pertama, lihat masalah umum di pemasangan secret pada /tmp.

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, file atau folder apa pun di direktori yang ada 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 menimpa file di direktori yang ada, buat direktori baru untuk memasang secret, misalnya, /etc/app_data/secrets, sehingga jalur mount untuk secret adalah /etc/app_data/secrets/my-secret.