לשירות Organization Policy יש כמה אילוצים מוגדרים מראש ומנוהלים שיכולים להשפיע על חשבונות השירות בארגון. בדף הזה מוסבר אילו שגיאות נוצרות על ידי מדיניות הארגון, ומהם השלבים שאפשר לבצע כדי לפתור את השגיאות האלה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לפתרון בעיות שקשורות למדיניות הארגון, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM Organization policy administrator (אדמין של מדיניות הארגון) (roles/orgpolicy.policyAdmin) בארגון.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
פתרון בעיות שקשורות ליצירת מפתחות לחשבונות שירות מושבתים
אם האילוץ iam.disableServiceAccountKeyCreation נאכף בארגון שלכם, לא תוכלו ליצור מפתחות לחשבונות שירות בארגון. מידע נוסף על ההגבלה הזו זמין במאמר השבתת יצירת מפתחות של חשבונות שירות.
שגיאה ביצירת מפתח
אם מנסים ליצור מפתח לחשבון שירות, אבל הפעולה נחסמת על ידי האילוץ iam.disableServiceAccountKeyCreation, מוצגת הודעת השגיאה הבאה:
המסוף
במסוף Cloud de Confiance , תופיע תיבת דו-שיח עם הכותרת יצירת מפתח לחשבון שירות מושבתת. בתיבת הדו-שיח מצוין שההגבלה iam.disableServiceAccountKeyCreation נאכפת בארגון שלכם.
gcloud
ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Key creation is not allowed on this service account.
subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.s3ns.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.s3ns.iam.gserviceaccount.com
type: constraints/iam.disableServiceAccountKeyCreation
REST
{
"error": {
"code": 400,
"message": "Key creation is not allowed on this service account.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountKeyCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.s3ns.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.s3ns.iam.gserviceaccount.com",
"description": "Key creation is not allowed on this service account."
}
]
}
]
}
}
פתרון מומלץ לשגיאה ביצירת מפתח לחשבון שירות
אם מדיניות הארגון מונעת מכם ליצור מפתח של חשבון שירות, מומלץ לבצע את הפעולות הבאות:
בודקים אם נדרש מפתח של חשבון שירות.
לא מומלץ להשתמש במפתחות של חשבונות שירות לצורך אימות. הסיבה לכך היא שמפתחות של חשבונות שירות עלולים להפוך לסיכון אבטחה אם לא מנהלים אותם בצורה נכונה, וכך להגדיל את הפגיעות שלכם לאיומים כמו דליפת פרטי כניסה, הסלמת הרשאות, חשיפת מידע ואי-יכולת להכחיש פעולות.
ברוב המקרים, מומלץ להשתמש בחלופה מאובטחת יותר לאימות במקום במפתח של חשבון שירות.
אם בתרחיש לדוגמה שלכם יש צורך במפתח של חשבון שירות, צריך להשבית את האילוץ
iam.disableServiceAccountKeyCreationבפרויקט.
כדי להשבית את אילוץ מדיניות הארגון, משביתים את האכיפה של האילוץ או מוציאים את הפרויקט מהאכיפה:
כדי להשבית את האכיפה של ההגבלה בכל הארגון: פועלים לפי השלבים הבאים:
חשוב לוודא שיש לכם את התפקיד 'אדמין של מדיניות הארגון' (
roles/orgpolicy.policyAdmin) ברמת הארגון. אפשר לתת את התפקיד הזה רק בארגונים, והוא לא מופיע ברשימת התפקידים בפרויקטים.במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים מוסבר איך מקצים תפקידים ברמת הארגון.
במסוף Cloud de Confiance , נכנסים לדף מדיניות הארגון.
ברשימת הפרויקטים, בוחרים את הארגון שרוצים להשבית בו את האילוץ
iam.disableServiceAccountKeyCreation.בשדה מסנן, מזינים
iam.disableServiceAccountKeyCreation. לאחר מכן, ברשימת המדיניות, לוחצים על השבתה של יצירת מפתח של חשבון שירות.לוחצים על ניהול המדיניות.
בקטע מקור המדיניות, מוודאים שהאפשרות במקום המדיניות של המשאב הראשי מסומנת.
בקטע Enforcement, משביתים את האכיפה של האילוץ הזה של מדיניות הארגון.
לוחצים על הגדרת מדיניות.
כדי להחריג את הפרויקט שלכם מהאכיפה:
-
חשוב לוודא שהוקצו לכם התפקידים 'Tag Administrator' (
roles/resourcemanager.tagAdmin) ו'אדמין מדיניות ארגונית' (roles/orgpolicy.policyAdmin) ברמת הארגון. במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים מוסבר איך מקצים תפקידים ברמת הארגון. -
ברמת הארגון, יוצרים מפתח תג וערך תג שישמשו להגדרה אם משאב צריך להיות פטור ממדיניות הארגון. מומלץ ליצור תג עם המפתח
disableServiceAccountKeyCreationוהערכיםenforcedו-not_enforced.במאמר איך יוצרים ומגדירים תגים חדשים מוסבר איך ליצור מפתחות וערכים של תגים.
-
מצרפים את התג
disableServiceAccountKeyCreationלארגון ומגדירים את הערך שלו ל-enforced. כל המשאבים בארגון יורשים את ערך התג הזה, אלא אם הוא נדרס על ידי ערך תג אחר.במאמר צירוף תגים למשאבים מוסבר איך לצרף תגים למשאבים.
-
לכל חשבון שירות שרוצים להחריג ממדיניות הארגון, מצרפים את התג
disableServiceAccountKeyCreationומגדירים את הערך שלו ל-not_enforced. הגדרת ערך תג לחשבון שירות בדרך הזו מבטלת את ערך התג שהתקבל בירושה מהארגון. -
יוצרים או מעדכנים את מדיניות הארגון שמונעת יצירה של מפתחות של חשבונות שירות, כך שהיא לא תאכוף את האילוץ על משאבים שפטורים ממנו. המדיניות הזו צריכה לכלול את הכללים הבאים:
-
מגדירים את האילוץ
iam.disableServiceAccountKeyCreationכך שלא ייאכף על משאבים עם התגdisableServiceAccountKeyCreation: not_enforced. התנאי בכלל הזה צריך להיראות כך:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')" -
מגדירים את האילוץ
iam.disableServiceAccountKeyCreationכך שהוא ייאכף על כל שאר המשאבים.
-
-
חשוב לוודא שהוקצו לכם התפקידים 'Tag Administrator' (
פתרון בעיות שקשורות להשבתת יצירת חשבונות שירות
אם המגבלה iam.disableServiceAccountCreation נאכפת בארגון שלכם, לא תוכלו ליצור חשבונות שירות באף פרויקט בארגון. מידע נוסף על ההגבלה הזו זמין במאמר השבתת יצירת חשבונות שירות.
שגיאה ביצירת חשבון שירות
אם מנסים ליצור חשבון שירות, אבל הפעולה נחסמת על ידי האילוץ iam.disableServiceAccountCreation, מוצגת הודעת השגיאה הבאה:
המסוף
במסוף Cloud de Confiance , מופיעה תיבת דו-שיח עם הכותרת Service account creation failed. בתיבת הדו-שיח מופיעה ההודעה הפעולה שניסית לבצע נכשלה. כדאי לנסות שוב.
gcloud
ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Service account creation is not allowed on this project.
subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
type: constraints/iam.disableServiceAccountCreation
REST
{
"error": {
"code": 400,
"message": "Service account creation is not allowed on this project.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
"description": "Service account creation is not allowed on this project."
}
]
}
]
}
}
פתרון מומלץ לשגיאה ביצירת חשבון שירות
אם מדיניות הארגון מונעת מכם ליצור חשבון שירות, מומלץ לבצע את הפעולות הבאות:
בודקים אם צריך חשבון שירות.
כדאי לעיין במאמר בחירה מתי להשתמש בחשבונות שירות כדי לוודא שאתם צריכים חשבון שירות לתרחיש לדוגמה שלכם.
אם בתרחיש לדוגמה שלכם יש צורך בחשבון שירות, צריך להשבית את האילוץ
iam.disableServiceAccountCreationבפרויקט.
כדי להשבית את אילוץ מדיניות הארגון, משביתים את האכיפה של האילוץ או מוציאים את הפרויקט מהאכיפה:
כדי להשבית את האכיפה של ההגבלה בכל הארגון: פועלים לפי השלבים הבאים:
חשוב לוודא שיש לכם את התפקיד 'אדמין של מדיניות הארגון' (
roles/orgpolicy.policyAdmin) ברמת הארגון. אפשר לתת את התפקיד הזה רק בארגונים, והוא לא מופיע ברשימת התפקידים בפרויקטים.במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים מוסבר איך מקצים תפקידים ברמת הארגון.
במסוף Cloud de Confiance , נכנסים לדף מדיניות הארגון.
ברשימת הפרויקטים, בוחרים את הארגון שרוצים להשבית בו את האילוץ
iam.disableServiceAccountCreation.בשדה מסנן, מזינים
iam.disableServiceAccountCreation. לאחר מכן, ברשימת המדיניות, לוחצים על Disable service account creation (השבתת יצירת חשבונות שירות).לוחצים על ניהול המדיניות.
בקטע מקור המדיניות, מוודאים שהאפשרות במקום המדיניות של המשאב הראשי מסומנת.
בקטע Enforcement, משביתים את האכיפה של האילוץ הזה של מדיניות הארגון.
לוחצים על הגדרת מדיניות.
כדי להחריג את הפרויקט שלכם מהאכיפה:
-
חשוב לוודא שהוקצו לכם התפקידים 'Tag Administrator' (
roles/resourcemanager.tagAdmin) ו'אדמין מדיניות ארגונית' (roles/orgpolicy.policyAdmin) ברמת הארגון. במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים מוסבר איך מקצים תפקידים ברמת הארגון. -
ברמת הארגון, יוצרים מפתח תג וערך תג שישמשו להגדרה אם משאב צריך להיות פטור ממדיניות הארגון. מומלץ ליצור תג עם המפתח
disableServiceAccountCreationוהערכיםenforcedו-not_enforced.במאמר איך יוצרים ומגדירים תגים חדשים מוסבר איך ליצור מפתחות וערכים של תגים.
-
מצרפים את התג
disableServiceAccountCreationלארגון ומגדירים את הערך שלו ל-enforced. כל המשאבים בארגון יורשים את ערך התג הזה, אלא אם הוא נדרס על ידי ערך תג אחר.במאמר צירוף תגים למשאבים מוסבר איך לצרף תגים למשאבים.
-
לכל פרויקט או תיקייה שרוצים להחריג ממדיניות הארגון, מצרפים את התג
disableServiceAccountCreationומגדירים את הערך שלו ל-not_enforced. הגדרה של ערך תג לפרויקט או לתיקייה בדרך הזו מבטלת את ערך התג שהתקבל בירושה מהארגון. -
יוצרים או מעדכנים את מדיניות הארגון שמונעת יצירה של חשבונות שירות, כך שהיא לא תאכוף את האילוץ על משאבים שפטורים ממנו. המדיניות הזו צריכה לכלול את הכללים הבאים:
-
מגדירים את האילוץ
iam.disableServiceAccountCreationכך שלא ייאכף על משאבים עם התגdisableServiceAccountCreation: not_enforced. התנאי בכלל הזה צריך להיראות כך:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')" -
מגדירים את האילוץ
iam.disableServiceAccountCreationכך שהוא ייאכף על כל שאר המשאבים.
-
-
חשוב לוודא שהוקצו לכם התפקידים 'Tag Administrator' (
פתרון בעיות בהקצאת תפקידים לחשבונות שירות שמוגדרים כברירת מחדל
חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine נוצר באופן אוטומטי בפרויקט כשמשתמשים בשירותים מסוימים Cloud de Confiance . מזהה חשבון השירות הוא PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com.
כל חשבונות השירות שמוגדרים כברירת מחדל מקבלים אוטומטית את התפקיד 'עריכה' (roles/editor) כשהם נוצרים, אלא אם ההתנהגות הזו מושבתת על ידי מדיניות הארגון. יש שני אילוצים של מדיניות הארגון שמונעים את הענקת התפקיד 'עריכה' לחשבונות שירות שמוגדרים כברירת מחדל:
-
iam.automaticIamGrantsForDefaultServiceAccounts: אילוץ מוגדר מראש שמונע מחשבונות שירות שמוגדרים כברירת מחדל לקבל תפקידים באופן אוטומטי. האילוץ הזה לא מונע מכם להעניק בהמשך את התפקיד 'עריכה' לחשבונות שירות שמוגדרים כברירת מחדל. -
constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: אילוץ מנוהל שמונע את ההקצאה של התפקידים 'עריכה' ו'בעלים' (roles/owner) לחשבונות שירות שמוגדרים כברירת מחדל.
שגיאה בהקצאת תפקידים בסיסיים לחשבונות שירות
אם המגבלה iam.automaticIamGrantsForDefaultServiceAccounts או המגבלה constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts נאכפות בפרויקט שלכם, יכול להיות שיהיו עומסי עבודה בפרויקט שמשתמשים בחשבונות השירות שמוגדרים כברירת מחדל, ויופיעו שגיאות שקשורות להרשאות לא מספיקות.
במאמר פתרון מומלץ למתן תפקידים לחשבונות שירות שמוגדרים כברירת מחדל מוסבר אילו תפקידים כדאי לתת לחשבון שירות שמוגדר כברירת מחדל.
המגבלה iam.automaticIamGrantsForDefaultServiceAccounts לא גורמת לשגיאות כשלעצמה. עם זאת, בגלל המגבלה הזו, יכול להיות שעומס עבודה שמשתמש בחשבון השירות שמוגדר כברירת מחדל לא יקבל את ההרשאות שהוא צריך.
בנוסף, אם האילוץ constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts נאכף בפרויקט שלכם, תופיע הודעת שגיאה כמו זו שבהמשך אם תנסו להעניק את התפקיד Owner או Editor לחשבון שירות שמוגדר כברירת מחדל:
המסוף
במסוף Cloud de Confiance , מופיעה תיבת דו-שיח עם הכותרת עדכון מדיניות ה-IAM נכשל. בתיבת הדו-שיח מופיעה ההודעה 'אי אפשר לבצע את השינויים האלה במדיניות ב-IAM בגלל מגבלות שהגדיר האדמין שאחראי על מדיניות הארגון', ואז מפורטות המגבלות שמונעות את העדכון. המגבלות
שמופיעות כוללות את המגבלה customConstraints/custom.cantGrantProjectIamAdmin.
gcloud
ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].
REST
{
"error": {
"code": 400,
"message": "Operation denied by org policy on resource
'RESOURCE_ID':
[\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
\"When this constraint is enforced, it prevents anyone from granting the
Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
Engine and App Engine default service accounts, at any time. To learn more
about default service accounts, see
https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues
for services that use these service accounts. To learn which roles to grant
to each service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "CUSTOM_ORG_POLICY_VIOLATION",
"domain": "googleapis.com",
"metadata": {
"customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
"resource": "projects/PROJECT_ID"
}
}
]
}
}
המלצה לפתרון בעיות בהקצאת תפקידים לחשבונות שירות שמוגדרים כברירת מחדל
אם מדיניות הארגון מונעת מכם להעניק את התפקיד 'עריכה' או 'בעלים' לחשבון שירות שמוגדר כברירת מחדל, אתם צריכים למצוא תפקיד עם פחות הרשאות ולהעניק אותו לחשבון השירות. התפקיד שנדרש לחשבון השירות תלוי בשירות שבו משתמשים ובמשימות שרוצים לבצע.
כדי להבין איזה תפקיד צריך להקצות לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, צריך לעיין בטבלה הבאה, בהתאם לשירות שבו משתמשים:
| שירות | חשבון שירות המשמש כברירת מחדל | התפקיד שרוצים להקצות |
|---|---|---|
| Compute Engine |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
התפקידים שנדרשים לחשבון השירות שמוגדר כברירת מחדל תלויים במשימה שרוצים לבצע. כדי להבין אילו תפקידים נדרשים, כדאי לעיין במסמכי התיעוד של המשימה שרוצים לבצע, או במאמר איך בוחרים את התפקידים המוגדרים מראש המתאימים ביותר. כשמחליטים איזה תפקיד להקצות, כדאי לפעול לפי השיטות המומלצות שמתוארות בדף חשבונות שירות במסמכי התיעוד של Compute Engine. |
| Cloud Build |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
תפקיד בחשבון השירות של Cloud Build (roles/cloudbuild.builds.builder)
|
| Cloud Deploy |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
כדי לראות אילו תפקידים צריך להעניק לחשבון השירות הזה, צריך למצוא את המדריך למתחילים של Cloud Deploy שמתאים לתרחיש השימוש שלכם, ואז להעניק את התפקידים שמתוארים במדריך למתחילים הזה. רשימה של מדריכים למתחילים ב-Cloud Deploy זמינה במאמר מדריכים למתחילים במסמכי Cloud Deploy. |
| פונקציות Cloud Run ו-Cloud Functions |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
כדי לפרוס פונקציות: תפקיד בחשבון Cloud Build ( מידע נוסף מופיע במאמר בנושא חשבון שירות בהתאמה אישית ל-Cloud Build. |
| Cloud Run |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
התפקידים שנדרשים לחשבון השירות שמוגדר כברירת מחדל תלויים במשימה שרוצים לבצע. כדי להבין אילו תפקידים נדרשים, כדאי לעיין במסמכי התיעוד של המשימה שרוצים לבצע, או במאמר איך בוחרים את התפקידים המוגדרים מראש המתאימים ביותר. פרטים על תפקידים ב-Cloud Run זמינים במאמר בקרת גישה באמצעות IAM במסמכי התיעוד של Cloud Run. |
| Google Kubernetes Engine |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
תפקיד חשבון השירות של צומת ברירת המחדל של Kubernetes Engine ( מידע נוסף מופיע במאמר שימוש בחשבונות שירות ב-IAM עם הרשאות מינימליות. |
| Workflows |
חשבון השירות של Compute Engine שמוגדר כברירת מחדל
(PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)
|
התפקידים שנדרשים לחשבון השירות שמוגדר כברירת מחדל תלויים במשימה שרוצים לבצע. כדי להבין אילו תפקידים נדרשים, כדאי לעיין במסמכי התיעוד של המשימה שרוצים לבצע, או במאמר איך בוחרים את התפקידים המוגדרים מראש המתאימים ביותר. במאמר איך נותנים הרשאה לתהליך עבודה לגשת למשאבים של Cloud de Confiance במאמרי העזרה בנושא Workflows מפורטות שיטות מומלצות. |