ניהול אמצעי בקרה של מדיניות
במדריך הזה מוסבר איך להטמיע אמצעי בקרה של מדיניות במשאבים של שירות רשות האישורים (CAS).
מטרות
במדריך הזה מוסבר איך להגדיר מאגר משותף של רשויות אישורים (CA) להנפקת אישורי DNS באמצעות אמצעי הבקרה הבאים של המדיניות:
- המשתמש
prod-dns-requesterיכול לבקש אישורים של שרת TLS של ישות קצה עבור הדומיין*.prod.example.com. - המשתמש
test-dns-requesterיכול לבקש אישורים של שרת TLS של ישות קצה לדומיין*.test.example.com. - המשתמש
blank-check-requesterיכול לבקש כל סוג של אישור ממאגר רשויות האישורים.
במדריך הזה נעשה שימוש במדיניות הנפקת אישורים של מאגר CA, בתבניות אישורים ובקשרי IAM מותנים כדי להשיג את התרחיש הזה.
לפני שמתחילים
- מידע על אמצעי הבקרה השונים של המדיניות שמוצעים על ידי שירות CA
- איך יוצרים תבניות של אישורים
- אפשר לקרוא על פרופילי האישורים שבהם אפשר להשתמש בתרחישים שונים של הנפקת אישורים.
- במאמר הזה מוסבר איך אפשר להשתמש ב-Common Expression Language (CEL) כדי לאכוף אמצעי בקרה שונים של מדיניות להנפקת אישורים.
- כך משתמשים במדיניות הנפקת אישורים.
- במאמר הגדרת מדיניות IAM, שינוי שלה והסרה שלה מוסבר איך ליצור ולנהל משאבים של שירות CA.
יצירת מאגר של רשויות שמנפיקות אישורים
כדי ליצור מאגר של רשויות אישורים, פועלים לפי ההוראות הבאות:
כדי ליצור מאגר של רשויות אישורים שמשתמש בקובץ
issuance-policy.yaml, משתמשים בפקודה הבאהgcloud:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEכאשר:
- LOCATION הוא המיקום שבו רוצים ליצור את מאגר רשויות האישורים. רשימה מלאה של המיקומים זמינה במאמר בנושא מיקומים.
- הדגל
--tierמשמש לציון הרמה של מאגר רשויות האישורים. מידע נוסף על רמות זמין במאמר בחירת רמות הפעולה.
כדי ליצור רשות אישורים עם משאבים שמנוהלים על ידי Google במאגר רשויות האישורים שנוצר לאחרונה, משתמשים בפקודה
gcloudהבאה:gcloud
gcloud privateca roots create CA_NAME \ --pool=POOL_NAME \ --location=LOCATION \ --subject="CN=Example DNS Root, O=Example LLC, C=US" \ --validity="10Y" \ --max-chain-length=1 \ --auto-enableכאשר:
- POOL_NAME הוא המזהה הייחודי של מאגר רשויות האישורים.
- LOCATION הוא המיקום שבו רוצים ליצור את מאגר רשויות האישורים. רשימה מלאה של המיקומים זמינה במאמר בנושא מיקומים.
- הדגל
--subjectמשמש להעברת השם של נושא האישור. - הדגל
--validityקובע את תקופת התוקף של רשות האישורים. תקופת התוקף שמוגדרת כברירת מחדל היא 10 שנים. - הדגל
--max-chain-lengthקובע את העומק המקסימלי של רשויות אישורים משניות שמותרות תחת רשות אישורים. - הדגל
--auto-enableיוצר את ה-CA במצבENABLEDולא במצבSTAGED. מידע נוסף על מצבי CA זמין במאמר מצבי CA.
הגדרת אמצעי בקרה של מדיניות לאישורים לבדיקה
השינויים במדיניות הנפקת האישורים ייכנסו לתוקף באופן מיידי. מומלץ להגדיר את אמצעי הבקרה של מדיניות הבדיקה לפני שמשתמשים בהם בסביבת ייצור. בקטע הזה מוסבר איך מגדירים אמצעי בקרה של מדיניות לבדיקה.
גם בתבניות ה-DNS של הבדיקה וגם בתבניות ה-DNS של ההפקה, צריך להשתמש באותם ערכים מוגדרים מראש של אישורי TLS של השרת. יוצרים קובץ YAML leaf_server_tls_predefined_values.yaml ומעתיקים אליו את הגדרת ה-TLS של השרת של ישות הקצה הבאה.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
הגדרת אמצעי בקרה של מדיניות לאישורי DNS לבדיקה
בקטע הזה מוסבר איך מגדירים אמצעי בקרה של מדיניות כדי לאפשר למשתמש test-dns-requester לבקש אישורי TLS של שרת ישות קצה עבור DNS בדומיין *.test.example.com.
יצירת תבנית אישור DNS לאישורי בדיקה
בקטע הזה מוסבר איך ליצור תבנית אישור שמכילה את ההגדרה של TLS של שרת ישות קצה. תבנית האישור הזו מגבילה את השימוש באישורים רק ל-SAN של DNS בדומיין *.test.example.com. ההגבלות האלה מיושמות באמצעות ביטוי של Common Expression Language (CEL). תבנית האישור גם מסירה כל נושא שצוין בבקשת האישור.
משתמשים בפקודה
gcloudהבאה כדי ליצור את תבנית האישור שמכילה את התוספים של שרת TLS של ישות הקצה, מסירה את כלsubjectשצוינו בבקשת האישור ומגבילה את שמות ה-SAN המותרים.gcloud
gcloud privateca templates create test-server-tls-template \ --predefined-values-file ./leaf_server_tls_predefined_values.yaml \ --no-copy-subject \ --copy-sans \ --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"כאשר:
- הדגל
--predefined-values-fileמשמש להעברת קובץ YAML שמתאר ערכי X.509 מוגדרים מראש שהוגדרו על ידי תבנית האישור. - הדגל
--no-copy-subjectמשמיט את כל הנושאים שצוינו על ידי המתקשר מבקשת האישור. - הדגל
--copy sansמוודא שהתוסף SAN מבקשת האישור מועתק לאישור החתום. - הדגל
--identity-cel-expressionמשמש להעברת ביטוי CEL שמוערך מול הזהות באישור לפני שהוא מונפק. מידע נוסף על שימוש בביטויי CEL להטמעה של אמצעי בקרה שונים של מדיניות זמין במאמר שימוש ב-CEL.
מידע נוסף על יצירת תבניות של אישורים זמין במאמר בנושא יצירת תבנית של אישור.
- הדגל
יצירת קישורי IAM לאישורי בדיקה של DNS
כדי לאפשר למשתמש test-dns-requester@ במאגר אישורי ה-CA של DNS לבקש אישורי TLS של שרת בדיקה, יוצרים קשירת IAM מותנית במאגר אישורי ה-CA. הקצאת התפקיד למשתמש רק אם בקשת האישור מכילה הפניה לתבנית .privateca.certificateRequestertest-dns-requester@test-server-tls-template מידע נוסף על ההרשאות והתפקידים ב-IAM שחלים על CA Service זמין במאמר בקרת גישה באמצעות IAM.
יוצרים קובץ YAML של מדיניות
test_dns_condition.yamlומעתיקים את הגדרת ה-TLS הבאה לקובץ.title: test DNS binding description: allows user to only create DNS test certificates expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/test-server-tls-template"בתחביר של התבנית נעשה שימוש ב-
PROJECT_ID/-/TEMPLATE_IDבמקום בשם המשאב המלא הרגילprojects/PROJECT_ID/locations/LOCATION/certificateTemplates/TEMPLATE_ID, כי תבניות האישורים צריכות להיות באותו מיקום כמו מאגר רשויות האישורים. המקף (-) פועל כתו כללי לחיפוש מיקום, וכך תנאי CEL נשארים תמציתיים, קריאים ולא תלויים במיקום.שם התבנית שצוין בתנאי IAM חייב להיות זהה לשם התבנית בבקשת האישור. לכן, אם מציינים מזהה פרויקט במאפיין
privateca.googleapis.com/templateשל ביטוי CEL, צריך לציין מזהה פרויקט גם כשמבקשים את האישור. אם מציינים מספר פרויקט בביטוי CEL, צריך לציין מספר פרויקט גם בבקשת האישור.משתמשים בפקודה
gcloudהבאה כדי להוסיף אמצעי בקרה למדיניות שמאפשרים ל-test-dns-requester@לבקש רק אישורי TLS לבדיקות בסביבת הייצור ממאגר רשויות האישורים.gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --location=LOCATION \ --role='roles/privateca.certificateRequester' \ --member='user:test-dns-requester@' \ --condition-from-file=./test_dns_condition.yamlכאשר:
- הדגל
--roleמשמש להעברת שם התפקיד שיוקצה לחבר. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הדגל
--memberמשמש להעברת החבר כדי להוסיף את הקישור. - הדגל
condition-from-fileמשמש להעברת השם של הקובץ עם תנאי CEL.
- הדגל
משתמשים ב
gcloudהבא כדי להוסיף אמצעי בקרה של מדיניות שמאפשרים ל-test-dns-requester@להשתמש בתבנית האישורים test-server-tls-template.gcloud
gcloud privateca templates add-iam-policy-binding test-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:test-dns-requester@'כאשר:
- הדגל
--roleמשמש להעברת שם התפקיד שיוקצה לחבר. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הדגל
--memberמשמש להעברת החבר כדי להוסיף את הקישור.
מידע נוסף על הגדרת מדיניות IAM זמין במאמר הגדרת מדיניות IAM.
- הדגל
הגדרת אמצעי בקרה של מדיניות לאישורים של סביבת הייצור
אחרי שבודקים את אמצעי הבקרה של המדיניות, אפשר להשתמש בהם בסביבת הייצור.
הגדרת אמצעי בקרה של מדיניות לאישורי DNS של סביבת ייצור
בקטע הזה מוסבר איך מגדירים אמצעי בקרה של מדיניות כדי לאפשר למשתמש prod-dns-requester לבקש אישורי TLS של ישות קצה עבור הדומיין .prod.example.com של DNS.
יצירת תבנית אישור לאישורי DNS של סביבת ייצור
כדי ליצור תבנית אישור שמכילה הגדרה של TLS של שרת ישות קצה, פועלים לפי ההוראות הבאות.
תבנית האישור הזו מגבילה את השימוש באישורים רק ל-SAN של DNS בדומיין *.prod.example.com. המגבלות האלה מיושמות באמצעות ביטוי של Common Expression Language (CEL). תבנית האישור גם מבטלת כל נושא שצוין בבקשת האישור.
יוצרים תבנית אישור prod-server-tls-template באמצעות הפקודה gcloud הבאה.
gcloud
gcloud privateca templates create prod-server-tls-template \
--predefined-values-file ./leaf_server_tls_predefined_values.yaml \
--no-copy-subject \
--copy-sans \
--identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.prod.example.com'))"
כאשר:
- הדגל
--predefined-values-fileמשמש להעברת קובץ YAML שמתאר ערכים מוגדרים מראש של X.509 שהוגדרו בתבנית האישור. - הדגל
--no-copy-subjectמשמיט את כל הנושאים שצוינו על ידי המתקשר מבקשת האישור. - הדגל
--copy sansמוודא שהתוסף SAN מבקשת האישור מועתק לאישור החתום. - הדגל
--identity-cel-expressionמשמש להעברת ביטוי CEL שמוערך מול הזהות באישור לפני שהוא מונפק. מידע נוסף על ביטויי CEL זמין במאמר שימוש בביטויי CEL.
מידע נוסף על יצירת תבניות של אישורים זמין במאמר בנושא יצירת תבנית של אישור.
מידע נוסף על הפקודה gcloud privateca templates create זמין במאמר gcloud privateca templates create.
יצירת קשירת IAM של DNS בסביבת ייצור
כדי לאפשר למשתמש prod-dns-requester@ במאגר אישורי ה-DNS לבקש אישורי TLS של שרת ייצור, צריך ליצור קשירת IAM מותנית במאגר אישורי ה-CA. נותנים למשתמש prod-dns-requester@ את התפקיד privateca.certificateRequester רק אם בקשת האישור מכילה הפניה לתבנית prod-server-tls-template. מידע נוסף על תפקידים והרשאות ב-IAM זמין במאמר בקרת גישה באמצעות IAM.
יוצרים קובץ YAML של מדיניות
prod_dns_condition.yamlומעתיקים את הגדרת ה-TLS הבאה לקובץ.title: Production DNS binding description: allows user to only create DNS production certificates expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/prod-server-tls-template"משתמשים בפקודה
gcloudהבאה כדי להוסיף אמצעי בקרה למדיניות שמאפשרים ל-prod-dns-requester@לבקש רק אישורי TLS של שרת ייצור ממאגר רשויות האישורים.gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --location=LOCATION \ --role='roles/privateca.certificateRequester' \ --member='user:prod-dns-requester@' \ --condition-from-file=./prod_dns_condition.yamlכאשר:
- הדגל
--roleמשמש להעברת שם התפקיד שיוקצה לחבר. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הדגל
--memberמשמש להעברת החבר כדי להוסיף את הקישור. - הדגל
condition-from-fileמשמש להעברת השם של הקובץ עם תנאי CEL.
מידע נוסף על הפקודה
gcloud privateca pools add-iam-policy-bindingזמין במאמר gcloud privateca pools add-iam-policy-binding.- הדגל
כדי להוסיף אמצעי בקרה של מדיניות שמאפשרים ל-
prod-dns-requester@להשתמש בתבנית האישורים prod-server-tls-template, משתמשים בפקודהgcloudהבאה:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'כאשר:
- הדגל
--roleמשמש להעברת שם התפקיד שיוקצה לחבר. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הדגל
--memberמשמש להעברת החבר כדי להוסיף את הקישור.
- הדגל
אמצעי בקרה על מדיניות המשתמש ללא הגבלות
כדי לאפשר למשתמש blank-check-requester@ לבקש כל אישור ללא הגבלות, יוצרים קישור IAM ללא תנאים ומקצים למשתמש את התפקיד privateca.certificateRequester.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
כאשר:
- הערך של הדגל
--roleקובע את התפקיד שמוקצה למשתמש. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הערך של הדגל
--memberקובע את המשתמש שהתפקיד מוקצה לו.
מחליפים את מה שכתוב בשדות הבאים:
- POOL_NAME: המזהה הייחודי של מאגר הרשות שמנפיקה את האישורים (CA)
- LOCATION: המיקום של מאגר הרשות שמנפיקה את האישורים. כאן מפורטת רשימת המיקומים המלאה.
בדיקת אמצעי הבקרה של המדיניות
אחרי שמטמיעים את מדיניות הנפקת האישורים ואת מדיניות IAM, חשוב לבדוק את המדיניות הזו כדי לוודא שהיא פועלת כמצופה.
אחזור כל קשרי המדיניות
מאחזרים את כל מדיניות ה-IAM שמוטמעת במאגר הרשויות להנפקת אישורים.
כדי לאחזר את כל מדיניות ה-IAM של מאגר רשויות האישורים, משתמשים בפקודה gcloud
privateca pools get-iam-policy:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
- POOL_NAME: המזהה הייחודי של מאגר הרשות שמנפיקה את האישורים (CA)
- LOCATION: המיקום של מאגר אישורי ה-CA. כאן מפורטת רשימת המיקומים המלאה.
מידע נוסף על הפקודה gcloud privateca pools get-iam-policy זמין במאמר gcloud privateca pools get-iam-policy.
יצירת אישורים
בקטע הזה מפורט מידע על יצירת אישורים לשימוש כללי, ואישורי DNS לבדיקה ולייצור.
יצירת אישורי DNS לבדיקה
כדי לאפשר למשתמש test-dns-requester@ לבקש אישורי DNS לבדיקה ממאגר רשויות האישורים, משתמשים בפקודה הבאה gcloud:
gcloud
gcloud privateca certificates create test-dns-1 \
--project=PROJECT_ID \
--issuer-location=LOCATION \
--issuer-pool=POOL_NAME \
--dns-san=foo.bar.test.example.com \
--generate-key \
--key-output-file=KEY_FILE_NAME \
--cert-output-file=test_dns_cert.pem \
--template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/test-server-tls-template
כאשר:
- הדגל
--dns-sanמשמש להגדרת אחד או יותר שמות SAN של DNS שמופרדים בפסיקים. - הדגל
--generate-keyמפעיל את יצירת המפתח הפרטי החדש RSA-2048 במחשב. - הסימון
--key-output-fileמשמש להגדרת הנתיב שבו ייכתב המפתח הפרטי שנוצר (בפורמט PEM). - הדגל
--cert-output-fileמשמש להגדרת הנתיב שבו ייכתב קובץ שרשרת האישורים בקידוד PEM (מסודר מישות הקצה ועד לרמה הבסיסית). - הדגל
--templateמשמש להגדרת השם של תבנית האישור שרוצים להשתמש בה להנפקת האישור הזה. התבנית שצוינה צריכה להיות באותו המיקום שבו נמצא מאגר ה-CA המנפיק. מידע נוסף על תבניות אישורים זמין במאמר סקירה כללית על תבניות אישורים ומדיניות הנפקה.
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: המזהה הייחודי של הפרויקט
- LOCATION: המיקום של מאגר רשויות האישורים שממנו נשלחת הבקשה לאישור. רשימה מלאה של המיקומים זמינה במאמר מיקומים.
- POOL_NAME: המזהה הייחודי של מאגר הרשות שמנפיקה את האישורים (CA)
יצירת אישורים לסביבת ייצור
המשתמש prod-dns-requester יכול עכשיו לבקש אישורי DNS של סביבת ייצור ממאגר ה-CA. ההגדרה --dns-san=foo.bar.prod.example.com מוסיפה ל-SAN סוג DNS
עם הערך שצוין לבקשת האישור.
gcloud
gcloud privateca certificates create prod-dns-1 \
--project=PROJECT_ID \
--issuer-location=LOCATION \
--issuer-pool=POOL_NAME \
--dns-san=foo.bar.prod.example.com \
--generate-key \
--key-output-file=KEY_FILE_NAME \
--cert-output-file=prod_dns_cert.pem \
--template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/prod-server-tls-template
כאשר:
- הדגל
--issuer-locationמשמש להגדרת המיקום של האישור. רשימה מלאה של המיקומים זמינה במאמר בנושא מיקומים. - הדגל
--issuer-poolמגדיר את מאגר רשויות האישורים שממנו מתבקש האישור. - הדגל
--dns-sanמשמש להגדרת אחד או יותר שמות SAN של DNS שמופרדים בפסיקים. - הדגל
--generate-keyמפעיל את יצירת המפתח הפרטי החדש RSA-2048 במחשב. - הסימון
--key-output-fileמשמש להגדרת הנתיב שבו ייכתב המפתח הפרטי שנוצר (בפורמט PEM). - הדגל
--cert-output-fileמשמש להגדרת הנתיב שבו ייכתב קובץ שרשרת האישורים בקידוד PEM (מסודר מישות הקצה ועד לרמה הבסיסית). - הדגל
--templateמשמש להגדרת השם של תבנית האישור שבה יש להשתמש להנפקת האישור הזה. התבנית שצוינה צריכה להיות באותו מיקום כמו מאגר ה-CA המנפיק. מידע נוסף על תבניות אישורים זמין במאמר סקירה כללית של תבניות אישורים ומדיניות הנפקה.
יצירת אישורים לשימוש כללי
המשתמש blank-check-requester@ יכול לבקש כל אישור ממאגר ה-CA באמצעות הפקודה gcloud privateca certificates create.
כדי לבקש אישור ממאגר רשויות אישורים, אפשר להשתמש במפתח ציבורי/פרטי שנוצר על ידי CA Service. מידע נוסף על בקשת אישורים זמין במאמר בקשת אישור והצגת אישור שהונפק.
הסרת המשאבים
בקטע הזה מוסבר איך להסיר מדיניות IAM ממאגר של רשויות אישורים.
הסרה של קישור IAM ספציפי
כדי להסיר את הקישורים המותנים של IAM למאגר CA עבור המשתמש blank-check-requester, משתמשים בפקודה gcloud הבאה:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
כאשר:
- הערך של הדגל
--roleקובע את התפקיד שמוקצה למשתמש. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הערך של הדגל
--memberקובע את המשתמש שהתפקיד מוקצה לו.
כשמסירים ישות ספציפית ב-IAM, צריך לספק את כל המידע שקשור לישות ב-IAM בפקודה gcloud privateca
pools remove-iam-policy-binding. יכול להיות שלתפקיד ולחבר יהיו כמה קישורי IAM עם תנאים שונים. חשוב לספק את כל הפרטים שקשורים לקישור IAM כדי למנוע מחיקה בטעות של קישור אחר.
מידע נוסף על הפקודה gcloud privateca pools
remove-iam-policy-binding זמין במאמר gcloud privateca pools remove-iam-policy-binding.
הסרת כל הקישורים המותנים של IAM
כדי להסיר קשר IAM, אפשר להשתמש בפקודה gcloud privateca pools
remove-iam-policy-binding. כשמסירים קשירה מותנית של IAM, צריך לספק את כל המידע על הקשירה. למשתמש ולתפקיד יכולים להיות יותר מקישור מותנה אחד. כדי להסיר את כל ההתניות, משתמשים בדגל --all בפקודה gcloud.
כדי להסיר את כל הקישורים של המשתמש prod-code-signing-requester, משתמשים בפקודה gcloud הבאה.
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
כאשר:
- הערך של הדגל
--roleקובע את התפקיד שמוקצה למשתמש. מידע נוסף על תפקידים והרשאות ב-IAM עבור CA Service זמין במאמר בקרת גישה באמצעות IAM. - הערך של הדגל
--memberקובע את המשתמש שהתפקיד מוקצה לו.