יצירת לוחות זמנים לסבבים ב-Secret Manager

בעזרת Secret Manager אפשר לתזמן רוטציות תקופתיות של הסודות. כדי לעשות את זה, Secret Manager שולח התראות לנושאי Pub/Sub שמשויכים לסודות שלכם, על סמך תדירות הרוטציה והזמן שאתם מציינים. בדף הזה מוסבר איך מגדירים את לוחות הזמנים האלה להצגת מודעות.

איך פועלות ההתראות על רוטציה של סודות

‫Secret Manager מפעיל הודעת SECRET_ROTATE לנושאי Pub/Sub שמוגדרים ב-next_rotation_time של הסוד. יש שתי דרכים לקבוע את חותמת הזמן הזו:

  1. מוגדר על ידי המשתמש: אתם יכולים לציין את next_rotation_time כשאתם יוצרים או מעדכנים את הסוד.

  2. תקופת רוטציה: אם מגדירים rotation_period, Secret Manager מחשב אוטומטית את next_rotation_time. ‫Secret Manager שולח את ההודעה SECRET_ROTATE אחרי שחלף הזמן שצוין rotation_period, ואז מעדכן את next_rotation_time כדי לתזמן את הרוטציה הבאה.

צריך להגדיר מנוי ל-Pub/Sub כדי לקבל את ההודעות של SECRET_ROTATE ולבצע פעולות בהתאם. יכול להיות שתצטרכו להגדיר תהליכי עבודה נוספים בתגובה להתראות האלה, כמו יצירת גרסה חדשה של הסוד ופריסת השינויים באפליקציות.

דרישות ושיקולים לגבי לוחות זמנים של רוטציה של סודות

  • צריך להגדיר נושאים ב-Pub/Sub בסוד. במדריך לתחילת העבודה עם Pub/Sub מוסבר איך ליצור נושא ומינוי ב-Pub/Sub. במאמר התראות על אירועים ב-Secret Manager מוסבר איך מגדירים נושאים בסוד.

  • אם מציינים את rotation_period, צריך להגדיר את next_rotation_time.

  • אי אפשר להגדיר את next_rotation_time למועד מאוחר יותר מ-5 דקות בעתיד.

  • משך הזמן של rotation_period לא יכול להיות קצר משעה אחת. הנחיות לעיצוב חותמות זמן מופיעות במאמר Google Cloud datetime reference.

  • ‫Secret Manager מנסה באופן אוטומטי לשלוח שוב הודעות שלא נשלחו, אבל אנחנו לא יכולים להבטיח שההודעות יישלחו אם יש בעיות בהגדרות שקשורות לסוד, להגדרות הנושא, להרשאות או למכסות.

  • כדי למנוע מצב שבו רוטציות מקבילות יובילו להתנהגות בלתי צפויה, צריך להמתין עד שרוטציות פעילות יסתיימו לפני שמתחילים רוטציה אחרת. ההתראות נחשבות כהודעות בתהליך השליחה בזמן ש-Secret Manager מנסה לשלוח את ההודעה ל-Pub/Sub. אם יש סבב פעיל, המערכת מדלגת על סבבים מתוזמנים. מערכת Secret Manager מנסה אוטומטית לשלוח הודעה במשך עד שבעה ימים, ואחרי כן היא מבטלת את הרוטציה.

הגדרת סבב של סוד

אפשר להגדיר לוח זמנים להחלפה באמצעות מסוף Google Cloud , Google Cloud CLI או Secret Manager API.

המסוף

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    מעבר אל Secret Manager

  2. בדף Secret Manager, לוחצים על Create secret.

  3. בדף יצירת Secret, מזינים שם ל-Secret בשדה שם.

  4. מזינים ערך לסוד (לדוגמה, abcd1234). אפשר גם להעלות קובץ טקסט שמכיל את ערך הסוד באמצעות האפשרות העלאת קובץ. הפעולה הזו יוצרת באופן אוטומטי את גרסת הסוד.

  5. עוברים לקטע רוטציה ומסמנים את התיבה הגדרת תקופת רוטציה.

  6. ברשימה Rotation period (תקופת הרוטציה), בוחרים מבין אפשרויות ברירת המחדל או באפשרות Custom (בהתאמה אישית) כדי להגדיר לוח זמנים משלכם לרוטציה.

  7. בשדה החל מ, מזינים את תאריך ההתחלה ואת השעה של תקופת הרוטציה.

  8. לוחצים על Create secret (יצירת סוד).

gcloud

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • SECRET_ID: המזהה של הסוד.
  • NEXT_ROTATION_TIME: חותמת הזמן שבה תסתיים הרוטציה הראשונה בפורמט ISO 8601, לדוגמה 2021-06-01T09:00:00Z.
  • ROTATION_PERIOD: מרווח הזמן, בשניות, לרוטציה של המפתח. לדוגמה, כדי להחליף את המפתח כל 2,592,000 שניות, צריך להגדיר ערך של 2592000s.
  • FULL_TOPIC_NAME: השם המלא של נושא ה-Pub/Sub בפורמט projects/your-project-id/topics/your-topic-name.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או 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

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • SECRET_ID: מזהה הסוד
  • TOPIC_NAME: שם הנושא

ה-method של ה-HTTP וכתובת ה-URL:

POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID

גוף בקשת JSON:

{
  "replication":{
    "automatic":{}
  },
  "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"},
  "rotation":
    {
      "next_rotation_time": "2021-06-01T09:00:00Z",
      "rotation_period" : '2592000s'
    },
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

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

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "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"
  }
}

עדכון הגדרות הרוטציה של סוד

כששולחים בקשת עדכון, אפשר לעדכן את הגדרות הרוטציה הבאות:

  • rotation: מתייחס לכל הגדרות הרוטציה של הסוד.

  • rotation.next_rotation_time: התג הזה מכוון ספציפית לחותמת הזמן שמציינת מתי יכולה להתרחש הרוטציה הבאה.

  • rotation.rotation_period: כאן מציינים את משך הזמן בין כל סיבוב.

כדי לעדכן את הגדרות הרוטציה של הסוד, משתמשים באחת מהשיטות הבאות:

המסוף

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    מעבר אל Secret Manager

  2. מאתרים את הסוד שרוצים לערוך ולוחצים על התפריט Actions (פעולות) שמשויך לסוד הזה. בתפריט פעולות, לוחצים על עריכה.

  3. עוברים לקטע רוטציה. מעדכנים את תקופת הרוטציה לפי הצורך ולוחצים על עדכון הסוד.

gcloud

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • SECRET_ID: המזהה של הסוד.
  • NEXT_ROTATION_TIME: חותמת הזמן שבה תסתיים הרוטציה הראשונה בפורמט ISO 8601, לדוגמה 2021-06-01T09:00:00Z.

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או 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

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • SECRET_ID: המזהה של הסוד.
  • NEXT_ROTATION_TIME: חותמת הזמן שבה תסתיים הרוטציה הראשונה בפורמט ISO 8601, לדוגמה 2021-06-01T09:00:00Z.

ה-method של ה-HTTP וכתובת ה-URL:

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

גוף בקשת JSON:

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

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

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

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "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"
  }
}

השבתת הסבב של סוד

כדי להשבית את רוטציית הסודות, משתמשים באחת מהשיטות הבאות:

המסוף

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    מעבר אל Secret Manager

  2. מאתרים את הסוד שרוצים לערוך ולוחצים על התפריט פעולות שמשויך לסוד הזה. בתפריט פעולות, לוחצים על עריכה.

  3. עוברים לקטע רוטציה. מבטלים את הסימון בתיבת הסימון Set rotation period (הגדרת תקופת רוטציה) ואז לוחצים על Update secret (עדכון הסוד).

gcloud

הסרת next_rotation_time של סוד

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • SECRET_ID: מזהה הסוד

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או 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

הסרת לוח זמנים לסבב של סוד. הפעולה הזו תסיר גם את next_rotation_time וגם את rotation_period.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • SECRET_ID: מזהה הסוד

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או 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

הסרת זמן הרוטציה הבא של סוד

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • SECRET_ID: מזהה הסוד

ה-method של ה-HTTP וכתובת ה-URL:

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

גוף בקשת JSON:

{}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

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

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "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\""
}

הסרת לוח זמנים לסבב של סוד. הפעולה הזו מסירה גם את זמן הרוטציה הבא וגם את תקופת הרוטציה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • SECRET_ID: מזהה הסוד

ה-method של ה-HTTP וכתובת ה-URL:

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

גוף בקשת JSON:

{}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

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

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "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\""
}

המאמרים הבאים