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
-
Aktifkan API Secret Manager.
- 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:
-
Cloud Run Admin (
roles/run.admin
) di tugas Cloud Run -
Service Account User (
roles/iam.serviceAccountUser
) di identitas layanan
Untuk mengizinkan Cloud Run mengakses secret, identitas layanan harus memiliki peran berikut:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
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
Pada konsol Google Cloud, buka halaman tugas Cloud Run:
Klik Deploy container dan pilih Job untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang sudah ada, pilih tugas, lalu klik Edit.
Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.
Klik tab Variabel & Secret.
- 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,
- Di bagian Jalur pemasangan, tentukan jalur pemasangan yang Anda gunakan untuk secret.
- 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.
- Klik Selesai.
- Jika Anda mengekspos secret sebagai variabel lingkungan:
- Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
- Klik Selesai.
- 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
- 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, danpassword
nama file secret.SECRET_NAME
dengan nama secret dalam project yang sama, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
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.
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
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 berbentukLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
dengan nama secret, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
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 sepertiSECRET_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:
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 berbentukLOCATION-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, danpassword
nama file secret.PROJECT_NUMBER
dengan nomor project untuk project tempat secret dibuat.SECRET_NAME
dengan nama secret, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
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 sepertiSECRET_NAME
VOLUME_NAME
dengan nama apa pun (misalnyamy-volume
), bisa sama sepertiSECRET_NAME
Merujuk secret dari project lain
Anda dapat mereferensikan secret dari project lain jika akun layanan project Anda telah diizinkan untuk mengakses secret.
Konsol
Pada konsol Google Cloud, buka halaman tugas Cloud Run:
Klik Deploy container dan pilih Job untuk mengisi halaman setelan tugas awal. Jika Anda mengonfigurasi tugas yang sudah ada, pilih tugas, lalu klik Edit.
Klik Container, variabel dan secret, koneksi, keamanan untuk memperluas halaman properti tugas.
Klik tab Variabel & Secret.
- 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:
- 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,
- Di bagian Jalur pemasangan, tentukan jalur pemasangan yang Anda gunakan untuk secret.
- 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.
- Klik Selesai.
- Jika Anda mengekspos secret sebagai variabel lingkungan:
- Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
- Klik Selesai.
- 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 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 berbentukLOCATION-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, danpassword
nama file secret.PROJECT_NUMBER
dengan nomor project untuk project tempat secret dibuat.SECRET_NAME
dengan nama secret, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
untuk versi terbaru, atau nomor, misalnya,2
.
YAML
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.
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 bentukLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
dengan nama secret, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
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 sepertiSECRET_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:
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 berbentukLOCATION-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, danpassword
nama file secret.PROJECT_NUMBER
dengan nomor project untuk project tempat secret dibuat.SECRET_NAME
dengan nama secret, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
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 sepertiSECRET_NAME
.VOLUME_NAME
dengan nama apa pun (misalnyamy-volume
), bisa sama sepertiSECRET_NAME
.
Lihat setelan secret
Untuk melihat setelan secret saat ini pada tugas Cloud Run Anda:
Konsol
Pada konsol Google Cloud, buka halaman tugas Cloud Run.
Klik tugas yang Anda minati untuk membuka halaman Detail pekerjaan.
Klik tab Konfigurasi.
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
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
.