Layanan Anda mungkin harus memiliki dependensi yang memerlukan kunci API, sandi, atau informasi sensitif lainnya. Untuk Cloud Run, Google merekomendasikan agar Anda menyimpan jenis informasi sensitif 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 pemeriksaan secret saat deployment dan runtime
Selama deployment layanan, semua secret yang digunakan, baik sebagai variabel lingkungan atau yang dipasang sebagai volume, akan diperiksa guna memastikan akun layanan yang digunakan untuk menjalankan container ini memiliki akses ke secret. Jika ada pemeriksaan yang gagal, deployment layanan akan gagal.
Selama runtime, ketika sistem 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, identitas yang memiliki file dan direktori akan berbeda bergantung pada lingkungan eksekusi workload dan apakah deployment terdiri dari satu atau banyak container.
Di lingkungan eksekusi generasi pertama tempat Anda men-deploy satu container, volumenya dimiliki oleh identitas yang digunakan untuk container. Dalam kasus lainnya, volume dimiliki oleh root. Hal ini mencakup:
- Lingkungan eksekusi generasi pertama tempat Anda men-deploy banyak container
- Lingkungan generasi kedua
Izinkan Cloud Run mengakses secret
Anda dapat menggunakan secret pada Secret Manager yang sudah ada buat secret baru. Namun, untuk mengakses secret tersebut, Anda harus memberikan peran Secret Accessor Secret Manager ke akun layanan yang digunakan untuk identitas layanan Cloud Run.
Saat Anda memilih secret dari halaman Cloud Run di konsol Google Cloud, pemeriksaan izin akan otomatis dilakukan dan Anda diminta untuk menambahkan izin yang tidak tersedia.
Untuk melakukan tindakan ini secara manual:
Buka halaman Secret Manager di konsol Google Cloud:
Klik secret dalam daftar
Di tab Izin, klik Beri Akses.
Di kotak teks New principals, masukkan email identitas layanan Cloud Run Anda.
Beri peran Secret Manager Secret Accessor.
Membuat secret dapat diakses oleh Cloud Run
Setiap perubahan konfigurasi akan menghasilkan revisi baru. Revisi selanjutnya juga akan otomatis mendapatkan setelan konfigurasi ini, kecuali jika Anda melakukan pembaruan eksplisit untuk mengubahnya.
Anda dapat membuat secret bisa diakses oleh layanan Anda menggunakan Google Cloud Console, Google Cloud CLI, atau file YAML saat men-deploy layanan baru atau memperbarui layanan yang sudah ada dan men-deploy revisi:
Konsol
Di konsol Google Cloud, buka Cloud Run:
Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang ada, klik layanan, lalu klik Edit and deploy new revision.
Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal sesuai keinginan, kemudian klik Container, vo;ume, jejaring, sekuritas untuk memperluas halaman konfigurasi layanan.
Klik tab Container.
- Di bagian Secret:
- Klik Referensikan Secret.
- Pilih secret yang ingin Anda gunakan dari daftar pull-down 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 Done.
- Jika Anda mengekspos secret sebagai variabel lingkungan:
- Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
- Klik Done.
- Di bagian Secret:
Klik Buat atau Deploy.
Command line
Agar secret dapat diakses oleh layanan Anda, masukkan salah satu perintah berikut.
Untuk memasang secret sebagai volume saat men-deploy layanan:
gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=SECRET_NAME:VERSION
Ganti:
SERVICE
dengan nama layanan Anda.- IMAGE_URL dengan referensi 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.SECRET_NAME
dengan nama secret dalam project yang sama, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
untuk versi terbaru, atau nomor, misalnya,2
.
Untuk menampilkan secret sebagai variabel lingkungan saat men-deploy layanan
gcloud run deploy SERVICE \ --image IMAGE_URL \ --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION
Ganti:
SERVICE
dengan nama layanan Anda.- IMAGE_URL dengan referensi 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
ENV_VAR_NAME
dengan nama variabel lingkungan yang ingin Anda gunakan dengan secret.SECRET_NAME
dengan nama secret dalam project yang sama, misalnyamysecret
.VERSION
dengan versi secret. Gunakanlatest
untuk versi terbaru, atau nomor, misalnya,2
.
Anda dapat memperbarui beberapa secret secara bersamaan. Untuk melakukannya, pisahkan opsi konfigurasi untuk setiap secret dengan koma. Perintah berikut memperbarui satu secret yang dipasang sebagai volume dan secret lain yang ditampilkan sebagai variabel lingkungan.
Untuk memperbarui secret yang ada, masukkan perintah berikut:
gcloud run deploy SERVICE --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 layanan, gunakan flag
--set-secrets
:gcloud run services update SERVICE \ --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"
YAML
Anda dapat mendownload dan melihat konfigurasi layanan yang ada menggunakan
perintah gcloud run services describe --format export
, yang memberikan hasil
yang telah diolah dalam format YAML.
Kemudian, Anda dapat mengubah kolom yang dijelaskan di bawah ini dan
mengunggah YAML yang telah dimodifikasi menggunakan perintah gcloud run services replace
.
Pastikan Anda hanya mengubah kolom seperti yang didokumentasikan.
Untuk melihat dan mendownload konfigurasi:
gcloud run services describe SERVICE --format export > service.yaml
Untuk secret yang ditampilkan sebagai variabel lingkungan, di bagian
env
, perbarui ENV_VAR, VERSION, dan/atau SECRET_NAME sesuai keinginan. Jika Anda memiliki beberapa secret yang dipasang sebagai variabel lingkungan, Anda akan memiliki beberapa atribut tersebut.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE_URL env: - name: ENV_VAR valueFrom: secretKeyRef: key: VERSION name: SECRET_NAME
Untuk secret yang dipasang sebagai jalur file, perbarui MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME, dan/atau SECRET_NAME sesuai keinginan. Jika Anda memiliki beberapa secret yang dipasang sebagai jalur file, Anda akan memiliki beberapa atribut tersebut.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_NAME
Perlu diperhatikan bahwa
VOLUME_NAME
dapat disetel ke nama apa pun.Ganti
- SERVICE dengan nama layanan Cloud Run Anda
- IMAGE_URL dengan referensi 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
- REVISION dengan nama revisi baru atau hapus (jika ada). Jika Anda memberikan nama revisi baru, nama tersebut harus memenuhi kriteria berikut:
- Dimulai dengan
SERVICE-
- Hanya berisi huruf kecil, angka, dan
-
- Tidak diakhiri dengan
-
- Tidak melebihi 63 karakter
- Dimulai dengan
Ganti layanan dengan konfigurasinya yang baru menggunakan perintah berikut:
gcloud run services replace service.yaml
Terraform
Buat secret dan versi secret.
Buat akun layanan dan beri akun layanan tersebut akses ke secret:
Secret Manager, secret dapat diakses dari Cloud Run sebagai jalur file yang terpasang atau sebagai variabel lingkungan.
Untuk secret yang dipasang sebagai jalur file, referensikan resource Secret Manager di parameter
volumes
.name
sesuai dengan entri dalam parametervolume_mounts
:Untuk secret yang ditampilkan sebagai variabel lingkungan, referensikan resource Secret Manager dalam parameter
env
:
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 Cloud Run:
Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang ada, klik layanan, lalu klik Edit and deploy new revision.
Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal sesuai keinginan, kemudian klik Container, vo;ume, jejaring, sekuritas untuk memperluas halaman konfigurasi layanan.
Klik tab Container.
- Di bagian Secret:
- Klik Referensikan Secret.
- Tidak melihat ID resource secret Anda? Masukkan ID resource secret dari menu pull-down Secret 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 Done.
- Jika Anda mengekspos secret sebagai variabel lingkungan:
- Berikan Nama variabel dan pilih versi secret, atau terbaru untuk selalu menggunakan versi secret saat ini.
- Klik Done.
- Di bagian Secret:
Klik Buat atau Deploy.
Command line
Untuk memasang secret sebagai volume saat men-deploy layanan:
gcloud run deploy SERVICE --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
Ganti:
SERVICE
dengan nama layanan Anda.- IMAGE_URL dengan referensi 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
Anda dapat mendownload dan melihat konfigurasi layanan yang ada menggunakan
perintah gcloud run services describe --format export
, yang memberikan hasil
yang telah diolah dalam format YAML.
Kemudian, Anda dapat mengubah kolom yang dijelaskan di bawah ini dan
mengunggah YAML yang telah dimodifikasi menggunakan perintah gcloud run services replace
.
Pastikan Anda hanya mengubah kolom seperti yang didokumentasikan.
Untuk melihat dan mendownload konfigurasi:
gcloud run services describe SERVICE --format export > service.yaml
Karena keterbatasan terkait kompatibilitas API, lokasi secret harus disimpan dalam anotasi.
Untuk secret yang ditampilkan sebagai variabel lingkungan:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: 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: VERSION name: SECRET_LOOKUP_NAME
Ganti:
SERVICE
dengan nama layanan Anda.- IMAGE_URL dengan referensi 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
ENV_VAR
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
Untuk secret yang dipasang sebagai jalur file:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME 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:
SERVICE
dengan nama layanan Anda.- IMAGE_URL dengan referensi 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 untuk layanan Cloud Run Anda:
Konsol
Di konsol Google Cloud, buka Cloud Run:
Klik layanan yang Anda minati untuk membuka halaman Detail layanan.
Klik tab Revisi.
Pada panel detail di sebelah kanan, setelan secret dicantumkan di bagian tab Container.
Command line
Gunakan perintah berikut:
gcloud run services describe SERVICE
Temukan setelan secret dalam konfigurasi yang ditampilkan.
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.
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, maka file atau folder apa pun di direktori yang ada tidak akan dapat diakses.
Misalnya, jika secret yang disebut my-secret
dipasang ke jalur /etc/app_data
, semua konten di dalam direktori app_data
akan ditimpa. Agar tidak menimpa direktori yang ada, sediakan jalur yang akan membuat direktori baru, misalnya. /etc/app_data/secrets
. Tindakan ini akan membuat jalur pemasangan /etc/app_data/secrets/my-secret
yang akan berisi rahasia tersebut.