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

  1. Aktifkan API Secret Manager.

    Mengaktifkan API

  2. 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:

  1. Buka halaman Secret Manager di konsol Google Cloud:
    Buka halaman Secret Manager

  2. Klik kotak centang di samping secret.

  3. Jika belum terbuka, klik Tampilkan Panel Info untuk membuka panel.

  4. Di panel info, klik Tambah akun utama.

  5. Di kolom Akun utama baru, masukkan akun layanan yang digunakan fungsi Anda untuk identitasnya. Akun layanan fungsi adalah salah satu dari yang berikut:

  6. 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:

  1. Tetapkan variabel lingkungan runtime selama deployment fungsi.
  2. Buat secret tersebut dapat diakses oleh fungsi Anda dalam variabel lingkungan.
  3. Akses variabel lingkungan secara terprogram pada runtime.

Memasang secret sebagai volume

Untuk memasang secret sebagai volume:

  1. Buat file yang berisi secret Anda.

  2. 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.

  3. Jadikan secret tersebut dapat diakses oleh fungsi Anda sebagai volume terpasang.

  4. 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:

  1. Buka halaman Cloud Functions di konsol Google Cloud:
    Buka halaman Cloud Functions

  2. Klik nama fungsi yang Anda inginkan agar dapat mengakses secret.

  3. Klik Edit.

  4. Klik Runtime, build ... untuk meluaskan opsi konfigurasi lanjutan.

  5. Klik Security and Image Repo untuk membuka tab.

  6. Klik Add a Secret Reference untuk menetapkan rahasia bagi fungsi tersebut.

  7. Pilih secret untuk membuatnya dapat diakses. Jika perlu, buat secret.

    • Untuk mereferensikan secret dalam project yang sama dengan fungsi Anda:

      1. Pilih rahasia dari menu drop-down.
    • Untuk mereferensikan secret dari project lain:

      1. Pastikan akun layanan project Anda telah diberi akses ke secret tersebut.

      2. Pilih Masukkan rahasia secara manual.

      3. 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.

  8. Pilih metode referensi untuk secret tersebut. Anda dapat memasang secret sebagai volume atau mengekspos secret sebagai variabel lingkungan.

    • Untuk memasang secret sebagai volume:

      1. Pilih Dipasang sebagai volume.

      2. Di kolom Mount path, masukkan jalur pemasangan untuk secret ini. Ini adalah direktori tempat semua versi rahasia Anda ditempatkan.

      3. 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.

      4. Dari drop-down Version1, pilih versi rahasia yang akan dirujuk.

      5. 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:

      1. Pilih Diekspos sebagai variabel lingkungan.

      2. Di kolom Name1, masukkan nama variabel lingkungan.

      3. Dari drop-down Version1, pilih versi rahasia yang akan dirujuk.

      4. 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.

  9. Klik Done.

  10. Klik Next.

  11. 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 dan latest 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 atau latest.

    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 atau latest.

    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 dan latest 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 atau latest.

  • 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 atau latest.

    • SECRET_FILE_PATH: Jalur lengkap secret. Misalnya, /mnt/secrets/primary/latest, dengan /mnt/secrets/primary/ sebagai jalur pemasangan dan latest 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

  1. Buka halaman Cloud Functions di Konsol Google Cloud:
    Buka halaman Cloud Functions

  2. Klik nama fungsi untuk menghapus salah satu secretnya.

  3. Klik Edit.

  4. Klik Runtime, build and connections settings untuk meluaskan opsi konfigurasi lanjutan.

  5. Klik Security and Image Repo untuk membuka tab keamanan.

  6. Tahan kursor ke rahasia yang ingin Anda hapus, lalu klik Delete.

  7. Klik Next.

  8. 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 dan latest 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

  1. Buka halaman Cloud Functions di konsol Google Cloud:
    Buka halaman Cloud Functions

  2. Klik nama fungsi untuk melihat secret yang tersedia.

  3. Klik Edit.

  4. Klik Runtime, build and connections settings untuk meluaskan opsi konfigurasi lanjutan.

  5. 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