הגדרת אימות Docker ל-Artifact Registry מאפשרת לכם לשלוח ולקבל קובצי אימג' של קונטיינרים מתחנת העבודה המקומית או מסביבות חיצוניות.
לא צריך להגדיר אימות עבור Cloud Build או סביבות זמן ריצה כמו Google Kubernetes Engine ו-Cloud Run, אבל כדאי לוודא שיש לכם את ההרשאות הנדרשות. Google Cloudלפני שמתחילים
-
התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
- (אופציונלי) הגדרת ברירות מחדל לפקודות של ה-CLI של gcloud.
- מוודאים שלחשבון שבו אתם משתמשים לאימות יש הרשאה לגשת אל Artifact Registry. מומלץ להשתמש בחשבון שירות במקום בחשבון משתמש.
- מתקינים את Docker אם הוא עדיין לא מותקן. Docker כלול ב-Cloud Shell.
- כדי לבצע פעולות במאגרי מידע, ל-Docker נדרשת גישת הרשאה.
ב-Linux או ב-Windows, מוסיפים את המשתמש שבאמצעותו מריצים פקודות Docker לקבוצת האבטחה של Docker. ב-macOS אין צורך לבצע את השלב הזה כי Docker Desktop פועל במכונה וירטואלית כמשתמש root.
Linux
קבוצת האבטחה של Docker נקראת
docker. כדי להוסיף את שם המשתמש, מריצים את הפקודה הבאה:sudo usermod -a -G docker ${USER}Windows
קבוצת האבטחה של Docker נקראת
docker-users. כדי להוסיף משתמש משורת הפקודה של האדמין, מריצים את הפקודה הבאה:net localgroup docker-users DOMAIN\USERNAME /addכאשר:
- DOMAIN הוא הדומיין שלכם ב-Windows.
- USERNAME הוא שם המשתמש שלכם.
כדי שהשינויים במינוי לקבוצה ייכנסו לתוקף, צריך לצאת מהחשבון ולהיכנס אליו שוב. אם אתם משתמשים במכונה וירטואלית, יכול להיות שתצטרכו להפעיל אותה מחדש כדי שהשינויים בחברות ייכנסו לתוקף.
בחירה של שיטת אימות
אלה שיטות האימות שזמינות:
- כלי עזר לפרטי כניסה ל-CLI של gcloud
- הגדרת פרטי הכניסה שלכם ל-Artifact Registry לשימוש ב-Docker ישירות ב-CLI של gcloud. זו שיטת האימות הפשוטה ביותר, אבל היא יכולה להיות איטית יותר מהכלי העצמאי לעזרה בפרטי הכניסה.
- כלי עזר עצמאי של מסמך אימות ל-Docker
- האפשרות הזו מיועדת בעיקר להגדרת פרטי הכניסה לשימוש ב-Docker כשאין Google Cloud CLI. הוא מהיר משמעותית מכלי העזר לפרטי כניסה של ה-CLI של gcloud, ומשתמש ב-Application Default Credentials (ADC) כדי למצוא באופן אוטומטי פרטי כניסה בסביבה שלכם.
- טוקן גישה
- אפשר ליצור אסימון גישה לטווח קצר לחשבון שירות, ואז להשתמש באסימון לאימות באמצעות סיסמה. האסימון תקף רק ל-60 דקות, ולכן הוא אפשרות בטוחה יותר ממפתח של חשבון שירות.
- מפתח לחשבון השירות
- זוג מפתחות בניהול המשתמש, שאפשר להשתמש בו כפרטי כניסה לחשבון שירות. מכיוון שהאישורים תקפים לטווח ארוך, זו האפשרות הכי פחות מאובטחת מכל שיטות האימות הזמינות.
כדי להקטין את הסיכון לגישה לא מורשית לתמונות שלכם במאגר, מומלץ להשתמש באסימון גישה או בכלי עזר לאישורים. אם אתם חייבים להשתמש במפתח של חשבון שירות, הקפידו על השיטות המומלצות לניהול פרטי כניסה.
הגדרות האימות בקובץ התצורה של Docker
הגדרות האימות נשמרות בקובץ התצורה config.json של Docker.
- ב-Linux:
~/.docker/config.json - ב-Windows:
%USERPROFILE%\.docker\config.json
בקובץ יש קטעים נפרדים לשיטות אימות שונות:
credHelpers- אם משתמשים בכלי העזר לפרטי כניסה של Docker לצורך אימות, Artifact Registry מאחסן את ההגדרות של כלי העזר לפרטי כניסה בקטע
credHelpersשל הקובץ. auths- אם אתם משתמשים ב-Docker כדי להיכנס באמצעות טוקן או מפתח של חשבון שירות בתור הסיסמה שלכם, Docker מאחסן גרסה בקידוד base64 של פרטי הכניסה שלכם בקטע
authsשל הקובץ. credStore- אם הגדרתם מאגר פרטי כניסה לניהול פרטי הכניסה, ההגדרות של מאגר פרטי הכניסה מופיעות בקטע
credStoreשל הקובץ.
כש-Docker מתחבר למאגר, הוא בודק קודם אם יש כלי עזר לאימות שמשויך למארח. לכן, אם קובץ ה-config.json כולל הגדרות של Artifact Registry גם בקטע credHelpers וגם בקטע auths, המערכת מתעלמת מההגדרות בקטע auths.
כלי עזר לפרטי כניסה ל-CLI של gcloud
הכלי לעזרה בפרטי כניסה של ה-CLI של gcloud מספק גישה מאובטחת לטווח קצר למשאבי הפרויקט. הוא מגדיר את Docker לאימות למארחי Artifact Registry בכל סביבה שבה מותקן Google Cloud CLI. Cloud Shell כולל את Google Cloud CLI וגרסה עדכנית של Docker.הכלי של ה-CLI של gcloud שמסייע בניהול פרטי הכניסה הוא שיטת האימות שהכי קל להגדיר. הוא מגדיר את Docker עם פרטי הכניסה של המשתמש הפעיל או חשבון השירות בסשן של ה-CLI של gcloud. מכיוון שכלי העזר הזה תלוי ב-CLI של gcloud, הוא יכול להיות איטי משמעותית מכלי העזר העצמאי. ב-builds אוטומטיים עם כלים של צד שלישי או לקוחות Docker עם מספר גדול של מארחי מרשם מוגדרים, השתמשו במקום זאת בכלי העזר העצמאי לפרטי כניסה.
כדי לבצע אימות ב-Artifact Registry:
מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.
כדי להגדיר אימות באמצעות פרטי כניסה של משתמש, מריצים את הפקודה הבאה:
gcloud auth loginכדי להגדיר אימות באמצעות פרטי כניסה לחשבון שירות, מריצים את הפקודה הבאה:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILEמחליפים את מה שכתוב בשדות הבאים:
- ACCOUNT: חשבון השירות שבו רוצים להשתמש עם Artifact Registry, בפורמט
USERNAME@PROJECT-ID.iam.gserviceaccount.com. אם רוצים להשתמש בחשבון קיים, אפשר לראות רשימה של חשבונות שירות בדף Service Accounts במסוף Google Cloud או באמצעות הפקודהgcloud iam service-accounts list - KEY-FILE: קובץ המפתח של חשבון השירות. למידע על יצירת מפתח, אפשר לעיין במשאבי העזרה בנושא ניהול זהויות והרשאות גישה (IAM).
- ACCOUNT: חשבון השירות שבו רוצים להשתמש עם Artifact Registry, בפורמט
מריצים את הפקודה הבאה:
gcloud auth configure-docker HOSTNAME-LISTHOSTNAME-LIST היא רשימה מופרדת בפסיקים של שמות מארחים של מאגרי מידע שרוצים להוסיף להגדרות של הכלי לעזרה בפרטי הכניסה.
לדוגמה, כדי להוסיף את האזורים
us-west1ו-asia-northeast1, מריצים את הפקודה:gcloud auth configure-docker us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.devשמות המארחים שצוינו מתווספים להגדרות של הכלי לעזרה בפרטי הכניסה. אפשר להוסיף עוד שמות מארחים להגדרה בהמשך, על ידי הפעלה חוזרת של הפקודה.
כדי לראות את רשימת המיקומים הנתמכים של המאגר, מריצים את הפקודה:
gcloud artifacts locations listהפקודה מציגה את הקטע
credHelpersשל הגדרת Docker הנוכחית ואת ההגדרה המעודכנת אחרי הוספת שמות המארחים שצוינו.כדי לאשר את שינויי ההגדרות, מזינים
y.פרטי הכניסה נשמרים בספריית הבית של המשתמש.
- ב-Linux:
$HOME/.docker/config.json - ב-Windows:
%USERPROFILE%/.docker/config.json
- ב-Linux:
כדי להשתמש ב-Docker, כלי העזר לאימות פרטי הכניסה צריכים להיות ב-
PATHשל המערכת. מוודאים שהפקודהgcloudנמצאת במערכתPATH.
כלי עזר עצמאי לפרטי כניסה
כלי העזר העצמאי של Docker להגדרת פרטי כניסה מגדיר את Docker כך שיאמת את הזהות ב-Artifact Registry במערכת שבה ה-CLI של gcloud לא זמין. הכלי העצמאי, שעשוי להיות מהיר יותר מכלי העזר לפרטי כניסה של gcloud CLI, משתמש ב-Application Default Credentials (ADC) כדי למצוא באופן אוטומטי פרטי כניסה בסביבה שלכם. מומלץ להשתמש בשיטת האימות הזו לבנייה אוטומטית באמצעות כלים של צד שלישי או לקוחות Docker עם מספר גדול של מארחי רישום שהוגדרו.
הכלי העצמאי לעזרה בפרטי כניסה של Docker מאחזר את פרטי הכניסה שלכם ל-Artifact Registry וכותב אותם בקובץ ההגדרות של Docker. כך תוכלו להשתמש בכלי שורת הפקודה של Docker, docker, כדי ליצור אינטראקציה ישירה עם Artifact Registry.
כדי להשתמש בכלי העזר לפרטי הכניסה של Docker:
מתחברים למכונה בתור המשתמש שיריץ את פקודות Docker.
מורידים את כלי העזר העצמאי של Docker לניהול פרטי כניסה מ-GitHub.
אפשר גם להשתמש בכלי לשורת הפקודה
curl. לדוגמה:VERSION=2.1.29 OS=linux # or "darwin" for OSX, "windows" for Windows. ARCH=amd64 # or "386" for 32-bit OSs curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \ | tar xz docker-credential-gcr \ && chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/מגדירים את Docker כך שישתמש בפרטי הכניסה של Artifact Registry כשמקיימים אינטראקציה עם Artifact Registry (צריך לעשות את זה רק פעם אחת):
docker-credential-gcr configure-docker --registries=HOSTNAME-LISTHOSTNAME-LIST היא רשימה מופרדת בפסיקים של שמות מארחים של מאגרי מידע שרוצים להוסיף להגדרות של הכלי לעזרה בפרטי הכניסה.
לדוגמה, כדי להוסיף את האזורים
us-west1ו-asia-northeast1, מריצים את הפקודה:docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.devשמות המארחים שצוינו מתווספים להגדרות של הכלי לעזרה בפרטי הכניסה. אפשר להוסיף שמות מארחים אחרים להגדרה בהמשך על ידי הפעלת הפקודה שוב.
כדי לראות רשימה של מיקומי מאגרים נתמכים, מריצים את הפקודה:
gcloud artifacts locations listמידע נוסף זמין במאמרי העזרה בנושא כלי עזר עצמאיים של Docker לאימות ב-GitHub.
פרטי הכניסה נשמרים בספריית הבית של המשתמש.
- ב-Linux:
$HOME/.docker/config.json - ב-Windows:
%USERPROFILE%/.docker/config.json
- ב-Linux:
כדי להשתמש ב-Docker, צריך להוסיף את מסייעי פרטי הכניסה למשתנה הסביבה
PATHשל המערכת. מוודאים שהפקודהdocker-credential-gcrנמצאת במערכתPATH.כדי לוודא שכלי העזר לאחזור פרטי הכניסה יכול לאחזר את פרטי הכניסה שלכם בהצלחה, מריצים את הפקודה הבאה:
echo "https://HOSTNAME" | docker-credential-gcr getמחליפים את HOSTNAME בשם מארח שהוספתם להגדרה. לדוגמה:
echo "https://us-west1-docker.pkg.dev" | docker-credential-gcr getאם הפקודה מסתיימת ללא שגיאות, פלט ה-JSON שמוחזר כולל אסימון בשדה
Secret. לדוגמה:{"ServerURL":"https://us-west1-docker.pkg.dev","Username":"_dcgcr_2_0_0_token","Secret":"ya29..."}
Docker מוגדר עכשיו לאימות ב-Artifact Registry. כדי לשלוח תמונות ולמשוך אותן, צריך לוודא שההרשאות מוגדרות בצורה נכונה.
טוקן גישה
אתם יכולים ליצור אסימון גישה מסוג OAuth לטווח קצר כדי לבצע אימות באמצעות Artifact Registry. הטוקן תקף ל-60 דקות, ולכן צריך לבקש אותו פחות משעה לפני שמשתמשים בו כדי להתחבר ל-Artifact Registry.
כדי להשתמש באסימון גישה עם פרטי כניסה של חשבון שירות:
יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.
מקצים לחשבון השירות את התפקיד הספציפי ב-Artifact Registry כדי לתת גישה למאגר.
יוצרים אסימון גישה לחשבון השירות ומאמתים:
כדי להתחזות לחשבון שירות, לקבל אסימון בשבילו ואז לבצע אימות בתור חשבון השירות, אתם צריכים את ההרשאות שכלולות בתפקיד 'יצירת אסימונים בחשבון שירות' (
roles/iam.serviceAccountTokenCreator). מריצים את הפקודה הבאה ומחליפים את ACCOUNT בכתובת האימייל בחשבון השירות ואת LOCATION במיקום האזורי או במספר אזורים של המאגר.
Linux
gcloud auth print-access-token \ --impersonate-service-account ACCOUNT | docker login \ -u oauth2accesstoken \ --password-stdin https://LOCATION-docker.pkg.devWindows
gcloud auth print-access-token --impersonate-service-account ACCOUNT | docker login -u oauth2accesstoken --password-stdin https://LOCATION-docker.pkg.dev
האימות של Docker ב-Artifact Registry הושלם.
מפתח לחשבון השירות
כל מי שיש לו גישה למפתח פרטי תקף של חשבון שירות יוכל לגשת למשאבים דרך חשבון השירות. חשוב לדעת שמחזור החיים של הגישה של המפתח לחשבון השירות (ולכן גם לנתונים שלחשבון השירות יש גישה אליהם) לא תלוי במחזור החיים של המשתמש שהוריד את המפתח.
כדי להגביל את הגישה למאגרי הקוד, אנחנו ממליצים:
- יוצרים חשבונות שירות ייעודיים שמשמשים רק לאינטראקציה עם מאגרי מידע.
- מקצים את התפקיד הספציפי ב-Artifact Registry שנדרש לחשבון השירות. לדוגמה, חשבון שירות שמוריד רק ארטיפקטים צריך לקבל רק את התפקיד Artifact Registry Reader.
- הגדרת ההרשאות לחשבונות השירות הייעודיים בכל מאגר, במקום ברמת הפרויקט. לאחר מכן תוכלו לציין גישה על סמך ההקשר של המאגר. לדוגמה, לחשבון שירות שמשמש לבניית פיתוחים יכול להיות התפקיד Artifact Registry Reader במאגר ייצור והתפקיד Artifact Registry Writer במאגר של סביבת ביניים.
- חשוב לפעול לפי השיטות המומלצות לניהול פרטי כניסה.
כדי ליצור חשבון שירות חדש ומפתח לחשבון שירות לשימוש במאגרי Artifact Registry בלבד:
יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.
כדי להגדיר אימות באמצעות Artifact Registry, תצטרכו לדעת איפה נמצא קובץ המפתח של חשבון השירות. בחשבונות קיימים, אפשר לראות את המפתחות וליצור מפתחות חדשים בדף Service Accounts.
אפשר גם לקודד ב-Base64 את כל התוכן של קובץ המפתח.
Linux
base64 FILE-NAME > NEW-FILE-NAMEmacOS
base64 -i FILE-NAME -o NEW-FILE-NAMEWindows
Base64.exe -e FILE-NAME > NEW-FILE-NAMEכאשר FILE-NAME הוא שם קובץ המפתח המקורי ו-NEW-FILE-NAME הוא קובץ המפתח בקידוד Base64.
מוודאים שההרשאות של חשבון השירות מוגדרות כמו שצריך. אם אתם משתמשים בחשבון השירות של Compute Engine, אתם צריכים להגדיר בצורה נכונה גם את ההרשאות וגם את היקפי הגישה.
משתמשים במפתח של חשבון השירות כדי להגדיר שילוב עם Docker:
מריצים את הפקודה הבאה:
Linux או macOS
cat KEY-FILE | docker login -u KEY-TYPE --password-stdin \ https://LOCATION-docker.pkg.devWindows
Get-Content KEY-FILE | docker login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.devמחליפים את מה שכתוב בשדות הבאים:
- KEY-TYPE: אחת מהאפשרויות הבאות:
-
_json_keyאם משתמשים במפתח של חשבון השירות בפורמט JSON, כפי שסופק כשנוצר הקובץ. -
_json_key_base64אם קידדתם ב-base64 את כל התוכן של הקובץ.
-
- KEY-FILE: השם של קובץ המפתח של חשבון השירות בפורמט JSON.
- LOCATION: המיקום האזורי או במספר אזורים של המאגר שבו התמונה מאוחסנת.
- KEY-TYPE: אחת מהאפשרויות הבאות:
האימות של Docker ב-Artifact Registry הושלם.