Mengonfigurasi secret
Anda dapat menggunakan Secret Manager untuk menyimpan kunci API, sandi, dan informasi sensitif lainnya dengan aman. Panduan ini menunjukkan cara mengonfigurasi Cloud Functions untuk mengakses secret yang disimpan di Secret Manager.
Dokumen ini membahas kedua cara membuat secret tersedia untuk fungsi Anda:
Memasang secret sebagai volume. Hal ini membuat secret tersedia untuk fungsi sebagai file. Jika Anda mereferensikan secret sebagai volume, fungsi Anda akan mengakses nilai secret dari Secret Manager setiap kali file dibaca dari disk. Hal ini menjadikan pemasangan sebagai volume sebagai strategi yang baik jika Anda ingin mereferensikan versi secret terbaru, bukan versi secret yang disematkan. Metode ini juga berfungsi dengan baik jika Anda berencana untuk mengimplementasikan rotasi secret.
Meneruskan secret sebagai variabel lingkungan. Nilai variabel lingkungan di-resolve pada waktu startup instance, jadi jika Anda menggunakan metode ini, sebaiknya referensikan versi secret yang disematkan, bukan mereferensikan versi terbaru secret.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan Secret Manager, lihat ringkasan Secret Manager. Untuk mempelajari cara membuat dan mengakses secret, lihat Membuat secret.
Sebelum memulai
-
Aktifkan API Secret Manager.
- Jika Anda belum melakukannya, buat secret di Secret Manager, seperti yang dijelaskan dalam Membuat secret.
Memberikan akses ke secret
Fungsi Anda dapat mengakses secret yang berada dalam project yang sama dengan fungsi, serta secret yang berada dalam project lain. Untuk mengakses secret, akun layanan runtime fungsi harus diberi akses ke secret tersebut.
Secara default, Cloud Functions menggunakan akun layanan default App Engine untuk melakukan autentikasi dengan Secret Manager. Untuk penggunaan produksi, Google merekomendasikan agar Anda mengonfigurasi fungsi untuk mengautentikasi menggunakan akun layanan yang dikelola pengguna yang diberi kumpulan peran yang paling tidak permisif yang diperlukan untuk menyelesaikan tugas fungsi tersebut.
Untuk menggunakan
Secret Manager dengan Cloud Functions, tetapkan
peran roles/secretmanager.secretAccessor
ke akun layanan yang terkait dengan
fungsi Anda:
Buka halaman Secret Manager di konsol Google Cloud:
Buka halaman Secret ManagerKlik kotak centang di samping secret.
Jika belum terbuka, klik Tampilkan Panel Info untuk membuka panel.
Di panel info, klik Tambah akun utama.
Di kolom Akun utama baru, masukkan akun layanan yang digunakan fungsi Anda untuk identitasnya. Akun layanan fungsi adalah salah satu dari yang berikut:
Akun layanan yang dikelola pengguna yang ditetapkan ke fungsi pada waktu deployment. Untuk mempelajari cara men-deploy fungsi dengan akun layanan yang dikelola pengguna, lihat Menggunakan akun layanan individual untuk fungsi Anda.
Akun layanan default App Engine (tidak direkomendasikan untuk penggunaan produksi).
Di menu drop-down Select a role, pilih Secret Manager, lalu Secret Manager Secret Accessor.
Menyiapkan fungsi Anda untuk mengakses secret
Ada dua cara untuk membuat secret tersedia untuk fungsi Anda:
- Meneruskan secret sebagai variabel lingkungan.
- Memasang secret sebagai volume.
Variabel lingkungan
Untuk menggunakan variabel lingkungan agar secret tersedia untuk fungsi Anda:
- Tetapkan variabel lingkungan runtime selama deployment fungsi.
- Buat secret tersebut dapat diakses oleh fungsi Anda dalam variabel lingkungan.
- Akses variabel lingkungan secara terprogram pada runtime.
Memasang secret sebagai volume
Untuk memasang secret sebagai volume:
Buat file yang berisi secret Anda.
Pilih direktori non-sistem yang tidak digunakan, seperti
/mnt/secrets
, sebagai jalur pemasangan untuk secret Anda. Setiap file atau subdirektori yang sudah ada sebelumnya dalam direktori tersebut selain secret Anda dan versinya menjadi tidak dapat diakses setelah secret terpasang.Jadikan secret tersebut dapat diakses oleh fungsi Anda sebagai volume terpasang.
Saat runtime, baca konten file secara terprogram untuk mengakses nilai secret.
Misalnya, jika secret telah dipasang ke /mnt/secrets/secret1
, fungsi
tersebut harus membaca file ini. Berikut adalah contoh cara membaca
file secara sinkron menggunakan Node.js:
fs.readFileSync('/mnt/secrets/secret1')
Membuat secret dapat diakses oleh suatu fungsi
Untuk mereferensikan secret dari suatu fungsi, Anda harus membuat secret tersebut dapat diakses oleh fungsi terlebih dahulu. Anda dapat membuat secret dapat diakses oleh fungsi baru atau yang sudah ada menggunakan konsol Google Cloud atau Google Cloud CLI:
Konsol
Untuk membuat secret dapat diakses oleh suatu fungsi:
Buka halaman Cloud Functions di konsol Google Cloud:
Buka halaman Cloud FunctionsKlik nama fungsi yang Anda inginkan agar dapat mengakses secret.
Klik Edit.
Klik Runtime, build ... untuk meluaskan opsi konfigurasi lanjutan.
Klik Security and Image Repo untuk membuka tab.
Klik Add a Secret Reference untuk menetapkan rahasia bagi fungsi tersebut.
Pilih secret untuk membuatnya dapat diakses. Jika perlu, buat secret.
Untuk mereferensikan secret dalam project yang sama dengan fungsi Anda:
- Pilih rahasia dari menu drop-down.
Untuk mereferensikan secret dari project lain:
Pastikan akun layanan project Anda telah diberi akses ke secret tersebut.
Pilih Masukkan rahasia secara manual.
Masukkan ID resource secret dalam format berikut:
projects/PROJECT_ID/secrets/SECRET_NAME
Ganti kode berikut:
PROJECT_ID: ID project tempat secret berada.
SECRET_NAME: Nama secret di Secret Manager.
Pilih metode referensi untuk secret tersebut. Anda dapat memasang secret sebagai volume atau mengekspos secret sebagai variabel lingkungan.
Untuk memasang secret sebagai volume:
Pilih Dipasang sebagai volume.
Di kolom Mount path, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.
Di kolom Path1, masukkan nama file yang akan dipasang. Nama ini digabungkan dengan jalur pemasangan dari langkah sebelumnya untuk membentuk jalur pemasangan lengkap tempat secret Anda dipasang.
Dari drop-down Version1, pilih versi rahasia yang akan dirujuk.
Anda dapat memasang versi tambahan secret ini dengan mengklik +Add untuk menentukan jalur tambahan dan versi rahasia ini yang akan dipasang di dalamnya.
Untuk mengekspos secret sebagai variabel lingkungan:
Pilih Diekspos sebagai variabel lingkungan.
Di kolom Name1, masukkan nama variabel lingkungan.
Dari drop-down Version1, pilih versi rahasia yang akan dirujuk.
Anda dapat mengekspos versi tambahan rahasia ini ke fungsi Anda dengan mengklik +Add untuk menentukan variabel lingkungan tambahan dan versi rahasia ini yang akan disimpan di dalamnya.
Klik Done.
Klik Next.
Klik Deploy.
Kode fungsi Anda sekarang dapat mereferensikan secret tersebut.
gcloud
Agar secret dapat diakses oleh suatu fungsi, masukkan salah satu perintah berikut.
Untuk memasang secret sebagai volume, masukkan perintah berikut:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
SECRET_FILE_PATH: Jalur lengkap secret. Misalnya,
/mnt/secrets/primary/latest
, dengan/mnt/secrets/primary/
sebagai jalur pemasangan danlatest
sebagai jalur secret. Anda juga dapat menentukan jalur pemasangan dan secret secara terpisah:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: Nama secret di Secret Manager.
VERSION: Versi secret yang akan digunakan. Misalnya,
1
ataulatest
.
Flag
--set-secrets
mengganti semua secret yang sudah ada. Untuk mempertahankan secret fungsi yang sudah ada, gunakan flag--update-secrets
.Untuk mengekspos secret sebagai variabel lingkungan, masukkan perintah berikut:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
ENV_VAR_NAME: Nama variabel lingkungan.
SECRET: Nama secret di Secret Manager.
VERSION: Versi secret yang akan digunakan. Misalnya,
1
ataulatest
.
Flag
--set-secrets
mengganti semua secret yang sudah ada. Untuk mempertahankan secret fungsi yang sudah ada, gunakan flag--update-secrets
.Anda dapat mereferensikan secret dari project lain jika akun layanan fungsi telah diberi akses ke secret tersebut. Untuk mereferensikan secret dari project lain, gunakan jalur resource secret:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
SECRET_RESOURCE_PATH: Jalur resource untuk secret yang berada di project lain. Jalur resource menggunakan format berikut:
projects/PROJECT_ID/secrets/SECRET_NAME
Ganti kode berikut:
PROJECT_ID: ID project tempat secret berada.
SECRET_NAME: Nama secret di Secret Manager.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
SECRET_FILE_PATH: Jalur lengkap secret. Misalnya,
/mnt/secrets/primary/latest
, dengan/mnt/secrets/primary/
sebagai jalur pemasangan danlatest
sebagai jalur secret. Anda juga dapat menentukan jalur pemasangan dan secret secara terpisah:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: Nama secret di Secret Manager.
VERSION: Versi secret yang akan digunakan. Misalnya,
1
ataulatest
.
Anda dapat memperbarui beberapa secret sekaligus. Pisahkan opsi konfigurasi untuk setiap secret dengan koma. Perintah berikut memperbarui satu secret yang dipasang sebagai volume dan secret lain yang diekspos sebagai variabel lingkungan.
Untuk memperbarui secret yang ada, masukkan perintah berikut:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \ SECRET_FILE_PATH=SECRET:VERSION'
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
ENV_VAR_NAME: Nama variabel lingkungan.
SECRET: Nama secret di Secret Manager.
VERSION: Versi secret yang akan digunakan. Misalnya,
1
ataulatest
.SECRET_FILE_PATH: Jalur lengkap secret. Misalnya,
/mnt/secrets/primary/latest
, dengan/mnt/secrets/primary/
sebagai jalur pemasangan danlatest
sebagai jalur secret. Anda juga dapat menentukan jalur pemasangan dan secret secara terpisah:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
Menghapus secret dari fungsi
Anda dapat menghapus secret dari fungsi menggunakan konsol Google Cloud atau gcloud CLI:
Konsol
Buka halaman Cloud Functions di Konsol Google Cloud:
Buka halaman Cloud FunctionsKlik nama fungsi untuk menghapus salah satu secretnya.
Klik Edit.
Klik Runtime, build and connections settings untuk meluaskan opsi konfigurasi lanjutan.
Klik Security and Image Repo untuk membuka tab keamanan.
Tahan kursor ke rahasia yang ingin Anda hapus, lalu klik
Delete.Klik Next.
Klik Deploy.
gcloud
Anda dapat menghapus semua secret dari fungsi atau menentukan satu atau beberapa secret yang akan dihapus:
Untuk menghapus semua secret, jalankan perintah berikut:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --clear-secrets
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
Semua secret dihapus dari fungsi.
Untuk menentukan daftar secret yang akan dihapus, gunakan flag
--remove-secrets
. Perintah berikut memperbarui satu secret yang dipasang sebagai volume dan secret lain yang diekspos sebagai variabel lingkungan.gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME \ --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
Ganti kode berikut:
FUNCTION_NAME: Nama fungsi Anda.
RUNTIME: Runtime yang digunakan untuk menjalankan fungsi Anda.
ENV_VAR_NAME: Nama variabel lingkungan.
SECRET_FILE_PATH: Jalur lengkap secret. Misalnya,
/mnt/secrets/primary/latest
, dengan/mnt/secrets/primary/
sebagai jalur pemasangan danlatest
sebagai jalur secret. Anda juga dapat menentukan jalur pemasangan dan secret secara terpisah:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
Secret yang ditentukan akan dihapus dari fungsi.
Melihat secret yang dapat diakses fungsi Anda
Anda dapat melihat secret mana yang dapat diakses oleh fungsi Anda menggunakan Google Cloud Console atau gcloud CLI:
Konsol
Buka halaman Cloud Functions di konsol Google Cloud:
Buka halaman Cloud FunctionsKlik nama fungsi untuk melihat secret yang tersedia.
Klik Edit.
Klik Runtime, build and connections settings untuk meluaskan opsi konfigurasi lanjutan.
Klik Keamanan untuk membuka tab keamanan.
Tab {i>security<i} mencantumkan rahasia yang dapat diakses oleh fungsi Anda.
gcloud
Untuk melihat secret yang tersedia untuk fungsi Anda, gunakan
perintah gcloud functions describe
:
gcloud functions describe FUNCTION_NAME
Ganti FUNCTION_NAME dengan nama fungsi Anda.
Langkah selanjutnya
- Pertimbangkan untuk mengembangkan fungsi yang menggunakan Secret Manager menggunakan library klien Secret Manager.