במסמך הזה מוסבר איך למצוא ולצמצם שגיאות נפוצות בהגדרת CMEK. בנוסף, מוסבר איך לזהות שגיאות שמתרחשות כשמגדירים הגדרות ברירת מחדל למשאבים ב-Cloud Logging. אפשר להגדיר את ההגדרות האלה לארגונים ולתיקיות.
פתרון בעיות בהגדרת המיקום של מאגרי יומנים חדשים שנוצרו על ידי המערכת
באופן כללי, אתם מנסים לעדכן את הגדרות ברירת המחדל של המשאבים ב-Cloud Logging בארגון או בתיקייה. העדכון שאתם מבצעים הוא קביעה או שינוי של הגדרת המיקום. עם זאת, הפקודה נכשלת ומוצגת שגיאה דומה לזו:
ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
the storage location. Received KMS key location: us-central1, storage location:
us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
match the storage location. Received KMS key location: us-central1, storage location:
us-west1" }'
כדי לפתור את השגיאה, צריך להגדיר את המיקום בהגדרות ברירת המחדל של המשאב למיקום של מפתח Cloud Key Management Service.
פתרון בעיות ב-VPC Service Controls ובשיתוף מוגבל לפי דומיין
הגדרתם את הגדרות ברירת המחדל של המשאבים ב-Cloud Logging כך שתהיה בהן הגדרת CMEK, או שיצרתם קטגוריה ביומן עם CMEK מופעל. לאחר מכן מגדירים את VPC Service Controls. אחרי שמגדירים את VPC Service Controls, מגבילים את הגישה ל-Cloud Key Management Service ב-VPC Service Controls או מפעילים שיתוף מוגבל לדומיין.
אחת מהאפשרויות הבאות מתרחשת:
קיבלתם התראה מ-Cloud Logging על בעיות בגישה ל-CMEK.
כשיוצרים פרויקטים חדשים בארגון Google Cloud או בתיקייה, רואים ש-CMEK לא מופעל עבור מאגרי היומנים
_Defaultו-_Required.מתקבלות שגיאות כשקוראים מקטגוריות של יומנים עם CMEK מופעל. השגיאות שמופיעות דומות לשגיאה הבאה:
ERROR: (gcloud.logging.read) FAILED_PRECONDITION: service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`מופיעות שגיאות כשיוצרים או מעדכנים מאגרי יומנים עם הפעלת CMEK. השגיאות שמופיעות דומות לשגיאה הבאה:
ERROR: (gcloud.logging.buckets.create) service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY` - '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::permission_denied: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: <var>ERRORID</var>;'
כדי לבדוק אם הבעיות האלה נובעות מההגדרה של VPC Service Controls, צריך לבצע את הפעולות הבאות:
מזהים את ההגדרות של Cloud Logging למשאב שמכיל את הגדרת ה-CMEK. משאב יכול להיות פרויקט, תיקייה או ארגון. אם יצרתם מאגרי יומנים עם CMEK מופעל, בוחרים במשאב PROJECT.
פרויקט
gcloud logging settings describe --project=PROJECT_ID
לפני שמריצים את הפקודה, מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומן.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
לפני שמריצים את הפקודה, מחליפים את FOLDER_ID במזהה של התיקייה.
ארגון
gcloud logging settings describe --organization=ORGANIZATION_ID
לפני שמריצים את הפקודה, מחליפים את ORGANIZATION_ID במזהה הארגון.
הפקודה הקודמת מחזירה מידע שדומה לזה:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
במקרה של ארגונים ותיקיות, מוחזר גם השדה הבא:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
הערך של השדה
kmsKeyNameכולל את הפרויקט Google Cloud שבו המפתח מאוחסן.בודקים אם צריך להעביר חשבונות שירות:
אם הערך בשדה
kmsServiceAccountIdמתחיל בקידומתservice-, לא צריך להעביר את חשבון השירות. מידע על שגיאות בהגדרת CMEK זמין בקטע פתרון בעיות ב-CMEK במסמך הזה.אם הערך של
kmsServiceAccountIdמתחיל בקידומתcmek-, ממשיכים לשלב הבא.
כדי לוודא שאתם צריכים להעביר חשבונות שירות, אתם יכולים להשבית את השיתוף המוגבל לפי דומיינים או להסיר את Cloud Key Management Service מהרשימה של השירותים המוגבלים ב-VPC Service Controls.
אם השגיאות נפתרו, כדי לפתור את הכשלים צריך להעביר את המשאבים המושפעים לחשבון שירות חדש. מידע על השלבים האלה מופיע בקטע הבא.
העברת חשבונות שירות של CMEK
בתהליך הבא מוסבר איך לשנות את חשבון השירות שמשמש את Cloud Logging כדי לגשת למפתחות מוגדרים של Cloud Key Management Service. השינוי בחשבון השירות פותר בעיה מוכרת ב-VPC Service Controls ובשיתוף מוגבל לפי דומיין.
מזהים את
loggingServiceAccountIdשל המשאב. משאב יכול להיות פרויקט, תיקייה או ארגון. אם יצרתם מאגרי יומנים עם CMEK מופעל, בוחרים במשאב PROJECT.פרויקט
gcloud logging settings describe --project=PROJECT_ID
לפני שמריצים את הפקודה, מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומן.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
לפני שמריצים את הפקודה, מחליפים את FOLDER_ID במזהה של התיקייה.
ארגון
gcloud logging settings describe --organization=ORGANIZATION_ID
לפני שמריצים את הפקודה, מחליפים את ORGANIZATION_ID במזהה הארגון.
הפקודה הקודמת מחזירה מידע שדומה לזה:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
במקרה של ארגונים ותיקיות, מוחזר גם השדה הבא:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
הערך של השדה
kmsKeyNameכולל את הפרויקט Google Cloud שבו המפתח מאוחסן.אם הגדרתם את הגדרות ברירת המחדל של המשאבים ב-Cloud Logging עם הגדרות CMEK עבור הארגון או התיקיות, צריך לבצע את הפעולות הבאות:
ב-KMS_PROJECT_ID, מעניקים את התפקיד Cloud Key Management Service CryptoKey Encrypter/Decrypter לחשבון השירות שמזוהה בשדה
loggingServiceAccountId.מריצים את פקודת ה-curl הבאה, שמשנה את חשבון השירות של Cloud Key Management Service שמשמש את המשאב.
פרויקט
לא רלוונטי.
FOLDER
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/folders/FOLDER_ID/settings?updateMask=kmsServiceAccountIdלפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את FOLDER_ID במזהה התיקייה.
- מחליפים את SERVICE_ACCT_NAME ב-
loggingServiceAccountIdשזוהה קודם.
ארגון
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/settings?updateMask=kmsServiceAccountIdלפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את ORGANIZATION_ID במזהה הארגון.
- מחליפים את SERVICE_ACCT_NAME ב-
loggingServiceAccountIdשזוהה קודם.
התוצאה של הפקודה הקודמת אמורה להיראות כך:
{ "name": ".../settings", "kmsKeyName": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "storageLocation": "...", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
לכל Google Cloud פרויקט או תיקייה שמכילים מאגרי יומנים קיימים שמופעל בהם CMEK, מבצעים את הפעולות הבאות:
בפרויקט או בתיקייה, עבור כל קטגוריה ביומן שמופעל בה CMEK, מבצעים את הפעולות הבאות:
מזהים את הפרויקט Google Cloud שבו מאוחסן המפתח של Cloud Key Management Service:
פרויקט
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
לפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומנים.
- מחליפים את LOCATION במיקום של קטגוריית היומנים.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
לפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את FOLDER_ID במזהה התיקייה.
- מחליפים את LOCATION במיקום של קטגוריית היומנים.
התוצאה של הפקודה הקודמת אמורה להיראות כך:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
עוברים אל Google Cloud הפרויקט שכולל את המפתח של Cloud Key Management Service,KMS_PROJECT_ID ומעניקים לחשבון השירות שמזוהה בשדה
loggingServiceAccountIdאת התפקיד Cloud Key Management Service CryptoKey Encrypter/Decrypter.
מריצים את פקודת ה-curl הבאה בפרויקט, כדי לשנות את חשבון השירות של Cloud Key Management Service:
פרויקט
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/projects/PROJECT_ID/settings?updateMask=kmsServiceAccountIdלפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומנים.
- מחליפים את SERVICE_ACCT_NAME ב-
loggingServiceAccountIdשזוהה קודם.
FOLDER
אין צורך בפעולה נוספת, כי בשלב הקודם שיניתם את חשבון השירות של Cloud Key Management Service שבו נעשה שימוש בתיקייה.
התוצאה של הפקודה הקודמת אמורה להיראות כך:
{ "name": ".../settings", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
לכל קטגוריה ביומן שמופעל בה CMEK, מבצעים את הפעולות הבאות:
מאשרים את ההעברה. משאב האב של קטגוריה ביומן קובע איזו פקודה של Google Cloud CLI צריך להריץ. ההורה יכול להיות פרויקט, תיקייה או ארגון.
פרויקט
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
לפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומנים.
- מחליפים את LOCATION במיקום של קטגוריית היומנים.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
לפני שמריצים את הפקודה, צריך לבצע את הפעולות הבאות:
- מחליפים את FOLDER_ID במזהה התיקייה.
- מחליפים את LOCATION במיקום של קטגוריית היומנים.
בפרויקט, התוצאה של הפקודה הקודמת דומה לתוצאה הבאה:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
מוודאים ש-
serviceAccountIdזהה ל-loggingServiceAccountIdשזוהה קודם.
צריך להמתין לפחות 30 דקות לפני ביטול ההרשאות בחשבון השירות הקודם. אם נתקלתם בבעיות אחרי ביטול ההרשאות בחשבון השירות הקודם, תוכלו לשחזר את ההרשאות ולפנות לתמיכה של Cloud.
פתרון בעיות שקשורות ל-CMEK
כשמגדירים CMEK, הפרויקט שמכיל את מפתח Cloud KMS מקבל הודעה על בעיות שקשורות לכך. Google Cloud לדוגמה, העדכונים נכשלים אם KMS_KEY_NAME לא תקין, אם לחשבון השירות המשויך אין את התפקיד הנדרש Cloud Key Management Service CryptoKey Encrypter/Decrypter, או אם הגישה למפתח מושבתת.
אחרי שמגדירים CMEK, לפחות אחד מהמקרים הבאים מתרחש:
קיבלתם התראה מ-Cloud Logging על בעיות בגישה ל-CMEK.
כשיוצרים פרויקטים חדשים בארגון Google Cloud או בתיקייה, רואים ש-CMEK לא מופעל עבור מאגרי היומנים
_Defaultו-_Required.מתקבלות שגיאות כשקוראים ממאגרי יומנים עם CMEK מופעל, או כשמנסים ליצור או לעדכן מאגרי יומנים.
בהודעה מפורט מידע על הכשל ומוסבר מה אפשר לעשות כדי לפתור את הבעיה:
| שגיאה | המלצה |
|---|---|
| ההרשאה למפתח קריפטוגרפי נדחתה | לחשבון השירות של Logging שמשויך לפרויקט Google Cloud אין הרשאות IAM מספיקות כדי לפעול על מפתח Cloud KMS שצוין. פועלים לפי ההוראות שמופיעות בשגיאה או מעיינים במסמכים הבאים:
|
| המפתח הקריפטוגרפי מושבת | מפתח Cloud KMS שצוין הושבת. פועלים לפי ההוראות שמופיעות בשגיאה כדי להפעיל מחדש את המפתח. |
| המפתח הקריפטוגרפי הושמד | מפתח Cloud KMS שצוין הושמד. פועלים לפי ההוראות או מעיינים במסמכים הבאים: |
זיהוי הפרויקט שמכיל את מפתח Cloud KMS
כדי לזהות את המזהה של Google Cloud הפרויקט שמכיל את מפתח ההצפנה שמשמש קטגוריית יומנים, תיקייה או ארגון, מבצעים את הפעולות הבאות:
פרויקט
gcloud logging settings describe --project=PROJECT_ID
לפני שמריצים את הפקודה, מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את קטגוריית היומן.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
לפני שמריצים את הפקודה, מחליפים את FOLDER_ID במזהה של התיקייה.
ארגון
gcloud logging settings describe --organization=ORGANIZATION_ID
לפני שמריצים את הפקודה, מחליפים את ORGANIZATION_ID במזהה הארגון.
הפקודה הקודמת מחזירה מידע שדומה לזה:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
במקרה של ארגונים ותיקיות, מוחזר גם השדה הבא:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
הערך של השדה kmsKeyName כולל את הפרויקט Google Cloud שבו המפתח מאוחסן.
אימות השימושיות של המפתח
כדי לוודא שאפשר להשתמש במפתח, מריצים את הפקודה הבאה כדי להציג רשימה של כל המפתחות:
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
הפקודה הזו מחזירה מידע על כל מפתח בפורמט טבלאי. השורה הראשונה של הפלט היא רשימה של שמות העמודות:
NAME PURPOSE ...
מוודאים שמפתח Cloud KMS מופיע בפלט של הפקודה בתור ENABLED, ושמטרת המפתח היא הצפנה סימטרית: בעמודה PURPOSE צריך להופיע ENCRYPT_DECRYPT ובעמודה PRIMARY_STATE צריך להופיע ENABLED.
אם צריך, יוצרים מפתח חדש.
אימות הגדרת ההרשאות
לחשבונות שירות שמשויכים להגדרות CMEK של הארגון צריך להיות התפקיד Cloud KMS CryptoKey Encrypter/Decrypter בשביל המפתח שהוגדר.
כדי להציג את מדיניות ה-IAM של המפתח, מריצים את הפקודה הבאה:
gcloud kms keys get-iam-policy KMS_KEY_NAME
אם צריך, מוסיפים למפתח את חשבון השירות שמכיל את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter.