במאמר הזה מוסבר איך להגדיר את רמת הבקרה של אשכול Google Kubernetes Engine (GKE) באמצעות רשויות אישורים (CA) ומפתחות שאתם מנהלים. ההנחיות האלה מיועדות לאדמינים של אבטחה שיש להם דרישות ספציפיות של תאימות או דרישות המדיניות ארגונית לגבי שליטה בהנפקת אישורים ובחתימה.
בדף הזה מתואר חלק אחד מתוך קבוצה של תכונות אופציונליות של מישור הבקרה ב-GKE, שמאפשרות לבצע משימות כמו אימות של מצב האבטחה של מישור הבקרה או הגדרת הצפנה וחתימה על פרטי הכניסה במישור הבקרה באמצעות מפתחות שאתם מנהלים. פרטים נוספים זמינים במאמר מידע על שליטה במישור הבקרה של GKE.
כברירת מחדל, Google Cloud מחיל אמצעי אבטחה שונים על מישור הבקרה המנוהל. בדף הזה מתוארות יכולות אופציונליות שמאפשרות לכם לקבל יותר שקיפות או שליטה במישור הבקרה של GKE.
כדאי להכיר את המושגים הבאים:
רכיבי פרטי הכניסה של מישור הבקרה
באשכולות GKE נעשה שימוש ברשויות אישורים ובמפתחות ספציפיים כדי להנפיק פרטי כניסה באשכול, כמו אישורי X.509 או אסימוני ServiceAccount. אתם יכולים ליצור מפתחות ב-Cloud Key Management Service (Cloud KMS) ותעודות CA ב-Certificate Authority Service (CA Service) ולהגדיר את האשכולות כך שישתמשו במשאבים האלה במקום בתעודות CA ובמפתחות שמנוהלים על ידי Google Cloud.
מידע נוסף על הרכיבים הספציפיים שאתם יוצרים זמין במאמר רשויות אישורים ומפתחות בניהול עצמי.
שימוש בתכונות אחרות של שליטה במישור הבקרה של GKE
השליטה במישור הבקרה של GKE מספקת את התכונות הבאות שקשורות למפתחות בניהול עצמי:
- הפעלת רשויות אישורים (CA) ומפתחות משלכם (המסמך הזה)
- הצפנה של רכיבי מישור הבקרה
מטרות
- יצירת מפתחות ב-Cloud KMS
- יצירת רשויות אישורים בשירות CA
- הענקת תפקידים של ניהול זהויות והרשאות גישה (IAM) לסוכן השירות של GKE
- יצירת אשכול GKE שמשתמש ב-CA ובמפתחות שלכם
- אימות השימוש באישורים ובמפתחות שלכם באשכול
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init מפעילים את ממשקי ה-API של Kubernetes Engine, Certificate Authority Service ו-Cloud Key Management Service, אם אחד מהם עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.googleapis.com
privateca.googleapis.com cloudkms.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init מפעילים את ממשקי ה-API של Kubernetes Engine, Certificate Authority Service ו-Cloud Key Management Service, אם אחד מהם עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable container.googleapis.com
privateca.googleapis.com cloudkms.googleapis.com - מוודאים שהסביבה שלכם עומדת בדרישות לשימוש בתכונות של "שליטה במישור הבקרה של GKE". כדי להפעיל את התכונות האלה, צריך לפנות לצוות המכירות Google Cloud .
- כדי לעקוב בצורה מהימנה אחרי הנפקת פרטי כניסה והשימוש בהם, חשוב לוודא שיומני הביקורת הבאים של גישה לנתונים מופעלים:
- Cloud Key Management Service (KMS) API:
DATA_READ - Certificate Authority Service:
ADMIN_READ
הסבר על הפעלת סוגי היומנים האלה מופיע במאמר הפעלת יומני ביקורת של גישה לנתונים.
- Cloud Key Management Service (KMS) API:
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שדרושות להרצת רשויות אישורים ומפתחות משלכם, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
יצירת מפתחות Cloud KMS:
Cloud KMS Admin (
roles/cloudkms.admin) בפרויקט המפתחות -
יצירת מאגרי CA ורשויות CA בסיסיות:
אדמין של שירות CA (
roles/privateca.admin) בפרויקט המפתח -
יצירת אשכולות GKE:
אדמין של אשכול Kubernetes Engine (
roles/container.clusterAdmin) בפרויקט של האשכול
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
דרישות
עליכם לעמוד בדרישות הבאות:
- באשכול צריך להריץ את גרסה 1.31.1-gke.1846000 של GKE או גרסה מתקדמת יותר.
כדי להגדיר הצפנת דיסק במישור הבקרה באמצעות מפתחות משלכם, בנוסף להגדרת רשויות אישורים משלכם, צריך ליצור את האשכול באחד מהאזורים הבאים:
asia-east1asia-northeast1asia-southeast1europe-west1europe-west4us-central1us-central2us-east1us-east4us-east5us-south1us-west1us-west3us-west4
מגבלות
ההגבלות הבאות חלות:
- אפשר להשתמש רק במפתחות מ-Cloud KMS. אי אפשר להשתמש בספק KMS אחר או בספק הצפנה אחר.
- אין תמיכה במפתחות של Cloud External Key Manager (Cloud EKM).
- אפשר להשתמש רק ברשויות אישורים משירות רשויות האישורים.
הכנת הסביבה
בקטע הזה תזהו את הפרויקטים ב- Google Cloud שתשתמשו בהם במדריך, ותיצרו אוסף מפתחות ב-Cloud KMS שיכיל את המפתחות שלכם.
זיהוי פרויקטים
מומלץ להשתמש בפרויקטים נפרדים Google Cloud באופן הבא:
- פרויקט מפתחות: מכיל את כל המפתחות ורשויות האישורים.
- פרויקט האשכול: מכיל את אשכולות GKE.
אתם יכולים להשתמש באותו פרויקט למפתחות, לרשויות האישורים ולאשכולות GKE, אבל מומלץ להשתמש בפרויקטים נפרדים כדי שהצוותים שמנהלים את הפעולות הקריפטוגרפיות בארגון יהיו נפרדים מהצוותים שמנהלים את פעולות האשכולות.
יצירת אוסף מפתחות
יוצרים אוסף מפתחות בפרויקט המפתחות כדי להכיל את כל המפתחות של אשכול ספציפי. צריך ליצור את אוסף המפתחות באותו מיקום שבו נמצא אשכול GKE.
מריצים את הפקודה הבאה:
gcloud kms keyrings create KEY_RING_NAME \
--location=LOCATION \
--project=KEY_PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_RING_NAME: שם לאוסף המפתחות. -
KEY_PROJECT_ID: מזהה הפרויקט של פרויקט המפתח. -
LOCATION: Google Cloud האזור שבו רוצים ליצור את אוסף המפתחות. האזור הזה צריך להיות זהה לאזור שבו נמצא אשכול GKE.
יצירת מפתחות
לכל אחת מרשויות פרטי הכניסה, כמו מפתחות של חשבונות שירות ורשויות אישורים, יוצרים מפתח באמצעות Cloud KMS. בקטע הזה מוסבר איך ליצור את המפתחות ש-GKE משתמש בהם כדי לחתום על פרטי הכניסה באשכול ולאמת אותם.
אתם יכולים לציין מאפיינים משלכם למפתחות האלה בהתאם לצרכים של הארגון. פרטים נוספים זמינים בדף יצירת מפתח ובמאמרי העזרה של ה-API projects.locations.keyRings.cryptoKeys.
כשיוצרים את המשאבים האלה ב-Cloud KMS, כדאי לקחת בחשבון את הנקודות הבאות:
- אם יש לכם אוסף מפתחות קיים בפרויקט המפתחות, אתם יכולים להשתמש בו כדי לאחסן את כל המפתחות שאתם יוצרים לשימוש עם האשכול.
- כדי לצמצם את זמן האחזור, אוסף המפתחות צריך להיות באותו Google Cloud מיקום של האשכול.
- במפתחות צריך לציין את
asymmetric-signingכמטרת המפתח. - משתמשים באלגוריתמים הבאים בהתאם לסוג המפתח:
- מפתחות חתימה של ServiceAccount: אלגוריתם חתימה חזק של RSA PKCS1, כמו
rsa-sign-pkcs1-4096-sha256אוrsa-sign-pkcs1-3072-sha256. - מפתחות של רשות אישורים: אלגוריתם חזק כמו
ec-sign-p256-sha256.
- מפתחות חתימה של ServiceAccount: אלגוריתם חתימה חזק של RSA PKCS1, כמו
- מפתחות חומרה של Cloud HSM נתמכים, אבל רמת ההגנה
softwareמספיקה לרוב תרחישי השימוש. למידע נוסף על מפתחות חומרה, ראו Cloud HSM. - אל תשנו את משך הזמן שמוגדר כברירת מחדל להשמדת מפתחות.
- GKE לא מונע מכם למחוק מפתחות Cloud KMS, כולל מפתחות של CA Service, שנמצאים בשימוש באשכול. לפני שמוחקים מפתחות או רשויות אישורים, צריך לוודא שלא נעשה בהם שימוש במשאבים.
כדי ליצור את המפתחות, מריצים את הפקודות הבאות:
יוצרים את מפתח החתימה של חשבון השירות ב-Kubernetes, שמוגדר גם כמפתח האימות של חשבון השירות במהלך יצירת האשכול:
gcloud kms keys create sa-signing-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=rsa-sign-pkcs1-4096-sha256 \ --project=KEY_PROJECT_IDמחליפים את
KEY_PROJECT_IDבמזהה הפרויקט של פרויקט המפתח הייעודי.יוצרים את מפתח ה-CA הבסיסי של האשכול:
gcloud kms keys create cluster-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_IDיוצרים את מפתח ה-CA הבסיסי של עמיתי etcd:
gcloud kms keys create etcd-peer-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_IDיוצרים את מפתח ה-CA הבסיסי של etcd API:
gcloud kms keys create etcd-api-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_IDיוצרים את מפתח ה-CA של שורש הצבירה:
gcloud kms keys create aggregation-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_ID
יצירת רשויות האישורים
אחרי שיוצרים את המפתחות לכל אחת מהפונקציות של מישור הבקרה, משתמשים בכל מפתח כדי ליצור את מאגרי ה-CA ואת רשויות ה-CA הבסיסיות התואמות באמצעות CA Service:
יוצרים את מאגר רשויות ה-CA של האשכול:
gcloud privateca pools create cluster-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-certהדגל
--no-publish-crlוהדגל--no-publish-ca-certהם אופציונליים. אם לא מציינים את הדגלים האלה, האישורים מתפרסמים בקטגוריה של Cloud Storage. פרטים נוספים מופיעים במאמר בנושא הפעלה של פרסום אישורי CA ו-CRL עבור רשויות אישורים במאגר אישורים.יוצרים את רשות האישורים הבסיסית של האשכול:
gcloud privateca roots create cluster-root-ca \ --pool=cluster-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/cluster-ca-key/cryptoKeyVersions/1 \ --subject="CN=cluster-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enableמחליפים את
ORGANIZATIONבשם הארגון.יוצרים את מאגר רשות האישורים (CA) של עמיתי etcd:
gcloud privateca pools create etcd-peer-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-certיוצרים את רשות האישורים הבסיסית של עמיתי etcd:
gcloud privateca roots create etcd-peer-root-ca \ --pool=etcd-peer-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/etcd-peer-ca-key/cryptoKeyVersions/1 \ --subject="CN=etcd-peer-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enableיוצרים את מאגר רשויות האישורים של etcd API:
gcloud privateca pools create etcd-api-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-certיוצרים את רשות האישורים הבסיסית של etcd API:
gcloud privateca roots create etcd-api-root-ca \ --pool=etcd-api-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/etcd-api-ca-key/cryptoKeyVersions/1 \ --subject="CN=etcd-api-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enableיוצרים את מאגר האישורים המצטבר:
gcloud privateca pools create aggregation-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-certיוצרים את רשות האישורים (CA) של שורש הצבירה:
gcloud privateca roots create aggregation-root-ca \ --pool=aggregation-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/aggregation-ca-key/cryptoKeyVersions/1 \ --subject="CN=aggregation-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enable
הענקת תפקידי IAM לסוכן השירות של GKE
סוכן השירות של GKE צריך גישה למשאבים שיצרתם ב-Cloud KMS וב-CA Service. סוכן השירות משתמש במשאבים האלה כדי לחתום על פרטי הכניסה, לאמת אותם ולהנפיק אותם באשכול. אפשר להשתמש בתפקידי ה-IAM הבאים שהוגדרו מראש:
- Kubernetes Engine KMS Crypto Key User
(
roles/container.cloudKmsKeyUser) - CA Service Certificate Manager
(
roles/privateca.certificateManager)
כדי להקצות את התפקידים האלה לסוכן השירות של GKE, מבצעים את הפעולות הבאות:
כדי למצוא את מספר הפרויקט של פרויקט האשכול:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'מחליפים את הערך
CLUSTER_PROJECT_IDבמזהה הפרויקט של האשכול.מקצים את התפקיד 'משתמש במפתח קריפטוגרפי של Kubernetes Engine KMS' למפתח החתימה של חשבון השירות שיצרתם בשלב יצירת מפתחות:
gcloud kms keys add-iam-policy-binding sa-signing-key \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/container.cloudKmsKeyUser \ --project=KEY_PROJECT_IDמחליפים את הערך
CLUSTER_PROJECT_NUMBERבמספר הפרויקט של אשכול הפרויקט.מקצים את התפקיד 'מנהל אישורים של שירות CA' במאגרי ה-CA שיצרתם בשלב יצירת רשויות אישורים:
gcloud privateca pools add-iam-policy-binding cluster-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding etcd-peer-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding etcd-api-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding aggregation-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID
הענקת תפקידים נוספים כשלא משתמשים ב-CLI של gcloud
בקטע הזה מתוארים שלבי הגדרה נוספים שצריך לבצע אם אתם מתכננים להגדיר את רשויות האישורים והמפתחות באמצעות לקוח כמו Terraform או מסוף Google Cloud , במקום להשתמש ב-CLI של gcloud. אם אתם משתמשים ב-CLI של gcloud, דלגו על הקטע הזה ועברו לקטע הגדרת רשויות אישורים ומפתחות באשכול חדש.
כשמשתמשים ב-CLI של gcloud כדי להגדיר את רשויות האישורים והמפתחות, כמו שמתואר במסמך הזה, ה-CLI של gcloud יוצר ומגדיר באופן אוטומטי סוכן שירות בשביל CA Service, ומעניק לו תפקידי IAM. עם זאת, אם אתם משתמשים בלקוח כמו Terraform או במסוף Google Cloud כדי להגדיר את סביבת Google Cloud, אתם צריכים לבצע את שלבי ההגדרה הבאים באופן ידני בפרויקט המפתח:
מפעילים את היצירה של סוכן השירות של CA Service.
gcloud beta services identity create --service=privateca.googleapis.com \ --project=KEY_PROJECT_IDמאתרים את מספר הפרויקט של פרויקט המפתח:
gcloud projects describe KEY_PROJECT_ID \ --format='value(projectNumber)'צריך להעניק את התפקיד צפייה (
roles/viewer) ואת התפקיד Cloud KMS CryptoKey Signer/Verifier (roles/cloudkms.signerVerifier) לכל מפתחות ה-CA הבסיסיים שיצרתם בקטע יצירת מפתחות:for key in cluster-ca-key etcd-peer-ca-key etcd-api-ca-key aggregation-ca-key do gcloud kms keys add-iam-policy-binding $key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --role=roles/viewer \ --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \ --project=KEY_PROJECT_ID gcloud kms keys add-iam-policy-binding $key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --role=roles/cloudkms.signerVerifier \ --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \ --project=KEY_PROJECT_ID doneמחליפים את
KEY_PROJECT_NUMBERבמספר פרויקט המפתח מהפלט של השלב הקודם.הפקודה הזו היא לולאת
forשחוזרת על עצמה עבור מפתחות CA בסיסיים, ומעניקה לכל מפתח את התפקיד הזה לסוכן השירות של CA Service. אם השתמשתם בשמות שונים למפתחות של רשות האישורים הבסיסית, צריך להריץ את הפקודות האלה באופן ידני לכל מפתח.
הגדרת רשויות אישורים ומפתחות באשכול חדש
אחרי שיוצרים מפתחות, מאגרי CA, רשויות CA בסיסיות ומקצים תפקידי IAM לסוכן השירות של GKE, יוצרים אשכול חדש שמשתמש במשאבים האלה.
הדגלים שמציינים בפקודה ליצירת אשכול צריכים את נתיבי המשאבים הבאים כערכים:
- הנתיב לגרסת המפתח ב-Cloud KMS של מפתח החתימה של חשבון השירות שיצרתם בקטע יצירת מפתחות. מציינים את הנתיב הזה בדגל
service-account-signing-keysובדגלservice-account-verification-keys. - הנתיב לכל אחד ממאגרי ה-CA שיצרתם בקטע יצירת רשויות האישורים.
כדי להגדיר אשכול חדש לשימוש במפתחות וב-CA, מבצעים את השלבים הבאים:
מוצאים את הנתיב לגרסה האחרונה של מפתח החתימה של חשבון השירות שמופעל:
gcloud kms keys versions list \ --key=sa-signing-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ --format="value(name)" | sed 1qמחליפים את הערך
KEY_PROJECT_IDבמזהה הפרויקט של פרויקט המפתח.הפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1מאתרים את הנתיבים לכל אחד ממאגרי ה-CA שיצרתם:
gcloud privateca pools list --format="get(name)" \ --project=KEY_PROJECT_IDהפלט אמור להיראות כך:
projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-poolמוודאים שהפלט מכיל את כל מאגרי האישורים שנוצרו עבור GKE.
יצירת אשכול
בקטע הזה יוצרים אשכול עם אפשרויות שונות שמוגדרות בהתאם לתכונות של הרשאות הגישה למישור הבקרה של GKE שרוצים להגדיר. אפשר להגדיר את התכונות האלה באוסף רק במהלך יצירת האוסף. הפקודות הבאות יוצרות אשכולות במצב רגיל. כדי ליצור במקום זאת אשכולות במצב אוטומטי, משתמשים באותם דגלים עם הפקודה gcloud container clusters create-auto.
כדי להגדיר רק את רשויות האישורים והמפתחות שיצרתם במדריך הזה, מריצים את הפקודה הבאה:
gcloud container clusters create example-cluster \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --cluster-version=VERSION \ --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --cluster-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --etcd-api-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --aggregation-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-poolמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_PROJECT_ID: מזהה הפרויקט של פרויקט האשכול. -
VERSION: גרסת GKE של האשכול. חייבת להיות גרסה 1.31.1-gke.1846000 ואילך.
-
כדי להגדיר את רשויות האישורים והמפתחות, וגם את ההצפנה של דיסק האתחול של מישור הבקרה ואת ההצפנה של etcd, מבצעים את הפעולות הבאות:
- מבצעים את כל שלבי ההגדרה העיקריים שמפורטים במאמר הצפנת דיסקי האתחול של etcd ושל מישור הבקרה.
- מאתרים את הנתיבים לכל אחד מהמפתחות לפי ההוראות במאמר שימוש במפתחות הצפנה באשכול.
יוצרים אשכול:
gcloud container clusters create example-cluster \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --cluster-version=VERSION \ --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --cluster-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --etcd-api-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --aggregation-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEYמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול. -
VERSION: גרסת ה-GKE של האשכול. הגרסה צריכה להיות 1.31.1-gke.1846000 ואילך. -
PATH_TO_DISK_KEY: הנתיב למפתח ההצפנה של הדיסק. -
PATH_TO_ETCD_BACKUP_KEY: הנתיב למפתח ההצפנה של הגיבוי הפנימי של etcd.
-
אפשר גם להשתמש בדגלים האלה כשיוצרים אשכול חדש במצב רגיל.
איך מוודאים שהאשכול משתמש במפתחות וב-CA שציינתם
בקטע הזה מוסבר איך לאמת את המפתחות ואת רשויות האישורים שבהם נעשה שימוש במהלך יצירת האשכול. אפשר לבצע את האימות הזה באמצעות Cloud Logging או באמצעות Google Cloud CLI.
שימוש ברישום ביומן כדי לאמת מפתחות ורשויות אישורים
כדי לאמת את המפתחות ואת רשויות האישורים באמצעות Logging, מבצעים את הפעולות הבאות:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מציינים את השאילתה הבאה:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*protoPayload.request.cluster.userManagedKeysConfig:*מסנן את התוצאות של יומני יצירת אשכולות שכוללים מפתחות ורשויות אישורים שאתם מנהלים.לוחצים על Run query.
בתוצאות, מרחיבים את יומן יצירת האשכול. מוודאים שהנתיבים למפתחות ולרשויות האישורים זהים לאלה שיצרתם לאותו אשכול, כמו בדוגמה הבאה:
# lines omitted for clarity
userManagedKeysConfig: {
aggregationCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool"
clusterCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool"
etcdApiCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool"
etcdPeerCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool"
serviceAccountSigningKeys: [
0: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
]
serviceAccountVerificationKeys: [
0: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
]
}
אימות מפתחות ורשויות אישורים באמצעות ה-CLI של gcloud
כדי לוודא שהאשכול משתמש ב-CA ובמפתחות שיצרתם, מריצים את הפקודה הבאה:
gcloud container clusters describe example-cluster \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
הפלט אמור לכלול את השדה userManagedKeysConfig, כמו בדוגמה הבאה:
# lines omitted for clarity
userManagedKeysConfig:
sa-signing-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
sa-verification-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
cluster-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool
etcd-peer-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool
etcd-api-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool
aggregation-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקטים
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת משאבים בודדים
מוחקים את האשכול:
gcloud container clusters delete example-cluster \ --location=LOCATION \ --project=CLUSTER_PROJECT_IDמשביתים את רשויות האישורים ברמה הבסיסית (root):
gcloud privateca roots disable cluster-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots disable etcd-peer-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots disable etcd-api-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots disable aggregation-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool \ --project=KEY_PROJECT_IDמוחקים את רשויות האישורים ברמה הבסיסית (root):
gcloud privateca roots delete cluster-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots delete etcd-peer-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots delete etcd-api-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --project=KEY_PROJECT_ID gcloud privateca roots delete aggregation-root-ca \ --location=LOCATION \ --pool=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool \ --project=KEY_PROJECT_IDמוחקים את מאגרי ה-CA:
gcloud privateca pools delete cluster-ca-pool --location=LOCATION \ --project=KEY_PROJECT_ID gcloud privateca pools delete etcd-peer-ca-pool --location=LOCATION \ --project=KEY_PROJECT_ID gcloud privateca pools delete etcd-api-ca-pool --location=LOCATION \ --project=KEY_PROJECT_ID gcloud privateca pools delete aggregation-ca-pool --location=LOCATION \ --project=KEY_PROJECT_IDמחיקת המפתחות:
gcloud kms keys versions destroy 1 \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --key=sa-signing-key \ --project=KEY_PROJECT_ID gcloud kms keys versions destroy 1 \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --key=cluster-ca-key \ --project=KEY_PROJECT_ID gcloud kms keys versions destroy 1 \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --key=etcd-peer-ca-key \ --project=KEY_PROJECT_ID gcloud kms keys versions destroy 1 \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --key=etcd-api-ca-key \ --project=KEY_PROJECT_ID gcloud kms keys versions destroy 1 \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --key=aggregation-ca-key \ --project=KEY_PROJECT_ID
אי אפשר למחוק אוספי מפתחות מ-Cloud KMS. עם זאת, אוספי מפתחות לא כרוכים בעלויות נוספות.
המאמרים הבאים
- מעקב אחר השימוש בזהות מרגע ההנפקה
- החלפת רשויות האישורים ומפתחות החתימה של חשבון השירות
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.