בקרת גישה באמצעות IAM

משתמשים בניהול זהויות והרשאות גישה (IAM) כדי להקצות תפקידים ולקבוע למי תהיה גישה לנתונים ב-Artifact Registry ולמי תהיה אפשרות לנהל אותם. ‫Artifact Registry מכיל תפקידים מוגדרים מראש שיכולים לעזור לייעל את ההגדרה של צינורות CI/CD. אם אתם צריכים בקרת גישה נוספת או שאתם משלבים את Artifact Registry עם כלי של צד שלישי, אתם יכולים גם להגדיר תפקידים בהתאמה אישית.

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

לפני שמתחילים

  1. מפעילים את Artifact Registry, כולל הפעלת ה-API והתקנת Google Cloud CLI.
  2. אם רוצים להחיל הרשאות ספציפיות למאגר, צריך ליצור מאגר Artifact Registry לחבילות.

סקירה כללית

ההרשאות והתפקידים ב-IAM קובעים את היכולת שלכם ליצור, להציג, לערוך או למחוק נתונים במאגר של Artifact Registry.

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

Google Cloud הרשאות ברירת מחדל

כברירת מחדל, ההרשאות הבאות חלות על Google Cloud שירותי CI/CD באותו פרויקט כמו Artifact Registry:

  • הרשאות ב-Cloud Build כוללות הרשאות להעלאה ולהורדה של ארטיפקטים.

אם כל השירותים שלכם נמצאים באותו פרויקט Google Cloud וההרשאות שמוגדרות כברירת מחדל מתאימות לצרכים שלכם, אתם לא צריכים להגדיר הרשאות.

צריך להגדיר הרשאות ל-Artifact Registry בשירותים האלה אם:

  • אתם משתמשים בגרסת GKE שאין בה תמיכה מובנית בשליפת תמונות מ-Artifact Registry. הוראות להגדרה מופיעות בקטע GKE.
  • אתם רוצים שלחשבון השירות שמוגדר כברירת מחדל תהיה גישת קריאה וכתיבה למאגרי מידע. פרטים נוספים זמינים במאמרים הבאים:
  • אתם משתמשים בחשבון שירות שסופק על ידי המשתמש עבור סביבות זמן הריצה במקום בחשבון השירות שמוגדר כברירת מחדל. בפרויקט עם Artifact Registry, מקצים לחשבון השירות את התפקיד הנדרש.

שילוב עם צד שלישי

במקרה של לקוחות צד שלישי, צריך להגדיר גם הרשאות וגם אימות.

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

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

שימוש באיחוד שירותי אימות הזהות של עומסי עבודה:

  1. יוצרים מאגר של איחוד זהויות של עומסי עבודה.
  2. יוצרים ספק של איחוד זהויות של עומסי עבודה.
  3. מעניקים את התפקיד המתאים ב-Artifact Registry למאגר הזהויות של עומסי העבודה כדי לאפשר גישה למאגר. מידע נוסף זמין במאמר בנושא מתן גישה לעומס עבודה חיצוני למשאבי Google Cloud .
  4. אם אתם צריכים לגשת ל-Artifact Registry לתקופות ארוכות יותר, אתם יכולים להגדיר את זמן התפוגה של אסימון OIDC לתקופה ארוכה יותר בהגדרת פרטי הכניסה.
  5. מגדירים את הלקוח של הצד השלישי כך שיבצע אימות ב-Artifact Registry.

שימוש בחשבון שירות:

  1. יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שבו רוצים להשתמש לאוטומציה של CI/CD.
  2. מקצים לחשבון השירות את התפקיד המתאים ב-Artifact Registry כדי לתת גישה למאגר.
  3. מגדירים את הלקוח של הצד השלישי כך שיבצע אימות ב-Artifact Registry.

‫GitLab on Google Cloud

השילוב של GitLab ב- Google Cloud משתמש באיחוד שירותי אימות הזהות של עומסי עבודה לצורך הרשאה ואימות של עומסי עבודה של GitLab ב- Google Cloud , ללא צורך בחשבונות שירות או במפתחות של חשבונות שירות. מידע נוסף על השימוש באיחוד שירותי אימות הזהות של עומסי עבודה במסגרת השותפות הזו זמין במאמר Google Cloud איחוד שירותי אימות הזהות של עומסי עבודה ומדיניות IAM.

כדי להגדיר את איחוד שירותי אימות הזהות של עומסי עבודה ואת תפקידי ה-IAM הנדרשים ב-GitLab ב- Google Cloud, אפשר לעיין במדריך של GitLab בנושא Google Cloud איחוד שירותי אימות הזהות של עומסי עבודה ומדיניות IAM.

כדי לחבר את מאגר Artifact Registry, פועלים לפי המדריך של GitLab בנושא Google Artifact Registry.

תפקידים והרשאות

כל method ב-Artifact Registry API מחייבת שלחשבון המשתמש שמבצע את הבקשה יהיו ההרשאות הנדרשות לשימוש במשאב. ההרשאות מוענקות לחשבונות משתמשים באמצעות הגדרת מדיניות שמעניקה לחשבון המשתמש תפקיד מוגדר מראש במשאב.

אפשר להקצות תפקידים ב Google Cloud פרויקט או במאגר של Artifact Registry.

תפקידים מוגדרים מראש ב-Artifact Registry

מערכת IAM מספקת תפקידים מוגדרים מראש שמעניקים גישה למשאבים ספציפיים של Google Cloud .

משתמשים בתפקידים המוגדרים מראש הבאים למאגרי קוד בדומיין pkg.dev:
תפקיד תיאור
קורא Artifact Registry
(roles/artifactregistry.reader)
צפייה בפריטי מידע (Artifact) וקבלתם, צפייה במטא-נתונים של המאגר.
Artifact Registry Writer
(roles/artifactregistry.writer)
קריאה וכתיבה של פריטי מידע.
אדמין של מאגר Artifact Registry
(roles/artifactregistry.repoAdmin)
קריאה, כתיבה ומחיקה של ארטיפקטים.
אדמין של Artifact Registry
(roles/artifactregistry.admin)
ליצור ולנהל מאגרי מידע וארטיפקטים.
התפקידים המוגדרים מראש הנוספים הבאים מכילים את ההרשאות שנדרשות כדי לבצע מיגרציה מ-Container Registry ל-Artifact Registry.

תפקיד תיאור
אדמין של העברה מ-Container Registry אל Artifact Registry (roles/artifactregistry.containerRegistryMigrationAdmin) כולל את כל ההרשאות שנדרשות להפעלת כלי ההעברה
הרשאת כתיבה ב-Artifact Registry בעקבות פעולת push‏ (roles/artifactregistry.createOnPushWriter) קריאה וכתיבה של פריטי מידע. יצירת מאגרי gcr.io כשמבצעים push לכתובות URL של gcr.io.
אדמין של מאגר Artifact Registry עם יצירה בהעלאה (roles/artifactregistry.createOnPushRepoAdmin) קריאה, כתיבה ומחיקה של ארטיפקטים. יצירת מאגרי gcr.io.
רשימה מלאה של ההרשאות הנפרדות בכל תפקיד מופיעה במאמר תפקידים ב-Artifact Registry. אפשר גם להשתמש בפקודה gcloud iam roles describe כדי לראות רשימה של ההרשאות בכל תפקיד.

תפקידים בסיסיים ב-IAM

לתפקידים בסיסיים יש הרבה הרשאות, והם היו קיימים לפני IAM. לא מומלץ להקצות תפקידים בסיסיים בסביבת ייצור, אבל אפשר להקצות אותם בסביבת פיתוח או בדיקה.

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

מידע נוסף על תפקידים בסיסיים זמין במאמר מסמך עזר בנושא תפקידים בסיסיים ומוגדרים מראש ב-IAM.

הקצאת תפקידים

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

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

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

הקצאת תפקידים ברמת הפרויקט

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

כדי להוסיף משתמש או חשבון שירות לפרויקט ולהעניק להם תפקיד ב-Artifact Registry:

המסוף

  1. פותחים את הדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. לוחצים על Select a project, בוחרים את הפרויקט שבו Artifact Registry פועל ולוחצים על Open.

  3. לוחצים על הוספה.

  4. מזינים כתובת אימייל. תוכלו להוסיף אנשים, חשבונות שירות או קבוצות Google כחשבונות משתמשים.

  5. בוחרים תפקיד לחשבון הראשי. בהתאם לעקרון האבטחה של הרשאות מינימליות, מומלץ להעניק את רמת ההרשאות הנמוכה ביותר שנדרשת לגישה למשאבי Artifact Registry. מידע על הרשאות ותפקידים מוגדרים מראש ב-Artifact Registry זמין במאמר תפקידים מוגדרים מראש ב-Artifact Registry.

  6. לוחצים על Save.

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. כדי להקצות תפקיד לחשבון משתמש יחיד, מריצים את הפקודה הבאה:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE

    איפה

    • ‫PROJECT הוא מזהה הפרויקט שבו פועל Artifact Registry.
    • ‫PRINCIPAL הוא החשבון הראשי שרוצים להוסיף לו את הקישור. משתמשים בפורמט user|group|serviceAccount:email או domain:domain.

      דוגמאות: user:test-user@gmail.com,‏ group:admins@example.com,‏ serviceAccount:test123@example.domain.com או domain:example.domain.com.

    • ‫ROLE הוא התפקיד שרוצים להעניק.

    מידע נוסף זמין במאמר בנושא add-iam-policy-binding.

    כדי להקצות תפקידים באמצעות קובץ מדיניות, אפשר לעיין במאמר הקצאה או ביטול של כמה תפקידים באופן פרוגרמטי

הענקת תפקידים ספציפיים למאגר

מקצים תפקידים ברמת המאגר כשרוצים שלמשתמשים או לחשבונות שירות יהיו רמות גישה שונות לכל מאגר בפרויקט.

המסוף

כדי להעניק גישה למאגר ספציפי:

  1. פותחים את הדף Repositories במסוף Google Cloud .

    פתיחת הדף Repositories

  2. בוחרים את המאגר המתאים.

  3. אם חלונית המידע לא מוצגת, לוחצים על Show Info Panel בסרגל התפריטים.

  4. בכרטיסייה Permissions (הרשאות), לוחצים על Add Principal (הוספת גורם ראשי).

  5. מזינים כתובת אימייל. תוכלו להוסיף אנשים, חשבונות שירות או קבוצות Google כחשבונות משתמשים.

  6. בוחרים תפקיד לחשבון הראשי. בהתאם לעקרון האבטחה של הרשאות מינימליות, מומלץ להעניק את רמת ההרשאות הנמוכה ביותר שנדרשת לגישה למשאבי Artifact Registry. מידע על תפקידים מוגדרים מראש והרשאות ב-Artifact Registry

  7. לוחצים על Save.

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. אפשר להגדיר קבוצת IAM של קישורי מדיניות בודדים או להשתמש בקובץ מדיניות.

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

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    איפה

    • ‫REPOSITORY הוא המזהה של המאגר.
    • ‫PRINCIPAL הוא החשבון הראשי שרוצים להוסיף לו את הקישור. משתמשים בפורמט user|group|serviceAccount:email או domain:domain.

      דוגמאות: user:test-user@gmail.com,‏ group:admins@example.com,‏ serviceAccount:test123@example.domain.com או domain:example.domain.com.

    • ‫ROLE הוא התפקיד שרוצים להעניק.

    • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.

    לדוגמה, כדי להוסיף קישור למדיניות IAM עבור התפקיד roles/artifactregistry.writer למשתמש write@gmail.com במאגר my-repo במיקום --us-west1, מריצים את הפקודה:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-west1 --member=user:write@gmail.com --role=roles/artifactregistry.writer

    כדי להעניק תפקידים באמצעות קובץ מדיניות, משתמשים בהליך שמתואר במאמר הענקה או ביטול של תפקידים מרובים באופן פרוגרמטי עם הפקודות gcloud artifacts repositories get-iam-policy ו-gcloud artifacts repositories set-iam-policy.

Terraform

משתמשים במשאב google_artifact_registry_repository_iam כדי להגדיר מדיניות IAM. בדוגמה הבאה מוגדר חשבון שירות עם שם המשאב repo-account, וניתנת לו גישת קריאה למאגר עם שם המשאב my-repo.

אם אתם חדשים בשימוש ב-Terraform עבור Google Cloud, תוכלו לעיין בדף תחילת העבודה – Google Cloud באתר HashiCorp.

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo"     {
  provider = google-beta

  location = "LOCATION"
  repository_id = "REPOSITORY"
  description = "DESCRIPTION"
  format = "FORMAT"
}

resource "google_service_account" "repo-account" {
  provider = google-beta

  account_id   = "ACCOUNT-ID"
  display_name = "Repository Service Account"
}

resource "google_artifact_registry_repository_iam_member" "repo-iam" {
  provider = google-beta

  location = google_artifact_registry_repository.my-repo.location
  repository = google_artifact_registry_repository.my-repo.name
  role   = "roles/artifactregistry.reader"
  member = "serviceAccount:${google_service_account.repo-account.email}"
}

‫ACCOUNT-ID הוא המזהה של חשבון השירות. זה החלק בשדה של כתובת האימייל בחשבון השירות לפני הסמל @.

דוגמאות נוספות זמינות במאמרי העזרה בנושא המשאב google_artifact_registry_repository_iam.

הגדרת גישה ציבורית למאגר

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

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

המסוף

  1. פותחים את הדף Repositories במסוף Google Cloud .

    פתיחת הדף Repositories

  2. בוחרים את המאגר המתאים.

  3. אם חלונית המידע לא מוצגת, לוחצים על Show Info Panel בסרגל התפריטים.

  4. בכרטיסייה Permissions (הרשאות), לוחצים על Add Principal (הוספת גורם ראשי).

  5. בשדה New principals, מזינים allUsers.

  6. בוחרים את התפקיד Artifact Registry Reader.

  7. כדי למנוע שימוש לרעה על ידי משתמשים לא מאומתים, מגדירים מגבלה לכל משתמש על בקשות ל-Artifact Registry API. הוראות מפורטות מופיעות במאמר בנושא הגבלת השימוש.

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. מריצים את הפקודה הבאה:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE

    איפה

    • ‫REPOSITORY הוא המזהה של המאגר.

    • ‫ROLE הוא התפקיד שרוצים להקצות. ‫

    • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.

    לדוגמה, כדי להגדיר את המאגר my-repo במיקום --us-west1 כציבורי, מריצים את הפקודה:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-west1 --member=allUsers --role=roles/artifactregistry.reader

    ‫

  3. כדי למנוע שימוש לרעה על ידי משתמשים לא מאומתים, מגדירים מגבלה לכל משתמש על בקשות ל-Artifact Registry API. הוראות מפורטות מופיעות במאמר בנושא הגבלת השימוש.

ביטול תפקידים

כדי לבטל את הגישה למאגר, מסירים את החשבון הראשי מרשימת החשבונות הראשיים המורשים.

כדי להסיר את הגישה הציבורית ממאגר, מסירים את החשבון הראשי allUsers.

המסוף

כדי לבטל הרשאות:

  1. פותחים את הדף Repositories במסוף Google Cloud .

    פתיחת הדף Repositories

  2. בוחרים את המאגר המתאים.

  3. אם חלונית המידע לא מוצגת, לוחצים על Show Info Panel בסרגל התפריטים.

  4. בכרטיסייה Permissions (הרשאות), מרחיבים את העיקרון המתאים. אם אתם הופכים מאגר ציבורי לפרטי, מרחיבים את allUsers העיקרון.

  5. כדי לבטל את הגישה, לוחצים על הסרת הגורם המורשה.

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. כדי לבטל תפקיד ברמת הפרויקט, מריצים את הפקודה הבאה:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    • ‫PROJECT הוא מזהה הפרויקט.
    • ‫PRINCIPAL הוא החשבון הראשי שרוצים להסיר את הקישור שלו. משתמשים בפורמט user|group|serviceAccount:email או domain:domain.

      דוגמאות: user:test-user@gmail.com,‏ group:admins@example.com,‏ serviceAccount:test123@example.domain.com או domain:example.domain.com.

    • ‫ROLE הוא התפקיד שרוצים לבטל.

    כדי לבטל תפקיד במאגר, מריצים את הפקודה הבאה:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    איפה

    • ‫REPOSITORY הוא המזהה של המאגר.
    • ‫PRINCIPAL הוא החשבון הראשי שרוצים להסיר את הקישור שלו. משתמשים בפורמט user|group|serviceAccount:email או domain:domain.

      דוגמאות: user:test-user@gmail.com,‏ group:admins@example.com,‏ serviceAccount:test123@example.domain.com או domain:example.domain.com.

      כדי לבטל את הגישה הציבורית למאגר, מציינים את הגורם המורשה allUsers.

    • ‫ROLE הוא התפקיד שרוצים לבטל.

    לדוגמה, כדי להסיר קישור למדיניות עבור התפקיד roles/artifactregistry.writer למשתמש write@gmail.com במאגר my-repo במיקום --us-west1, מריצים את הפקודה:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-west1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    כדי לבטל את הגישה לכולם אל my-repo במיקום --us-west1, מריצים את הפקודה:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-west1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader

הענקת גישה מותנית באמצעות תגים

אדמינים של פרויקטים יכולים ליצור תגים למשאבים ב- Google Cloudולנהל אותם במנהל המשאבים. כשמצרפים תג למאגר של Artifact Registry, האדמינים יכולים להשתמש בתג עם תנאי IAM כדי להעניק גישה מותנית למאגר.

אי אפשר לצרף תגים לפריטים ספציפיים.

מידע נוסף זמין במאמרי העזרה הבאים:

שילוב עם שירותים Google Cloud

ברוב Google Cloud חשבונות השירות, כדי להגדיר גישה למאגר נדרשת רק הקצאה של תפקידי IAM מתאימים.

חשבונות שירות שמוגדרים כברירת מחדל בשביל שירותים מסוימים ( Google Cloud )

Google Cloud שירותים כמו Cloud Build או Google Kubernetes Engine משתמשים בחשבון שירות ברירת מחדל או בסוכן שירות כדי ליצור אינטראקציה עם משאבים באותו פרויקט.

אם אתם רוצים להגדיר או לשנות הרשאות בעצמכם:

  • השירות Google Cloud נמצא בפרויקט אחר מ-Artifact Registry.
  • הרשאות ברירת המחדל לא מתאימות לצרכים שלכם.
  • אתם משתמשים בחשבון שירות שסופק על ידי המשתמש כדי ליצור אינטראקציה עם Artifact Registry במקום להשתמש בחשבון השירות שמוגדר כברירת מחדל.
  • ההגדרות של מדיניות הארגון מונעות הקצאת תפקידים אוטומטית לחשבונות שירות שמוגדרים כברירת מחדל.

בדרך כלל חשבונות השירות הבאים ניגשים ל-Artifact Registry. כתובת האימייל של חשבון השירות כוללת את Google Cloud מזהה הפרויקט או מספר הפרויקט שבו השירות פועל.

שירות חשבון שירות כתובת האימייל
סביבה גמישה ב-App Engine חשבון שירות של App Engine PROJECT-ID@appspot.gserviceaccount.com
Compute Engine חשבון השירות של Compute Engine שמוגדר כברירת מחדל PROJECT-NUMBER-compute@developer.gserviceaccount.com
Cloud Build חשבון שירות של Compute Engine
או
חשבון שירות מדור קודם של Cloud Build
בהתאם להגדרות הארגון, כתובת האימייל של חשבון השירות שמוגדרת כברירת מחדל היא אחת מהאפשרויות הבאות:
  • ‫Compute Engine: ‏ PROJECT-NUMBER-compute@developer.gserviceaccount.com
  • Cloud Build: ‏ PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Cloud Run סוכן השירות של Cloud Run
סוכן השירות של run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com
GKE חשבון השירות של Compute Engine שמוגדר כברירת מחדל
חשבון השירות שמוגדר כברירת מחדל לצמתים.
PROJECT-NUMBER-compute@developer.gserviceaccount.com

בהתאם להגדרות של מדיניות הארגון, יכול להיות שחשבון השירות שמוגדר כברירת מחדל יקבל אוטומטית את התפקיד 'עריכה' בפרויקט. אנחנו ממליצים מאוד להשבית את הענקת התפקיד האוטומטית על ידי החלת האילוץ של מדיניות הארגון iam.automaticIamGrantsForDefaultServiceAccounts. אם יצרתם את הארגון אחרי 3 במאי 2024, האילוץ הזה נאכף כברירת מחדל.

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

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

מתן גישה למכונות של Compute Engine

למכונות וירטואליות שרוצות לגשת למאגרים צריכות להיות הרשאות ל-Artifact Registry והיקף גישה לאחסון.

רמת הגישה של חשבון שירות נקבעת לפי תפקידי ה-IAM שהוקצו לחשבון השירות, אבל היקפי הגישה במכונה וירטואלית קובעים את היקפי ברירת המחדל של OAuth לבקשות שמוגשות דרך ה-CLI של gcloud וספריות הלקוח במכונה. כתוצאה מכך, היקפי הגישה עשויים להגביל עוד יותר את הגישה לשיטות API כשמבצעים אימות באמצעות Application Default Credentials.

ב-Compute Engine מוגדרות כברירת מחדל ההגדרות הבאות:

  • חשבון השירות של Compute Engine שמוגדר כברירת מחדל הוא הזהות של מכונות וירטואליות. כתובת האימייל של חשבון השירות מסתיימת בסיומת @developer.gserviceaccount.com.
  • לחשבון השירות שמוגדר כברירת מחדל יש את תפקיד העריכה הבסיסי ב-IAM, אלא אם השבתתם את ההתנהגות הזו.
  • למכונות שאתם יוצרים עם חשבון השירות שמוגדר כברירת מחדל יש היקפי גישה שמוגדרים כברירת מחדל ב-Compute Engine, כולל גישה לקריאה בלבד לאחסון. למרות שהתפקיד 'עריכה' בדרך כלל מעניק גישת כתיבה, היקף הגישה לאחסון read-only מגביל את חשבון השירות של המופע להורדת ארטיפקטים רק ממאגר כלשהו באותו פרויקט.

צריך להגדיר את היקף הגישה של חשבון השירות אם:

  • חשבון השירות של מכונת ה-VM צריך לגשת למאגר בפרויקט אחר.
  • חשבון השירות של המכונה הווירטואלית צריך לבצע פעולות אחרות מלבד קריאת ארטיפקטים ממאגרים. בדרך כלל, זה קורה כשמפעילים כלים של צד שלישי במכונה וירטואלית שצריכים לשלוח תמונות או להריץ פקודות של Artifact Registry gcloud.

כדי להגדיר תפקידים ולהגדיר את היקף הגישה:

  1. בפרויקט שבו נמצאת מכונת ה-VM, מאחזרים את השם של חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. כתובת האימייל של חשבון השירות מסתיימת בסיומת @developer.gserviceaccount.com.

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

  3. מגדירים את היקף הגישה באמצעות האפשרות ‎--scopes.

    1. מפסיקים את המכונה הווירטואלית. מידע נוסף על עצירת מכונה

    2. מגדירים את היקף הגישה באמצעות הפקודה הבאה:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      מחליפים את SCOPE בערך המתאים.

      • ב-Docker, האפשרויות הבאות נתמכות:

        • ‫storage-ro – מתן הרשאת קריאה רק לשליפת תמונות.
        • ‫storage-rw – מעניק הרשאת קריאה וכתיבה לדחיפה או למשיכה של תמונות.
        • ‫cloud-platform – צפייה בנתונים וניהול שלהם, כולל מטא-נתונים, בשירותGoogle Cloud .
      • בפורמטים אחרים, צריך להשתמש בהיקף cloud-platform.

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

הענקת גישה לאשכולות Google Kubernetes Engine

אשכולות GKE ומאגרי צמתים יכולים לשלוף קונטיינרים ללא צורך בהגדרה נוספת, אם מתקיימות כל הדרישות הבאות:

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

חשבון שירות המשמש כברירת מחדל

הדרישות הבאות בנוגע להגדרות חלות על חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine:

  1. אם GKE נמצא בפרויקט אחר מ-Artifact Registry, צריך להעניק את ההרשאות הנדרשות לחשבון השירות.

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

  3. אם אתם לא משתמשים בגרסה נתמכת של GKE, צריך להגדיר את imagePullSecrets.

חשבון שירות שסופק על ידי המשתמש

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

  1. נותנים לחשבון השירות את ההרשאות הנדרשות מGoogle Cloud הפרויקט שבו פועל Artifact Registry.

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

    אם משתמשים בדגל --scopes עם הפקודה gcloud container clusters create או gcloud container node-pools create, צריך לכלול את היקפי הגישה המתאימים לשימוש ב-Artifact Registry.

הגדרת היקפי גישה

היקפי גישה הם השיטה הקודמת להגדרת הרשאות למכונות וירטואליות ב-Compute Engine. כדי לשלוף תמונות ממאגרי Artifact Registry, לצמתי GKE צריכה להיות הרשאת גישה לקריאה בלבד לאחסון, או הרשאת גישה אחרת לאחסון שכוללת גישת קריאה לאחסון.

אפשר להגדיר היקפי גישה רק כשיוצרים מאגר צמתים או אשכול. אי אפשר לשנות את היקפי הגישה בצמתים קיימים.

כדי לציין היקפי גישה כשיוצרים אשכול, מריצים את הפקודה הבאה:

gcloud container clusters create NAME --scopes=SCOPES

כדי לציין היקפי גישה כשיוצרים מאגר צמתים, מריצים את הפקודה הבאה:

gcloud container node-pools create NAME --scopes=SCOPES

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

  • ‫NAME הוא השם של האשכול או של מאגר הצמתים.
  • ‫SCOPES היא רשימה מופרדת בפסיקים של היקפי גישה להענקה.

    • כדי לגשת למאגרי Docker, צריך להשתמש באחת מההרשאות הבאות:

    • ‫storage-ro – מתן הרשאת קריאה בלבד לשליפת תמונות.

    • ‫storage-rw – מעניק הרשאת קריאה וכתיבה לדחיפה או למשיכה של תמונות.

    • ‫cloud-platform – צפייה בנתונים וניהול שלהם, כולל מטא-נתונים, בשירותGoogle Cloud .

    • כדי לגשת למאגרים אחרים, צריך להשתמש בהיקף cloud-platform.

    רשימה מלאה של היקפי ההרשאות זמינה במסמכי התיעוד של gcloud container clusters create או של gcloud container node-pools create.

מידע נוסף על ההיקפים שאפשר להגדיר כשיוצרים אשכול חדש זמין במאמר בנושא הפקודה gcloud container clusters create.

הגדרת imagePullSecret

כדי להגדיר imagePullSecret:

  1. בפרויקט עם GKE, מאתרים את חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. כתובת האימייל בחשבון מסתיימת בסיומת ‎@developer.gserviceaccount.com.

  2. מורידים את המפתח של חשבון השירות.

  3. בפרויקט עם המאגר, מוודאים שהענקתם הרשאות למאגר.

  4. בפרויקט עם האשכול, יוצרים סוד imagePullSecret בשם artifact-registry עם המפתח של חשבון השירות.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

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

    • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    • ‫SERVICE-ACCOUNT-EMAIL היא כתובת האימייל של חשבון השירות של Compute Engine.
    • ‫KEY-FILE הוא השם של קובץ המפתח של חשבון השירות. לדוגמה, key.json.
  5. פותחים את חשבון השירות שמוגדר כברירת מחדל:

    kubectl edit serviceaccount default --namespace default

    לכל מרחב שמות באשכול Kubernetes יש חשבון שירות שמוגדר כברירת מחדל בשם default. חשבון השירות שמוגדר כברירת מחדל משמש לשליפת קובץ האימג' של הקונטיינר.

  6. מוסיפים את הסוד imagePullSecret שנוצר לחשבון השירות שמוגדר כברירת מחדל:

    imagePullSecrets:
    - name: artifact-registry
    

    חשבון השירות שלכם אמור להיראות עכשיו כך:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

מעכשיו, לכל פוד חדש שייווצר במרחב השמות default הנוכחי יהיה מוגדר הסוד imagePullSecret.

סוכן שירות של Artifact Registry

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

המאמרים הבאים

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

אפשר גם להגביל את ההורדה של ארטיפקטים באמצעות כללי הורדה.