אבטחה והרשאה

כל בקשה ל-Multi-party Compute API עוברת שתי בדיקות נפרדות: בדיקה של ניהול זהויות והרשאות גישה (IAM) ב-method של ה-API, ובדיקה של המשתמש ב-Multi-party Compute שמבצע את הקריאה והתפקידים שלו. בדף הזה מתוארות שתי הבדיקות, הרשאות ה-IAM ואיך אדמינים מאשרים שינויים בתפקידי המשתמשים.

איך בקשה מקבלת הרשאה

  1. בדיקת IAM. לפני שהבקשה מגיעה למכונה, IAM בודק אם לחשבון המשתמש ששלח את הבקשה יש את ההרשאה שהשיטה דורשת במשאב שבבקשה. אם הוא לא תואם, הבקשה תיכשל עם השגיאה 403 PERMISSION_DENIED ולא תגיע למכונה. הבקשה מתועדת ביומני הביקורת של Cloud. במאמר הרשאות IAM מפורטות ההרשאות שנדרשות לכל שיטה.
  2. בדיקת משתמשים ותפקידים. בשיטות שפועלות בשם משתמש, המכונה מחפשת את המשתמש שה-principal שלו תואם לזהות המאומתת של מבצע הקריאה, ובודקת את התפקידים של המשתמש הזה. לדוגמה, הגורם שמפעיל את CreateTransaction צריך להיות משתמש עם התפקיד SIGNER. בקטע תפקידי משתמשים מפורטות הבדיקות שכל שיטה מבצעת.

שתי הבדיקות צריכות לעבור. תפקידי IAM ותפקידי משתמשים משלימים זה את זה, לדוגמה:

  • חשבון משתמש עם roles/mpc.editor אבל בלי התפקיד POLICY_AUTHOR יכול לקרוא ל-CreateTransactionPolicy, אבל המכונה דוחה את הבקשה.
  • משתמש עם התפקיד SIGNER, שלחשבון המשתמש שלו אין את ההרשאה mpc.googleapis.com/transactions.create, לא יכול ליצור טרנזקציות כי IAM דוחה את הבקשה קודם.

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

סביבות המחשוב האמינות (TEE) של המשתתפים מאמתות את החתימות האלה לפני שהן חותמות על עסקה או מאשרות מדיניות עסקאות, כך שבקשה שעוברת את שתי הבדיקות עדיין לא יכולה ליצור חתימה בלי אישורים תקפים. מידע נוסף זמין במודל האבטחה.

תפקידי משתמשים

לכל משתמש יש אחד מהתפקידים הבאים, שמוגדרים ב-User.roles. התפקיד הזה הוא תפקיד במכונה שלכם, ולא תפקיד IAM.

תפקיד המשתמש מה המשתמש יכול לעשות מתי מתבצעת הבדיקה
SIGNER מחזיק בחלקים של המפתח ומאשר עסקאות. שייך לצוות אחד בלבד. CreateTransaction: למשתמש של מבצע הקריאה החוזרת צריך להיות התפקיד SIGNER.
RecordSignerDecision: המשתמש של מבצע הקריאה החוזרת צריך להחזיק בחלק מהמפתח של העסקה.
ListTransactions: אם למשתמש של מבצע הקריאה החוזרת יש רק את התפקיד SIGNER, יוחזרו רק עסקאות במפתחות שבהם המשתמש מחזיק בחלק מהמפתח.
POLICY_AUTHOR הצעת כללי מדיניות לעסקאות, אישור שלהם והשבתה שלהם. ‫CreateTransactionPolicy, ApproveTransactionPolicy, DisableTransactionPolicy: המשתמש של מבצע הקריאה החוזרת חייב להיות מחבר מדיניות פעיל עם מפתח הרשאה רשום.
ADMIN ניהול משתמשים, צוותים, אוספי מפתחות, מפתחות ורשימות מפתחות. מאשר שינויים בתפקידים ADMIN ו-POLICY_AUTHOR. ‫EnableUserRole, ‏DisableUserRole, ‏DisableUser, ‏ApproveUser לשינויים ב-ADMIN וב-POLICY_AUTHOR: הבקשה חייבת לכלול את החתימה של האדמין ששולח את הבקשה. אישור אדמין לשינויים בתפקידים

הכללים הבאים חלים על משתמשים:

  • חשבון משתמש אחד לכל משתמש. השדה User.principal מוגדר כשיוצרים את המשתמש ואי אפשר לשנות אותו. חשבון Google או חשבון משתמש באיחוד שירותי אימות הזהות של כוח עבודה. כדי לשנות את חשבון המשתמש, צריך להשבית את המשתמש וליצור משתמש חדש.
  • צוות אחד לכל חותם. למשתמש עם התפקיד SIGNER צריך להיות מוגדר Team. רק משתמשים עם התפקיד SIGNER יכולים להחזיק בחלקים של מפתחות, ולכן רק חותמים שייכים לצוות. כדי להעביר חותם לצוות אחר, צריך להשתמש ב-UpdateTeamAssignment, וזה דורש שיתוף מחדש. אנחנו מתכננים להוסיף את האפשרות הזו בגרסה עתידית.
  • מפתחות הרשאה. חותמים ויוצרי מדיניות צריכים מפתח הרשאה כדי לחתום על אישורים. אדמינים צריכים חתימה כדי לבקש או לאשר שינויים בתפקידים ADMIN ו-POLICY_AUTHOR. כדי לנהל את החותמים והצוותים לא נדרשת חתימה של אדמין.

הסטטוס של כל תפקיד

סטטוס משמעות האם המשתמש יכול להשתמש בתפקיד?
PENDING_ACTIVE התפקיד הוקצה והוא ממתין לאישור של האדמין. לא
ACTIVE התפקיד נכנס לתוקף. כן
PENDING_DISABLED התפקיד בתהליך הסרה וממתין לאישור של אדמין. כן, עד שההסרה תאושר
DISABLED התפקיד הוסר. הוא יישאר רשום כדי שהאישורים שלו יישארו גלויים. לא

אישור אדמין לשינויים בתפקידים

אדמינים מנהלים את כל תפקידי המשתמשים. כדי להקצות או להסיר את התפקיד ADMIN או POLICY_AUTHOR, צריך לקבל אישור מכמה אדמינים. הענקה או הסרה של התפקיד SIGNER נכנסת לתוקף באופן מיידי על ידי אדמין אחד, ללא חתימת אדמין. התפקיד SIGNER לבדו לא מעניק גישה למפתחות. חותם מקבל שיתופי מפתחות רק כשאדמין כולל את החותם או את הצוות שלו במדיניות המפתחות של KeyRing ויוצר מפתח.

‏Method ההשפעה על תפקידי המשתמשים
CreateUser כל תפקיד של ADMIN או POLICY_AUTHOR שביקשתם מתחיל בסטטוס PENDING_ACTIVE. ‫SIGNER ACTIVE באופן מיידי.
EnableUserRole מקצה תפקיד אחד. ההנחות ADMIN ו-POLICY_AUTHOR מתחילות ב-PENDING_ACTIVE, וההנחה SIGNER היא ACTIVE באופן מיידי.
DisableUserRole הסרת תפקיד אחד. ב-ADMIN וב-POLICY_AUTHOR, תפקיד ACTIVE הופך ל-PENDING_DISABLED, ותפקיד PENDING_ACTIVE מבוטל באופן מיידי, ללא אישור. SIGNER הופך ל-DISABLED באופן מיידי.
DisableUser הסרה של כל התפקידים של המשתמש בבקשה אחת, עם חתימה אחת לכל השינויים ב-ADMIN וב-POLICY_AUTHOR.
ApproveUser מתעד אישור של אדמין אחד לשינוי בהמתנה של המשתמש.
EnableUser הגדרה מחדש של משתמש מושבת כ-ACTIVE. הוא לא משחזר תפקידים ולא נדרש אישור.

תהליך האישור פועל כך:

  1. אדמין מבקש את השינוי וכולל את authorizationInfo: החתימה שלו, שנוצרה באמצעות מפתח ההרשאה שלו, על שינוי התפקיד. הבקשה הזו נחשבת לאישור הראשון.
  2. אדמינים אחרים קוראים ל-ApproveUser במשתמש, כל אחד עם החתימה שלו. אישור אחד מכסה את כל השינויים בתפקידים של המשתמש הזה שממתינים לאישור.
  3. כשהמספר של האישורים מגיע לסף האישורים של האדמינים במופע, כל השינויים הממתינים בתפקיד של המשתמש נכנסים לתוקף ביחד. האישורים מאוחסנים במכשיר של המשתמש ב-role_statuses.approval_info, וסביבות ה-TEE של המשתתפים מאמתות אותם.

הכללים הבאים חלים על כל שינוי ב-ADMIN וב-POLICY_AUTHOR:

  • לפחות שני אדמינים פעילים. שינוי שישאיר את המכונה עם פחות אדמינים פעילים מסף האישור של האדמינים ייכשל עם השגיאה FAILED_PRECONDITION. בכל מקרה, תמיד יהיו לפחות שני אדמינים פעילים. אדמינים שהתפקיד שלהם הוא PENDING_DISABLED לא נחשבים כפעילים.
  • אין אישור עצמי. המשתמש שההרשאות שלו משתנות לא יכול לבקש או לאשר את השינוי בעצמו. בקשה כזו תיכשל עם PERMISSION_DENIED.
  • כל אדמין יכול לאשר פעם אחת. אם אדמין מאשר את אותו שינוי פעמיים, הבקשה השנייה נכשלת עם ALREADY_EXISTS.
  • שינוי אחד בהמתנה לכל משתמש. בזמן שהשינוי בהמתנה, בקשות להפעלת תפקיד נכשלות עם השגיאה FAILED_PRECONDITION. בקשות להשבתת תפקיד אף פעם לא נחסמות: השבתה מבטלת בקשות הפעלה בהמתנה, ומשולבת עם כל בקשות ההשבתה בהמתנה לשינוי חדש אחד שהאישורים שלו מתחילים מחדש.
  • תפוגה. שינוי שלא יקבל מספיק אישורים עד approval_info.expire_time יפוג, והתפקידים שלו יחזרו לסטטוס הקודם שלהם.

ב-v1beta API, אי אפשר להשבית את התפקיד SIGNER או את המשתמש, כל עוד המשתמש מחזיק בחלקים של המפתח. כדי להחליף את החלקים של מפתח החתימה, צריך לשתף אותם מחדש. האפשרות הזו תהיה זמינה בגרסה עתידית.

הרשאות IAM

בטבלה הבאה מפורטים כל ה-methods של v1beta, הרשאת ה-IAM שנדרשת להם והתפקיד המוגדר מראש עם מספר ההרשאות הקטן ביותר שכולל את ההרשאה הזו. כל תפקיד מוגדר מראש כולל גם את כל ההרשאות של התפקידים שלפניו: roles/mpc.editor כולל את roles/mpc.viewer, ו-roles/mpc.admin כולל את roles/mpc.editor.

משאב ‏Method הרשאה תפקיד מוגדר מראש
ChromeOS CreateTeam mpc.googleapis.com/teams.create roles/mpc.admin
DeleteTeam mpc.googleapis.com/teams.delete roles/mpc.admin
GetTeam mpc.googleapis.com/teams.get roles/mpc.viewer
ListTeams mpc.googleapis.com/teams.list roles/mpc.viewer
משתמש CreateUser mpc.googleapis.com/users.create roles/mpc.admin
UpdateUser mpc.googleapis.com/users.update roles/mpc.admin
EnableUserRole mpc.googleapis.com/users.enableRole roles/mpc.admin
DisableUserRole mpc.googleapis.com/users.disableRole roles/mpc.admin
ApproveUser mpc.googleapis.com/users.approve roles/mpc.admin
DisableUser mpc.googleapis.com/users.disable roles/mpc.admin
EnableUser mpc.googleapis.com/users.enable roles/mpc.admin
UpdateTeamAssignment mpc.googleapis.com/users.updateTeamAssignment roles/mpc.admin
GetUser mpc.googleapis.com/users.get roles/mpc.viewer
ListUsers mpc.googleapis.com/users.list roles/mpc.viewer
KeyRing CreateKeyRing mpc.googleapis.com/keyRings.create roles/mpc.admin
DeleteKeyRing mpc.googleapis.com/keyRings.delete roles/mpc.admin
GetKeyRing mpc.googleapis.com/keyRings.get roles/mpc.viewer
ListKeyRings mpc.googleapis.com/keyRings.list roles/mpc.viewer
מפתח CreateKey mpc.googleapis.com/keys.create roles/mpc.admin
DisableKey mpc.googleapis.com/keys.update roles/mpc.editor
GetKey mpc.googleapis.com/keys.get roles/mpc.viewer
ListKeys mpc.googleapis.com/keys.list roles/mpc.viewer
KeyList CreateKeyList mpc.googleapis.com/keyLists.create roles/mpc.admin
DeleteKeyList mpc.googleapis.com/keyLists.delete roles/mpc.admin
AddKeyListEntries mpc.googleapis.com/keyLists.addEntries roles/mpc.admin
RemoveKeyListEntries mpc.googleapis.com/keyLists.removeEntries roles/mpc.admin
GetKeyList mpc.googleapis.com/keyLists.get roles/mpc.viewer
ListKeyLists mpc.googleapis.com/keyLists.list roles/mpc.viewer
TransactionPolicy CreateTransactionPolicy mpc.googleapis.com/transactionPolicies.create roles/mpc.editor
ApproveTransactionPolicy mpc.googleapis.com/transactionPolicies.approve roles/mpc.editor
DisableTransactionPolicy mpc.googleapis.com/transactionPolicies.disable roles/mpc.editor
GetTransactionPolicy mpc.googleapis.com/transactionPolicies.get roles/mpc.viewer
ListTransactionPolicies mpc.googleapis.com/transactionPolicies.list roles/mpc.viewer
עסקה CreateTransaction mpc.googleapis.com/transactions.create roles/mpc.editor
RecordSignerDecision mpc.googleapis.com/transactions.recordSignerDecision roles/mpc.editor
GetTransaction mpc.googleapis.com/transactions.get roles/mpc.viewer
ListTransactions mpc.googleapis.com/transactions.list roles/mpc.viewer

לפרטים על הבקשות והתגובות, קראו את המסמך Multi-party Compute API REST reference.

תפקידים מוגדרים מראש

תפקיד כולל מיועד ל:
צפייה בחישוב רב-משתתפים
roles/mpc.viewer
ההרשאות של roles/mpc.viewer בטבלה שלמעלה: get ו-list בכל משאב. גורמי ביקורת וכלי מעקב.
עריכת חישוב רב-משתתפים
roles/mpc.editor
כל ההרשאות של roles/mpc.viewer, וגם ההרשאות של roles/mpc.editor בטבלה שלמעלה. חשבונות משתמשים של חותמים ושל מחברי מדיניות. תפקידי המשתמשים שלהם קובעים אילו מהשיטות האלה המכונה מקבלת מהם.
אדמין של חישוב רב-משתתפים
roles/mpc.admin
כל ההרשאות של roles/mpc.editor, וגם ההרשאות של roles/mpc.admin בטבלה שלמעלה. חשבונות משתמשים של אדמינים.

למשאבים מסוג v1beta אין מדיניות IAM משלהם. מקצים תפקידים בפרויקט שמכיל את המכונה, ומשתמשים בתנאי IAM כדי לצמצם את התפקיד ל-KeyRing.

תפקידים מומלצים לכל פרסונה

צריך לתת לכל אדם חשבון משתמש נפרד, משתמש עם התפקידים שהוא צריך בלבד ותפקיד IAM תואם:

פרסונה תפקידי משתמשים תפקיד IAM
אדמין ADMIN roles/mpc.admin
מחבר המדיניות POLICY_AUTHOR ‫roles/mpc.editor, או תפקיד בהתאמה אישית עם ההרשאות של transactionPolicies.*
בעל החתימה SIGNER ‫roles/mpc.editor, או תפקיד בהתאמה אישית עם ההרשאות של transactions.*
Auditor ללא roles/mpc.viewer

ישויות מורשות מאוחדות צריכות גם את התפקיד 'Service Usage Consumer' (roles/serviceusage.serviceUsageConsumer) בפרויקט הצרכן. מידע נוסף זמין במאמר הגדרת איחוד שירותי אימות הזהות של כוח עבודה (BYOID).

תפקידים בהתאמה אישית

כדי לתת לחשבון משתמש רק את ההרשאות שהוא צריך, יוצרים תפקיד IAM בהתאמה אישית. לדוגמה, התפקיד הבא מאפשר למשתמש עם הרשאת חתימה לראות עסקאות ולאשר או לדחות אותן, אבל לא ליצור אותן:

gcloud iam roles create mpcTransactionApprover \
  --project=PROJECT_ID \
  --title="MPC transaction approver" \
  --description="View MPC transactions and record signer decisions" \
  --permissions="mpc.googleapis.com/transactions.get,mpc.googleapis.com/transactions.list,mpc.googleapis.com/transactions.recordSignerDecision"

מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את המכונה.

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

תנאי IAM

אתם יכולים לצמצם את קישור התפקיד למשאבים באוסף מפתחות אחד באמצעות תנאי IAM בשם המשאב. לדוגמה, אם שתי יחידות עסקיות משתפות מכונה ולכל אחת מהן יש אוסף מפתחות משלה, אתם יכולים להעניק לכל אחת מהיחידות את התפקיד roles/mpc.editor רק באוסף המפתחות שלה:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/mpc.editor" \
  --condition="expression=resource.name.startsWith('projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/keyRings/KEYRING_ID'),title=keyring-scoped-editor"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שמכיל את המכונה.
  • ‫SA_NAME: השם של חשבון השירות.
  • ‫LOCATION: האזור של המכונה.
  • ‫INSTANCE_ID: מזהה המכונה.
  • ‫KEYRING_ID: המזהה של אוסף המפתחות.

שמות המשאבים של v1beta לא מכילים את /mpc/. תנאי שהועתק מהמסמכים של גרסת טרום-השקה (Preview) פרטית (v1alpha1), כמו .../instances/INSTANCE_ID/mpc/keyRings/KEYRING_ID, לא תואם לאף משאב של v1beta.

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