הגדרת רוטציה אוטומטית של סודות ב-Cloud SQL

בדף הזה מוסבר איך להגדיר רוטציה אוטומטית של פרטי הכניסה למסד הנתונים של Cloud SQL ב-Secret Manager.

לפני שמתחילים

  • מוודאים שמופע Cloud SQL משתמש בגרסה נתמכת של המנוע של מסד הנתונים, כמו PostgreSQL או SQL Server.
  • מוודאים שאתם משתמשים בסוד אזורי. רוטציה אוטומטית של פרטי הכניסה ל-Cloud SQL זמינה רק לסודות אזוריים ב-Secret Manager. התכונה הזו לא נתמכת בסודות גלובליים.
  • מוודאים שיש לכם מכונה קיימת של Cloud SQL ומשתמש של מסד נתונים. מידע נוסף מופיע במאמרים בנושא יצירת מופעים ויצירה וניהול של משתמשים.
  • צריך לוודא שיש לכם הרשאות לניהול מדיניות IAM במופע Cloud SQL. מידע נוסף זמין במאמר בנושא תפקידים והרשאות.

התפקידים הנדרשים

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

  • cloudsql.users.list
  • cloudsql.users.update

אפשר לקבל את ההרשאות האלה באמצעות תפקידים מוגדרים מראש או תפקידים בהתאמה אישית. במאמר תפקידי IAM ל-Cloud SQL מפורטים התפקידים השונים וההרשאות שמשויכות אליהם.

כדי לקרוא הסבר על מתן תפקידים, קראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יצירת סוד של פרטי כניסה למסד נתונים ב-Cloud SQL

כדי להפעיל סיבוב אוטומטי, צריך ליצור סוד מסוג Cloud SQL DB credentials.

המסוף

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

    מעבר אל Secret Manager

  2. בדף Secret Manager, לוחצים על הכרטיסייה Regional secrets ואז על Create regional secret.

  3. בדף Create regional secret (יצירת Secret אזורי), מזינים שם ל-Secret בשדה Name (שם).

  4. מסמנים את תיבת הסימון Set secret type (הגדרת סוג הסוד) ובוחרים באפשרות Cloud SQL DB credentials בתור סוג הסוד.

  5. ברשימה Region, בוחרים את המיקום שבו רוצים לאחסן את הסוד האזורי.

  6. (אופציונלי) בקטע Rotation, מגדירים את לוח הזמנים של הרוטציה של הסוד. אם לא מגדירים לוח זמנים להחלפה, צריך להחליף את הסוד באופן ידני.

    1. מסמנים את תיבת הסימון הגדרת תקופת רוטציה.

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

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

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

gcloud

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

  • ‫SECRET_ID: מזהה הסוד
  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS

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

‫Linux,‏ macOS או Cloud Shell

gcloud secrets create SECRET_ID \
    --location=LOCATION \
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

‏Windows (PowerShell)

gcloud secrets create SECRET_ID `
    --location=LOCATION `
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Windows‏ (cmd.exe)

gcloud secrets create SECRET_ID ^
    --location=LOCATION ^
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

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

Created secret [projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID].

REST

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

  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS
  • ‫PROJECT_ID: מזהה הפרויקט Cloud de Confiance by S3NS
  • ‫SECRET_ID: מזהה הסוד

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

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

גוף בקשת JSON:

{
  "secretType": "CLOUD_SQL_DB_CREDENTIALS"
}

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

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

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

לכל סוד יש מזהה ייחודי שמבדיל אותו מכל המשאבים האחרים בפרויקט. Cloud de Confiance by S3NS צריך להעניק לזהות המובנית את ההרשאות הנדרשות לעדכון פרטי הכניסה במופע Cloud SQL. מידע נוסף זמין במאמר הקצאת תפקידים למשאבים עם זהויות מוכללות.

המסוף

  1. בדף הפרטים של הסוד, עוברים לכרטיסייה סקירה כללית.

  2. רושמים בצד את מזהה חשבון המשתמש ב-IAM של הסוד.

    המזהה הוא בפורמט הבא: principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID.

  3. נכנסים לדף IAM במסוף Cloud de Confiance .

    כניסה לדף IAM

  4. לוחצים על הענקת גישה.

    החלונית הענקת גישה מופיעה.

  5. בשדה New principals, מזינים את מזהה חשבון המשתמש ב-IAM של הסוד.

  6. בוחרים תפקיד מהרשימה Select a role שמעניק את ההרשאות הנדרשות.

    מידע נוסף זמין במאמר בנושא תפקידים נדרשים.

  7. לוחצים על Save.

gcloud

קבלת הזהות הסודית

לפני שמעניקים הרשאות IAM, צריך לתאר את הסוד כדי לקבל את הזהות המובנית iamPolicyUidPrincipal. אתם מציינים את מחרוזת הזהות הזו בדגל --member כשמוסיפים את קישור מדיניות ה-IAM.

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

  • ‫SECRET_ID: מזהה הסוד
  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS

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

‫Linux,‏ macOS או Cloud Shell

gcloud secrets describe SECRET_ID \
    --location=LOCATION \
    --format="value(policyMember.iamPolicyUidPrincipal)"

‏Windows (PowerShell)

gcloud secrets describe SECRET_ID `
    --location=LOCATION `
    --format="value(policyMember.iamPolicyUidPrincipal)"

Windows‏ (cmd.exe)

gcloud secrets describe SECRET_ID ^
    --location=LOCATION ^
    --format="value(policyMember.iamPolicyUidPrincipal)"

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

principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID

הענקת תפקיד ב-IAM לזהות של הסוד

מקצים תפקיד IAM שמכיל את ההרשאות הנדרשות ל-Cloud SQL (כמו cloudsql.users.update ו-cloudsql.users.list, או התפקיד המוגדר מראש roles/cloudsql.admin) לחשבון המשתמש של הסוד שאוחזר בשלב הקודם:

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

  • ‫PROJECT_ID: מזהה הפרויקט Cloud de Confiance by S3NS
  • ‫PROJECT_NUMBER: מספר הפרויקט Cloud de Confiance by S3NS
  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS
  • ‫SECRET_UID: המזהה הייחודי של משאב הסוד שנוצר על ידי המערכת
  • ‫ROLE: התפקיד ב-IAM שניתן לזהות הסודית

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

‫Linux,‏ macOS או Cloud Shell

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" \
    --role="ROLE"

‏Windows (PowerShell)

gcloud projects add-iam-policy-binding PROJECT_ID `
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" `
    --role="ROLE"

Windows‏ (cmd.exe)

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" ^
    --role="ROLE"

REST

קבלת הזהות הסודית

לפני שמעניקים הרשאות IAM, צריך לאחזר את פרטי הסוד כדי לקבל את הזהות המובנית iamPolicyUidPrincipal. כשמגדירים את מדיניות ה-IAM, מציינים את מחרוזת הזהות הזו ב-JSON של הבקשה.

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

  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS
  • ‫PROJECT_ID: מזהה הפרויקט Cloud de Confiance by S3NS
  • ‫SECRET_ID: מזהה הסוד

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

GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID

גוף בקשת JSON:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

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

curl

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

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

הענקת תפקיד ב-IAM לזהות של הסוד

מקצים תפקיד IAM שמכיל את ההרשאות הנדרשות ל-Cloud SQL (כמו cloudsql.users.update ו-cloudsql.users.list, או התפקיד המוגדר מראש roles/cloudsql.admin) לחשבון המשתמש של הסוד שאוחזר בשלב הקודם:

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

  • ‫PROJECT_ID: מזהה הפרויקט Cloud de Confiance by S3NS
  • ‫ROLE: התפקיד ב-IAM שניתן לזהות הסודית
  • ‫PROJECT_NUMBER: מספר הפרויקט Cloud de Confiance by S3NS
  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS
  • ‫SECRET_UID: המזהה הייחודי של משאב הסוד שנוצר על ידי המערכת

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

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

גוף בקשת JSON:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

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

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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"

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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content

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

{
  "version": 1,
  "etag": "BwWWv0I7vBw=",
  "bindings": [
    {
      "role": "roles/cloudsql.admin",
      "members": [
        "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
      ]
    }
  ]
}

רוטציה של הסוד

סטטוס הרוטציה של הסודות החדשים שנוצרו ב-Cloud SQL הוא Disabled עד לרוטציה הראשונה שמתבצעת בהצלחה. כדי לאמת את ההרשאות ולהתחיל את לוח הזמנים של הרוטציה האוטומטית, צריך לבצע רוטציה של הסוד באופן ידני.

המסוף

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

    מעבר אל Secret Manager

  2. בדף Secret Manager (ניהול סודות), לוחצים על הכרטיסייה Regional secrets (סודות אזוריים).

  3. לוחצים על שם הסוד כדי לעבור לדף הפרטים של הסוד.

  4. לוחצים על סיבוב.

    מופיעה החלונית Rotate secret.

  5. מציינים את מספר המכונה ואת שם המשתמש של מכונת Cloud SQL שרוצים לעדכן.

  6. (אופציונלי) מרחיבים את הקטע הגדרות נוספות כדי להזין סיסמה ספציפית. אם לא מציינים סיסמה, Secret Manager יוצר באופן אוטומטי סיסמה חזקה ואקראית.

  7. לוחצים על סיבוב.

gcloud

הפעלת סיבוב מנוהל

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

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

‫Linux,‏ macOS או Cloud Shell

gcloud secrets enable-managed-rotation SECRET_ID \
    --location=LOCATION \
    --instance-id=INSTANCE_ID \
    --username=USERNAME

‏Windows (PowerShell)

gcloud secrets enable-managed-rotation SECRET_ID `
    --location=LOCATION `
    --instance-id=INSTANCE_ID `
    --username=USERNAME

Windows‏ (cmd.exe)

gcloud secrets enable-managed-rotation SECRET_ID ^
    --location=LOCATION ^
    --instance-id=INSTANCE_ID ^
    --username=USERNAME

רוטציה ידנית של הסוד

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

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

  • ‫SECRET_ID: מזהה הסוד
  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS

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

‫Linux,‏ macOS או Cloud Shell

gcloud secrets rotate-secret SECRET_ID \
    --location=LOCATION

‏Windows (PowerShell)

gcloud secrets rotate-secret SECRET_ID `
    --location=LOCATION

Windows‏ (cmd.exe)

gcloud secrets rotate-secret SECRET_ID ^
    --location=LOCATION

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

Name: projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1
State: ENABLED

REST

הפעלת סיבוב מנוהל

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

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

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation

גוף בקשת JSON:

{
  "cloudSqlSingleUserCredentials": {
    "instanceId": "INSTANCE_ID",
    "username": "USERNAME"
  }
}

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

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation"

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

רוטציה ידנית של הסוד

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

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

  • ‫LOCATION: המיקום של הסוד Cloud de Confiance by S3NS
  • ‫PROJECT_ID: מזהה הפרויקט Cloud de Confiance by S3NS
  • ‫SECRET_ID: מזהה הסוד

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

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

‫Secret Manager מנסה לעדכן את פרטי הכניסה במופע Cloud SQL. אם הפעולה מצליחה, סטטוס הסיבוב משתנה ל-Enabled, והטיימר של הסיבוב האוטומטי המתוזמן מתחיל לפעול.

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