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
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. - 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:
-
Admin Cloud Run (
roles/run.admin
) pada tugas Cloud Run -
Service Account User (
roles/iam.serviceAccountUser
) pada identitas layanan
Untuk mengizinkan Cloud Run mengakses secret, identitas layanan harus memiliki peran berikut:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
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
Di konsol Google Cloud , buka halaman tugas Cloud Run:
Pilih Jobs dari menu, lalu klik Deploy container untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang ada, pilih tugas, lalu klik Lihat dan edit konfigurasi tugas.
Klik Container(s), Volumes, Connections, Security untuk memperluas halaman properti tugas.
Klik tab Variabel & Secret.
- Di tab Variabel & Secret:
Untuk mengekspos secret sebagai variabel lingkungan:
- Klik tab Container.
- Di tab Variables and Secrets, klik Reference a secret.
- Di kolom Name 1, masukkan nama variabel lingkungan.
- Dari daftar Secret, pilih secret yang ingin Anda gunakan.
- Dari daftar Version 1, pilih versi secret yang akan direferensikan.
- Klik Selesai.
- Klik Buat atau Deploy.
Untuk memasang secret sebagai volume:
- Klik tab Volumes, lalu pilih Add volume.
- Di daftar Volume type, pilih Secret.
- Di kolom Volume name, masukkan nama atau terima nama default.
- Dari daftar Secret, pilih secret yang ingin Anda gunakan.
- Di kolom Path 1, masukkan nama file yang akan di-mount.
- Dalam daftar Version 1, pilih versi secret yang akan direferensikan. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya.
- Klik Selesai.
- Buka tab Container(s) untuk memasang secret ke container.
- Di tab Volume mounts, klik Mount volume.
- Dari daftar Name 1, pilih nama volume Anda.
- Di kolom Mount path 1, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.
- Klik Selesai.
- Klik Buat atau Deploy.
- Di tab Variabel & Secret:
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, danpassword
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.
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
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.
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, danpassword
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 resourcegoogle_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 denganSECRET_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, danpassword
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
Di konsol Google Cloud , buka halaman tugas Cloud Run:
Pilih Jobs dari menu, lalu klik Deploy container untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang ada, pilih tugas, lalu klik Lihat dan edit konfigurasi tugas.
Klik Container(s), Volumes, Connections, Security untuk memperluas halaman properti tugas.
Klik tab Variabel & Secret.
- Di tab Variabel & Secret:
Untuk mengekspos secret sebagai variabel lingkungan:
- Klik tab Container.
- Di tab Variables and Secrets, klik Reference a secret.
- Di kolom Name 1, masukkan nama variabel lingkungan.
- Dari daftar Secret, klik Masukkan secret secara manual.
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 Anda, lihat Membuat dan mengelola project.
SECRET_NAME: Nama secret di Secret Manager.
Dari daftar Version 1, pilih versi secret yang akan direferensikan.
Klik Selesai.
Klik Buat atau Deploy.
Untuk memasang secret sebagai volume:
- Klik tab Volumes, lalu pilih Add volume.
- Di daftar Volume type, pilih Secret.
- Di kolom Volume name, masukkan nama atau terima nama default.
- Dari daftar Secret, klik Masukkan secret secara manual.
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 Anda, lihat Membuat dan mengelola project.
SECRET_NAME: Nama secret di Secret Manager.
Di kolom Path 1, masukkan nama file yang akan di-mount.
Dalam daftar Version 1, pilih versi secret yang akan direferensikan. Secara default, versi terbaru akan dipilih. Anda dapat memilih versi tertentu jika menginginkannya.
Klik Selesai.
Buka tab Container(s) untuk memasang secret ke container.
Di tab Volume mounts, klik Mount volume.
Dari daftar Name 1, pilih nama volume Anda.
Di kolom Mount path 1, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.
Klik Selesai.
Klik Buat atau Deploy.
- Di tab Variabel & Secret:
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, danpassword
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
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.
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.
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, danpassword
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 resourcegoogle_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 denganSECRET_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, danpassword
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
Di konsol Google Cloud , buka halaman tugas Cloud Run:
Klik tugas yang Anda minati untuk membuka halaman Detail pekerjaan.
Klik Lihat dan Edit konfigurasi tugas.
Temukan setelan secret di detail konfigurasi.
gcloud
Gunakan perintah berikut:
gcloud run jobs describe JOB_NAME
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
.