Membuat jadwal rotasi di Secret Manager

Dengan Secret Manager, Anda dapat menjadwalkan rotasi berkala secret Anda. Secret Manager melakukannya dengan mengirimkan notifikasi ke topik Pub/Sub yang terkait dengan secret Anda, berdasarkan frekuensi dan waktu rotasi yang Anda tentukan. Halaman ini menjelaskan cara menyiapkan jadwal rotasi ini.

Cara kerja notifikasi rotasi rahasia

Secret Manager memicu pesan SECRET_ROTATE ke topik Pub/Sub yang ditentukan pada next_rotation_time rahasia. Ada dua cara untuk menentukan stempel waktu ini:

  1. Buatan pengguna: Anda dapat menentukan next_rotation_time saat membuat atau memperbarui secret.

  2. Periode rotasi: Jika Anda menentukan rotation_period, Secret Manager akan otomatis menghitung next_rotation_time. Secret Manager mengirim pesan SECRET_ROTATE setelah rotation_period yang ditentukan berlalu, lalu mengupdate next_rotation_time untuk menjadwalkan rotasi berikutnya.

Anda harus mengonfigurasi pelanggan Pub/Sub untuk menerima dan menindaklanjuti pesan SECRET_ROTATE. Anda mungkin juga perlu menyiapkan alur kerja tambahan sebagai respons terhadap notifikasi ini, seperti membuat versi baru rahasia dan men-deploy perubahan ke aplikasi Anda.

Persyaratan dan pertimbangan untuk jadwal rotasi secret

  • Topik Pub/Sub harus dikonfigurasi pada secret. Untuk mempelajari cara membuat topik dan langganan Pub/Sub, lihat panduan memulai Pub/Sub. Untuk mempelajari cara mengonfigurasi topik pada secret, lihat Notifikasi Peristiwa untuk Secret Manager.

  • next_rotation_time harus ditetapkan jika rotation_period ditentukan.

  • next_rotation_time tidak dapat disetel kurang dari lima menit ke depan.

  • rotation_period tidak boleh berdurasi kurang dari satu jam. Untuk panduan pemformatan stempel waktu, lihat referensi tanggal dan waktuGoogle Cloud

  • Meskipun Secret Manager otomatis mencoba ulang pengiriman pesan yang gagal, kami tidak dapat menjamin keberhasilan pengiriman jika ada kesalahan konfigurasi terkait secret, konfigurasi topik, izin, atau kuota.

  • Rotasi yang sedang berlangsung harus selesai sebelum rotasi lain dapat dimulai untuk mencegah rotasi serentak menghasilkan perilaku yang tidak terduga. Notifikasi dianggap sedang dalam proses pengiriman saat Secret Manager mencoba mengirim pesan ke Pub/Sub. Rotasi terjadwal dilewati jika ada rotasi yang sedang berlangsung. Secret Manager akan otomatis mencoba kembali pengiriman pesan yang gagal hingga tujuh hari, setelah itu rotasi akan dibatalkan.

Mengonfigurasi rotasi pada secret

Anda dapat mengonfigurasi jadwal rotasi menggunakan Google Cloud konsol, Google Cloud CLI, atau Secret Manager API.

Konsol

  1. Di konsol Google Cloud , buka halaman Secret Manager.

    Buka Secret Manager

  2. Di halaman Secret Manager, klik Buat secret.

  3. Di halaman Buat secret, masukkan nama untuk secret di kolom Name.

  4. Masukkan nilai untuk secret (misalnya, abcd1234). Anda juga dapat mengupload file teks yang berisi nilai secret menggunakan opsi Upload file. Tindakan ini akan otomatis membuat versi secret.

  5. Buka bagian Rotasi, lalu centang kotak Tetapkan periode rotasi.

  6. Dalam daftar Periode rotasi, pilih dari opsi default atau pilih Kustom untuk mengonfigurasi jadwal rotasi Anda sendiri.

  7. Di kolom Mulai pada, masukkan tanggal dan waktu mulai periode rotasi.

  8. Klik Buat secret.

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret.
  • NEXT_ROTATION_TIME: stempel waktu saat penyelesaian rotasi pertama dalam format ISO 8601, misalnya 2021-06-01T09:00:00Z.
  • ROTATION_PERIOD: interval, dalam detik, untuk mengganti kunci. Misalnya, untuk mengganti kunci setiap 2592000 detik, Anda akan menetapkan nilai 2592000s.
  • FULL_TOPIC_NAME: nama lengkap topik Pub/Sub Anda dalam format projects/your-project-id/topics/your-topic-name.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud secrets create SECRET_ID \
  --replication-policy "automatic" \
  --next-rotation-time="NEXT_ROTATION_TIME" \
  --rotation-period="ROTATION_PERIOD" \
  --topics="FULL_TOPIC_NAME"

Windows (PowerShell)

gcloud secrets create SECRET_ID `
  --replication-policy "automatic" `
  --next-rotation-time="NEXT_ROTATION_TIME" `
  --rotation-period="ROTATION_PERIOD" `
  --topics="FULL_TOPIC_NAME"

Windows (cmd.exe)

gcloud secrets create SECRET_ID ^
  --replication-policy "automatic" ^
  --next-rotation-time="NEXT_ROTATION_TIME" ^
  --rotation-period="ROTATION_PERIOD" ^
  --topics="FULL_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" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"},
  "rotation":
    {
      "next_rotation_time": "2021-06-01T09:00:00Z",
      "rotation_period" : '2592000s'
    },
}

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/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Memperbarui setelan rotasi secret

Anda dapat memperbarui setelan rotasi berikut saat membuat permintaan pembaruan:

  • rotation: Ini mengacu pada seluruh konfigurasi rotasi secret.

  • rotation.next_rotation_time: Ini secara khusus menargetkan stempel waktu yang menunjukkan kapan rotasi berikutnya dapat terjadi.

  • rotation.rotation_period: Ini menentukan durasi antara setiap rotasi.

Untuk memperbarui setelan rotasi rahasia, gunakan salah satu metode berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Secret Manager.

    Buka Secret Manager

  2. Cari secret yang ingin Anda edit, lalu klik menu Tindakan yang terkait dengan secret tersebut. Di menu Tindakan, klik Edit.

  3. Buka bagian Rotasi. Perbarui periode rotasi sesuai kebutuhan, lalu klik Perbarui rahasia.

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret.
  • NEXT_ROTATION_TIME: stempel waktu saat penyelesaian rotasi pertama dalam format ISO 8601, misalnya 2021-06-01T09:00:00Z.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud secrets update SECRET_ID \
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (PowerShell)

gcloud secrets update SECRET_ID `
  --next-rotation-time="NEXT_ROTATION_TIME"

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
  --next-rotation-time="NEXT_ROTATION_TIME"

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.
  • NEXT_ROTATION_TIME: stempel waktu saat penyelesaian rotasi pertama dalam format ISO 8601, misalnya 2021-06-01T09:00:00Z.

Metode HTTP dan URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Isi JSON permintaan:

{
  "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"}
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X PATCH \
-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/$SECRET_ID?updateMask=rotation.next_rotation_time"

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 PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"1621434abc8dc4\"",
  "rotation": {
    "nextRotationTime": "2024-09-10T09:00:00Z",
    "rotationPeriod": "2592000s"
  }
}

Menonaktifkan rotasi pada secret

Untuk menonaktifkan rotasi rahasia, gunakan salah satu metode berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Secret Manager.

    Buka Secret Manager

  2. Cari secret yang ingin Anda edit, lalu klik menu Tindakan yang terkait dengan secret tersebut. Di menu Tindakan, klik Edit.

  3. Buka bagian Rotasi. Hapus centang pada kotak Setel periode rotasi, lalu klik Perbarui secret.

gcloud

Menghapus next_rotation_time secret

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-next-rotation-time

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-next-rotation-time

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --remove-next-rotation-time

Menghapus jadwal rotasi secret. Tindakan ini akan menghapus next_rotation_time dan rotation_period.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SECRET_ID: ID secret atau ID yang memenuhi syarat sepenuhnya untuk secret

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud secrets update SECRET_ID \
    --remove-rotation-schedule

Windows (PowerShell)

gcloud secrets update SECRET_ID `
    --remove-rotation-schedule

Windows (cmd.exe)

gcloud secrets update SECRET_ID ^
    --remove-rotation-schedule

REST

Menghapus waktu rotasi berikutnya secret

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

Metode HTTP dan URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time

Isi JSON permintaan:

{}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X PATCH \
-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/$SECRET_ID?updateMask=rotation.next_rotation_time"

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 PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

Menghapus jadwal rotasi secret. Tindakan ini akan menghapus waktu rotasi berikutnya dan periode rotasi.

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

Metode HTTP dan URL:

PATCH https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation

Isi JSON permintaan:

{}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X PATCH \
-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/$SECRET_ID?updateMask=rotation"

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 PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.googleapis.com/v1/projects/$PROJECT_ID/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content

Anda akan melihat respons JSON yang mirip dengan berikut ini:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T04:06:00.660420Z",
  "topics": [
    {
      "name": "projects/PROJECT_ID/topics/TOPIC_NAME"
    }
  ],
  "etag": "\"16214530fa18d3\""
}

Langkah berikutnya