Halaman ini menjelaskan cara mengonfigurasi dan menggunakan notifikasi peristiwa untuk secret Anda di Secret Manager.
Ringkasan
Secret Manager terintegrasi dengan Pub/Sub untuk memberikan notifikasi peristiwa terkait perubahan pada secret dan versi secret. Anda dapat menggunakan notifikasi ini untuk memulai alur kerja, seperti memulai ulang aplikasi saat versi secret baru ditambahkan, atau memberi tahu engineer keamanan saat secret dihapus. Untuk mengetahui informasi selengkapnya tentang cara menggunakan notifikasi ini untuk memulai alur kerja, lihat dokumentasi Pub/Sub.
Cara kerja notifikasi peristiwa di Secret Manager
Secret dapat dikonfigurasi dengan daftar hingga 10 topik Pub/Sub. Setiap kali operasi
dilakukan yang mengubah secret atau salah satu versinya, Secret Manager akan otomatis
memublikasikan pesan ke setiap topik Pub/Sub pada secret tersebut.
Panggilan Get
, List
, dan Access
tidak menghasilkan publikasi pesan.
Pesan Pub/Sub memiliki serangkaian pasangan nilai kunci atribut yang berisi metadata tentang peristiwa, serta kolom data yang berisi serialisasi JSON lengkap dari resource Secret
atau SecretVersion
yang dibuat atau diubah. JSON ini adalah string yang dienkode UTF-8 yang merepresentasikan resource
Secret
atau SecretVersion
dalam bentuk yang persis seperti yang ditentukan oleh
Secret Manager public API, dienkode dalam JSON seperti yang ditentukan dalam
Pemetaan JSON proto3.
Jenis peristiwa
Berikut adalah daftar jenis peristiwa yang didukung oleh Secret Manager.
Jenis peristiwa | Deskripsi |
---|---|
SECRET_CREATE |
Dikirim saat secret baru berhasil dibuat. |
SECRET_UPDATE |
Dikirim saat rahasia baru berhasil diperbarui. |
SECRET_DELETE |
Dikirim saat secret dihapus, baik karena permintaan yang dimulai pengguna maupun karena masa berlaku secret berakhir. |
SECRET_VERSION_ADD |
Dikirim saat versi rahasia baru berhasil ditambahkan. |
SECRET_VERSION_ENABLE |
Dikirim saat versi secret diaktifkan. |
SECRET_VERSION_DISABLE |
Dikirim saat versi secret dinonaktifkan. |
SECRET_VERSION_DESTROY |
Dikirim saat versi secret dihancurkan. |
SECRET_VERSION_DESTROY_SCHEDULED |
Dikirim saat durasi penundaan penghancuran dikonfigurasi pada rahasia dan pengguna mencoba menghancurkan versi rahasia. |
SECRET_ROTATE |
Dikirim saat waktunya merotasi secret. Lihat Membuat jadwal rotasi untuk mengetahui informasi selengkapnya. |
TOPIC_CONFIGURED |
Ini adalah pesan pengujian tanpa isi atau atribut selain Pesan Setiap kali topik diperbarui pada secret, pesan |
Format notifikasi
Notifikasi yang dikirim ke topik Pub/Sub terdiri dari dua bagian:
-
Atribut: Kumpulan key-value pair yang mendeskripsikan acara.
-
Data: String yang berisi metadata objek yang diubah.
Atribut
Atribut adalah key-value pair yang terdapat dalam notifikasi yang dikirim oleh Secret Manager ke topik Pub/Sub Anda. Semua notifikasi selain TOPIC_CONFIGURED
pesan pengujian
selalu berisi serangkaian key:value pair berikut, terlepas dari data notifikasi:
Contoh | Deskripsi | |
---|---|---|
eventType |
SECRET_CREATE |
Jenis peristiwa yang baru saja terjadi. Lihat Jenis peristiwa untuk mengetahui daftar kemungkinan nilai. |
dataFormat |
JSON_API_V1 |
Format data objek. |
secretId |
projects/p/secrets/my-secret |
Nama lengkap resource rahasia tempat peristiwa terjadi. |
timestamp |
2021-01-20T11:17:45.081104-08:00 |
Waktu terjadinya peristiwa. |
Selain itu, notifikasi terkadang berisi serangkaian key-value pair berikut:
Contoh | Deskripsi | |
---|---|---|
versionId |
projects/p/secrets/my-secret/versions/456 |
Nama versi rahasia tempat peristiwa terjadi.
Ini hanya ada di notifikasi peristiwa
|
deleteType |
REQUESTED |
Apakah penghapusan diminta oleh pengguna (REQUESTED )
atau karena masa berlaku rahasia berakhir (EXPIRATION ). Hanya ada di
notifikasi peristiwa SECRET_DELETE .
|
Data
Kolom data adalah string UTF-8 yang berisi metadata objek yang diubah. Data berupa secret atau versi secret.
Untuk notifikasi SECRET_DELETE
, metadata yang dimuat dalam kolom data menampilkan metadata objek seperti sebelum penghapusan. Untuk semua notifikasi lainnya, metadata yang disertakan dalam kolom data mewakili metadata objek setelah perubahan terjadi.
Batasan
Notifikasi peristiwa hanya tersedia di Secret Manager API v1 dan Google Cloud CLI.
Sebelum memulai
Anda dapat memilih untuk menyimpan semua resource dalam project yang sama atau menyimpan topik Pub/Sub dan secret dalam project yang berbeda.
-
Untuk menyiapkan Secret Manager, selesaikan langkah-langkah berikut:
-
Buat atau gunakan project yang ada untuk menyimpan resource Secret Manager Anda.
-
Jika perlu, selesaikan langkah-langkah yang disebutkan di halaman Mengaktifkan Secret Manager API.
-
-
Untuk menyiapkan Pub/Sub, selesaikan langkah-langkah berikut:
-
Buat atau gunakan project yang ada untuk menyimpan resource Pub/Sub Anda.
-
Jika perlu, aktifkan Pub/Sub API.
-
-
Lakukan autentikasi ke Google Cloud menggunakan perintah berikut:
$ gcloud auth login --update-adc
Membuat identitas agen layanan
Untuk membuat identitas agen layanan untuk setiap project yang memerlukan rahasia dengan notifikasi peristiwa, ikuti langkah-langkah berikut:
-
Untuk membuat identitas layanan dengan Google Cloud CLI, jalankan perintah berikut:
$ gcloud beta services identity create \ --service "secretmanager.googleapis.com" \ --project "PROJECT_ID"
Perintah ini menampilkan nama akun layanan, dengan format berikut:
service-PROJECT_ID@gcp-sa-secretmanager.iam.gserviceaccount.com
-
Beri akun layanan ini izin untuk memublikasikan di topik Pub/Sub yang dikonfigurasi di rahasia Anda.
-
Simpan nama akun layanan sebagai variabel lingkungan menggunakan perintah berikut:
# This is from the output of the command above $ export SM_SERVICE_ACCOUNT="service-...."
Variabel lingkungan untuk project Secret Manager, project Pub/Sub, dan akun layanan Secret Manager harus disetel selama Anda mengikuti prosedur ini.
Membuat topik Pub/Sub
Ikuti panduan memulai Pub/Sub untuk membuat topik di project Pub/Sub Anda di konsol Google Cloud . Atau, buat topik di Google Cloud CLI menggunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- PUBSUB_PROJECT_ID: ID project tempat langganan akan dibuat
- PUBSUB_TOPIC_NAME: nama topik
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Windows (PowerShell)
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Windows (cmd.exe)
gcloud pubsub topics create "projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME"
Ulangi langkah ini beberapa kali jika Anda ingin membuat beberapa topik Pub/Sub pada rahasia.
Memberi akun layanan untuk Secret Manager izin untuk memublikasikan di topik
Anda dapat memberikan izin ke akun layanan Secret Manager melalui konsol Google Cloud atau melalui Google Cloud CLI.
Untuk memberikan peran Pub/Sub Publisher (roles/pubsub.publisher
) di
topik Pub/Sub, gunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- PUBSUB_TOPIC_NAME: nama topik
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME \ --member "serviceAccount:${SM_SERVICE_ACCOUNT}" \ --role "roles/pubsub.publisher"
Windows (PowerShell)
gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME ` --member "serviceAccount:${SM_SERVICE_ACCOUNT}" ` --role "roles/pubsub.publisher"
Windows (cmd.exe)
gcloud pubsub topics add-iam-policy-binding PUBSUB_TOPIC_NAME ^ --member "serviceAccount:${SM_SERVICE_ACCOUNT}" ^ --role "roles/pubsub.publisher"
Membuat langganan Pub/Sub
Untuk melihat pesan yang dipublikasikan ke suatu topik, Anda juga harus membuat langganan ke topik tersebut. Ikuti panduan memulai Pub/Sub untuk membuat langganan di project Pub/Sub Anda di konsol Google Cloud . Atau, buat topik di Google Cloud CLI menggunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- PUBSUB_PROJECT_ID: ID project tempat langganan akan dibuat
- PUBSUB_SUBSCRIPTION_NAME: nama langganan
- PUBSUB_TOPIC_NAME: nama topik
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME \ --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Windows (PowerShell)
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME ` --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Windows (cmd.exe)
gcloud pubsub subscriptions create projects/PUBSUB_PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_NAME ^ --topic projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_NAME
Membuat secret dengan topik yang dikonfigurasi
Buat rahasia dengan daftar hingga 10 topik yang dikonfigurasi. Semua topik yang dikonfigurasi pada secret menerima notifikasi peristiwa saat secret atau salah satu versinya berubah.
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- PUBSUB_TOPIC_NAME: nama topik
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME
Windows (PowerShell)
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME
Windows (cmd.exe)
gcloud secrets create SECRET_ID --topics PUBSUB_TOPIC_NAME
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: Google Cloud project ID
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- TOPIC_NAME: nama topik
Metode HTTP dan URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID
Isi JSON permintaan:
{ "replication":{ "automatic":{} }, "topics":{ "name": "TOPIC_NAME" } }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"
PowerShell
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
Anda akan melihat respons JSON seperti berikut:
{ "name": "/projects/my-project/locations/me-central2/secrets/my-drz-secret", "createTime": "2024-03-25T08:24:13.153705Z", "etag": "\"161477e6071da9\"" }
Memperbarui topik rahasia
Ubah topik Pub/Sub yang dikonfigurasi pada secret dengan memperbarui secret menggunakan nama resource topik Pub/Sub yang baru. Dengan Google Cloud CLI, Anda dapat menambahkan atau menghapus satu atau beberapa topik dari secret, serta menghapus semua topik dari secret.
Menambahkan topik
Untuk menambahkan satu atau beberapa topik ke secret, gunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- PROJECT_ID: Google Cloud project ID yang berisi secret
- PUBSUB_PROJECT_ID: ID project tempat langganan akan dibuat
- PUBSUB_TOPIC_1_NAME dan PUBSUB_TOPIC_2_NAME: nama topik yang Anda tambahkan ke secret
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud secrets update SECRET_ID \ --project PROJECT_ID \ --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --project PROJECT_ID ` --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --project PROJECT_ID ^ --add-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Menghapus topik
Untuk menghapus satu atau beberapa topik dari secret, gunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- PROJECT_ID: Google Cloud project yang berisi secret
- PUBSUB_PROJECT_ID: ID project tempat langganan akan dibuat
- PUBSUB_TOPIC_1_NAME dan PUBSUB_TOPIC_2_NAME: nama topik yang Anda hapus dari secret
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud secrets update SECRET_ID \ --project PROJECT_ID \ --remove-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --project PROJECT_ID ` --remove-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --project PROJECT_ID ^ --remove-topics projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_1_NAME,projects/PUBSUB_PROJECT_ID/topics/PUBSUB_TOPIC_2_NAME
Hapus topik
Untuk menghapus semua topik dari secret, gunakan perintah berikut:
gcloud
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret
- PROJECT_ID: Google Cloud project yang berisi secret
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud secrets update SECRET_ID \ --project PROJECT_ID \ --clear-topics
Windows (PowerShell)
gcloud secrets update SECRET_ID ` --project PROJECT_ID ` --clear-topics
Windows (cmd.exe)
gcloud secrets update SECRET_ID ^ --project PROJECT_ID ^ --clear-topics
Menggunakan notifikasi peristiwa dengan fungsi Cloud Run
Notifikasi peristiwa dapat digunakan untuk memulai alur kerja dengan membuat fungsi Cloud Run untuk menggunakan pesan Pub/Sub. Lihat dokumentasi Cloud Run Functions
untuk mengetahui informasi selengkapnya. Contoh kode berikut adalah untuk fungsi Cloud Run yang mencetak eventType
,
secretId
, dan metadata setiap kali peristiwa dipublikasikan ke topik.
C#
Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu dan instal Secret Manager C# SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using Google.Events.Protobuf.Cloud.PubSub.V1; using System; using System.Threading; using System.Threading.Tasks; // Triggered from a message on a Cloud Pub/Sub topic. // The printed value will be visible in Cloud Logging // (https://cloud.google.com/functions/docs/monitoring/logging). namespace PubSubSample { public class Function : ICloudEventFunction<MessagePublishedData> { public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken) { string eventType = data.Message.Attributes["eventType"]; string secretId = data.Message.Attributes["secretId"]; string secretMetadata = data.Message.TextData; Console.WriteLine($"Received {eventType} for {secretId}. New metadata: {secretMetadata}."); return Task.CompletedTask; } } }
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Secret Manager Go SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Secret Manager, lihat library klien Secret Manager.
Untuk melakukan autentikasi ke Secret Manager, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu dan instal Secret Manager Node.js SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
/** * Triggered from a message on a Cloud Pub/Sub topic. * The printed value will be visible in Cloud Logging * (https://cloud.google.com/functions/docs/monitoring/logging). * * @param {!Object} event Event payload. * @param {!Object} context Metadata for the event. */ exports.smEventsFunction = (event, context) => { const eventType = event.attributes.eventType; const secretID = event.attributes.secretId; const secretMetadata = Buffer.from(event.data, 'base64').toString(); console.log(`Received ${eventType} for ${secretID}. New metadata: ${secretMetadata}.`); };
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Secret Manager Python SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu dan instal Secret Manager Ruby SDK. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.
require "functions_framework" require "base64" # Triggered from a message on a Cloud Pub/Sub topic. # The printed value will be visible in Cloud Logging # (https://cloud.google.com/functions/docs/monitoring/logging). FunctionsFramework.cloud_event "sm_events_function" do |event| message = event.data["message"] event_type = message["attributes"]["eventType"] secret_id = message["attributes"]["secretId"] message_data = Base64.decode64 message["data"] FunctionsFramework.logger.info "Received %s for %s. New metadata: %s." % [event_type, secret_id, message_data] end
Untuk mengetahui daftar semua jenis peristiwa, lihat Jenis Peristiwa.
Topik yang salah dikonfigurasi
Jika topik Pub/Sub ditambahkan ke secret dalam operasi Buat atau Perbarui, tetapi Secret Manager tidak dapat memublikasikan pesan ke topik karena salah konfigurasi, operasi akan gagal dengan pesan error yang menunjukkan alasan kegagalan publikasi. Hal ini dapat terjadi, misalnya, jika topik tidak ada, atau jika akun layanan Secret Manager tidak memiliki izin untuk memublikasikan.
Jika topik Pub/Sub ditambahkan ke secret, lalu topik tersebut diubah sehingga Secret Manager tidak dapat lagi memublikasikan pesan (misalnya, topik dihapus, atau izin akun layanan Secret Manager dihapus), Secret Manager akan menulis log ke Secret
Secret Manager
dengan pesan yang menunjukkan alasan kegagalan publikasi.
Langkah berikutnya
- Pelajari cara menganalisis secret dengan Inventaris Aset Cloud.