הפעלת מפתחות הצפנה בניהול הלקוח ב-Secret Manager

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

אם אתם רוצים לשלוט במפתחות ההצפנה, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) ב-Cloud KMS עם שירותים שמשולבים עם CMEK, כולל Secret Manager. שימוש במפתחות Cloud KMS מאפשר לכם לשלוט ברמת ההגנה, במיקום, בלוח הזמנים של הרוטציה, בשימוש ובהרשאות הגישה, ובגבולות הקריפטוגרפיים. שימוש ב-Cloud KMS מאפשר גם לעקוב אחרי השימוש במפתחות, לצפות ביומני ביקורת ולשלוט במחזורי החיים של המפתחות. במקום ש-Google תהיה הבעלים של המפתחות הסימטריים להצפנת מפתחות (KEK) שמגנים על הנתונים שלכם ותנהל אותם, אתם שולטים במפתחות האלה ומנהלים אותם ב-Cloud KMS.

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

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

CMEK עם Cloud KMS Autokey

אתם יכולים ליצור מפתחות CMEK באופן ידני כדי להגן על המשאבים של Secret Manager, או להשתמש ב-Cloud KMS Autokey. עם Autokey, מחזיקי מפתחות ומפתחות נוצרים לפי דרישה כדי לתמוך ביצירת משאבים ב-Secret Manager. סוכני שירות שמשתמשים במפתחות לפעולות הצפנה ופענוח נוצרים אם הם לא קיימים כבר, ומקבלים את התפקידים הנדרשים של ניהול זהויות והרשאות גישה (IAM). מידע נוסף מופיע במאמר סקירה כללית על Autokey.

‫Secret Manager תואם ל-Cloud KMS Autokey רק כשיוצרים משאבים באמצעות Terraform או API בארכיטקטורת REST.

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

כדי ללמוד איך להשתמש במפתחות CMEK שנוצרו על ידי Cloud KMS Autokey כדי להגן על משאבי Secret Manager, אפשר לעיין במאמר שימוש ב-Autokey עם משאבי Secret Manager.

איך CMEK עובד ב-Secret Manager

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

כשמשתמשים ב-CMEK עבור Secret Manager, המפתח להצפנת מפתחות הצפנה נקרא מפתח CMEK והוא מפתח סימטרי שמנוהל ב-Cloud KMS. מפתח ה-CMEK צריך להיות באותו Google Cloud המיקום שבו נמצא העותק של הגרסה הסודית שהוא מצפין. אפשר גם להשתמש במפתח Cloud EKM במדיניות CMEK להצפנה ולפענוח.

במדריך הזה מוסבר איך להגדיר את Secret Manager לשימוש ב-CMEK. מידע נוסף על CMEK באופן כללי, כולל מתי ולמה כדאי להפעיל אותו, זמין במסמכי התיעוד של Cloud Key Management Service.

רוטציית מפתחות

כשמבצעים רוטציה למפתח של Cloud Key Management Service, גרסת המפתח החדשה הופכת לגרסה primary. ב-Secret Manager נעשה שימוש בלוגיקה הבאה להחלפת מפתחות:

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

מגבלות

ה-CMEK זמין רק ב-Secret Manager v1 API וב-Google Cloud CLI.

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

אתם יכולים לאחסן את כל המשאבים באותו פרויקט או לאחסן סודות ומפתחות בפרויקטים נפרדים. כדי להבין טוב יותר את ההחלטה הזו, כדאי לקרוא את המאמר בנושא הפרדת תפקידים ב-Cloud KMS.

כדי להגדיר את Secret Manager ואת Cloud KMS, צריך לבצע את הפעולות הבאות:

  • Secret Manager:

    • יוצרים פרויקט או משתמשים בפרויקט קיים כדי לאחסן את המשאבים של Secret Manager.
    • אם צריך, משלימים את השלבים בקטע הגדרת Secret Manager במאמר לתחילת העבודה עם Secret Manager.
  • Cloud KMS:

    • יוצרים פרויקט חדש או משתמשים בפרויקט קיים כדי לאחסן את המשאבים של Cloud KMS.
    • במקרה הצורך, מפעילים את Cloud KMS API.

מגדירים את המשתנים הבאים למזהי הפרויקטים של Secret Manager ו-Cloud KMS.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

אימות אל Google Cloud:

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud auth login

יצירת זהות של סוכן שירות

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

כדי ליצור זהות שירות באמצעות Google Cloud CLI, מריצים את הפקודה הבאה:

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

הפקודה תחזיר את שם זהות השירות בפורמט הבא:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

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

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

תעניקו לזהות השירות הזו גישה למפתחות CMEK Cloud KMS שמשמשים להצפנה ולפענוח של הסודות שלכם.

CMEK עם שכפול אוטומטי

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

אם הסודות משתמשים במדיניות השכפול האוטומטי, מפתח ה-CMEK צריך להיות ממוקם באזור global Cloud KMS שכולל מספר אזורים. אם אתם משתמשים במפתח Cloud EKM, אתם לא יכולים להגדיר את הסוד לשימוש בשכפול אוטומטי כי מפתחות Cloud EKM לא זמינים באזור global. מידע נוסף על שימוש במפתחות Cloud EKM זמין במאמר הוספת מפתח Cloud EKM למדיניות CMEK.

יוצרים מפתח סימטרי של Cloud KMS באזור global Cloud KMS, או משתמשים במפתח קיים. בדוגמה הזו נוצר אוסף מפתחות חדש בשם secret-manager-cmek, ואז נוצר בו מפתח חדש בשם my-cmek-key.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

מעניקים לזהות השירות של Secret Manager גישה להצפנה ולפענוח באמצעות מפתח ה-CMEK. הפקודה הזו מעניקה את התפקיד Cloud KMS Encrypter / Decrypter ‏ (roles/cloudkms.cryptoKeyEncrypterDecrypter) במפתח Cloud KMS ‏my-cmek-key לזהות השירות.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

יוצרים סוד עם שכפול אוטומטי. שם המשאב של מפתח ה-CMEK מאוחסן כמטא-נתונים בסוד.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

מגדירים את הערך של replication.automatic.customerManagedEncryption.kmsKeyName לשם המשאב של מפתח ה-CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

מעכשיו, בכל פעם שנוצרת גרסה סודית בסוד הזה, המטען הייעודי (payload) של הגרסה הסודית מוצפן אוטומטית באמצעות המפתח לפני שהוא נכתב לאחסון קבוע, כל עוד לזהות השירות יש גישה למפתח ה-CMEK. אם זהות השירות מאבדת את הגישה או שהמפתח לא זמין, ניסיון ליצור גרסה חדשה של הסוד או לגשת לגרסה קיימת יחזיר שגיאה.

הוספת גרסה חדשה של סוד. שימו לב שלא מציינים את שם המשאב של מפתח Cloud KMS, כי הוא נקרא מהמטא-נתונים של הסוד.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

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

באופן דומה, לא נדרשת גישה ישירה למפתח ה-CMEK כדי לגשת לסוד. זהות השירות ניגשת למפתח ומצפינה או מפענחת את הסוד בשמכם.

ניגשים לגרסת הסוד שיצרתם:

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

עדכון ההגדרה של CMEK

יוצרים מפתחות סימטריים חדשים של KMS במיקום global Cloud KMS שכולל מספר אזורים.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

צריך להעניק לזהות השירות של Secret Manager גישה להצפנה ולפענוח באמצעות מפתח ה-CMEK החדש. הפקודה הזו מעניקה את התפקיד Cloud KMS Encrypter / Decrypter ‏ (roles/cloudkms.cryptoKeyEncrypterDecrypter) במפתח my-other-key Cloud KMS לזהות השירות.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

כדי לשנות את הגדרת ה-CMEK בסוד, צריך לעדכן את השכפול של הסוד עם שמות המשאבים החדשים של מפתח Cloud KMS.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK עם שכפול בניהול המשתמש

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

בסודות עם מדיניות שכפול בניהול המשתמש, צריך להשתמש במפתחות Cloud KMS שמותאמים בדיוק למיקומים שבהם מאוחסנות גרסאות הסוד. בדוגמאות במדריך הזה, סוד מאוחסן בשני מיקומים נפרדים: us-east1 ו-us-central1. בקשות לגישה לסוד מנותבות לאחד מהמיקומים האלה.

בכל אחד משני האזורים, יוצרים אוסף מפתחות ומפתח Cloud KMS עם ייעוד להצפנה, או משתמשים במפתח קיים. בדוגמה הזו נוצר אוסף מפתחות חדש בשם "secret-manager-cmek", ואז נוצר מפתח בשם "my-cmek-key" בכל אזור.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

מעניקים את הרשאת ההצפנה והפענוח של מפתח CMEK לזהות השירות של Secret Manager על ידי הקצאת התפקיד 'הצפנה/פענוח' ב-Cloud KMS ‏ (roles/cloudkms.cryptoKeyEncrypterDecrypter) לכל אחד ממפתחות ה-CMEK בנפרד או לכל המפתחות בפרויקט.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

יוצרים סוד עם הפעלת CMEK ושכפול בניהול המשתמש. שם המשאב של מפתח ה-CMEK מאוחסן כמטא-נתונים בסוד.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

מגדירים את הערך של replication.userManaged.replicas.customerManagedEncryption.kmsKeyName לשמות המשאבים של מפתחות ה-CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

מעכשיו, בכל פעם שנוצרת גרסה סודית בסוד הזה, המטען הייעודי (payload) של הגרסה הסודית מוצפן אוטומטית באמצעות המפתח לפני שהוא נכתב לאחסון קבוע, כל עוד לזהות השירות יש גישה למפתח ה-CMEK. אם זהות השירות מאבדת את הגישה או שהמפתח לא זמין, ניסיון ליצור גרסה חדשה של הסוד או לגשת לגרסה קיימת יחזיר שגיאה.

הוספת גרסה חדשה של סוד. שימו לב שלא מציינים את שם המשאב של מפתח Cloud KMS, כי הוא נקרא מהמטא-נתונים של הסוד.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

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

באופן דומה, לא נדרשת גישה ישירה למפתח ה-CMEK כדי לגשת לסוד. זהות השירות ניגשת למפתח ומצפינה או מפענחת את הסוד בשמכם.

ניגשים לגרסת הסוד שיצרתם.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

עדכון ההגדרה של CMEK

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

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

נותנים לזהות השירות של Secret Manager הרשאת גישה להצפנה ולפענוח באמצעות מפתחות ה-CMEK החדשים. הפקודה הזו מעניקה את התפקיד Cloud KMS Encrypter / Decrypter ‏ (roles/cloudkms.cryptoKeyEncrypterDecrypter) במפתחות Cloud KMS ‏my-other-key לזהות השירות.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

כדי לשנות את הגדרת ה-CMEK בסוד, צריך לעדכן את השכפול של הסוד עם שמות המשאבים החדשים של מפתח Cloud KMS.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

כדי לעדכן כמה מפתחות בסוד בו-זמנית, אפשר לקבל ולהגדיר את מדיניות השכפול באמצעות קובץ.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

מעדכנים את הקובץ כך שישקף את הגדרת ה-CMEK הרצויה בעורך המועדף. אחר כך מגדירים את המדיניות החדשה:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

צפייה בהגדרת CMEK של גרסה סודית

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

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

הפלט הוא השם המלא של משאב Cloud KMS של גרסת המפתח ששימשה להצפנת גרסת הסוד.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

הוספת מפתח Cloud EKM למדיניות CMEK

בקטע הזה מוסבר איך להוסיף מפתח Cloud EKM למדיניות CMEK. השלבים האלה מאפשרים להשתמש במפתח Cloud EKM כדי להצפין או לפענח סודות.

מכיוון ששירות Cloud EKM לא תומך כרגע בglobal multi-region, אפשר להשתמש במפתחות Cloud EKM רק עם סודות שהוגדרו לשכפול בניהול המשתמש.

יוצרים מפתח סימטרי באזור us-central1 של Cloud KMS (או בכל אזור אחר חוץ מglobal). בדוגמה הזו נוצר אוסף מפתחות חדש בשם secret-manager-cmek-ekm, ואז נוצר מפתח חדש בשם my-ekm-key באוסף המפתחות.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

יצירת אוסף מפתחות חדש:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

יוצרים מפתח באוסף המפתחות:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

לאחר מכן, יוצרים גרסה חדשה של my-ekm-key באמצעות ה-URI החיצוני של המפתח. מידע נוסף על מזהי URI חיצוניים למפתחות Cloud EKM זמין במאמר יצירת מפתח חיצוני.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

נותנים לזהות השירות של Secret Manager גישה להצפנה ולפענוח באמצעות המפתח החיצוני. הפקודה הזו מעניקה את התפקיד Cloud KMS Encrypter / Decrypter ‏ (roles/cloudkms.cryptoKeyEncrypterDecrypter) ב-my-ekm-key לזהות השירות.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

יוצרים סוד עם CMEK שמשתמש במפתח Cloud EKM.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

מעכשיו, בכל פעם שנוצרת גרסה של סוד ב-my-ekm-secret, המטען הייעודי (payload) של גרסת הסוד מוצפן באופן אוטומטי באמצעות מפתח Cloud EKM לפני שהוא נכתב לאחסון קבוע, כל עוד לזהות השירות יש גישה למפתח. אם זהות השירות מאבדת את הגישה או שהמפתח לא זמין, ניסיון ליצור גרסה חדשה של הסוד או לגשת לגרסה קיימת יחזיר שגיאה.

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

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

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

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

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

השבתת CMEK

כדי להסיר הגדרת CMEK מסוד, צריך לעדכן את מדיניות השכפול.

gcloud

כדי להשתמש ב-Secret Manager בשורת הפקודה, קודם צריך להתקין את Google Cloud CLI או לשדרג לגרסה 378.0.0 ואילך. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

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