הגדרת אימות ל-Artifact Registry עבור Docker

בדף הזה מוסבר איך להגדיר את Docker כדי לבצע אימות למאגרי Docker ב-Artifact Registry.

אין צורך להגדיר אימות עבור Cloud de Confiance by S3NS סביבות זמן ריצה כמו Google Kubernetes Engine, אבל כדאי לוודא שההרשאות הנדרשות מוגדרות.

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

  1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init
  2. (אופציונלי) הגדרת ברירות מחדל לפקודות של ה-CLI של gcloud.
  3. מוודאים שלחשבון שבו אתם משתמשים לאימות יש הרשאה לגשת אל Artifact Registry. מומלץ להשתמש בחשבון שירות ולא בחשבון משתמש.
  4. מתקינים את Docker אם הוא עדיין לא מותקן.
  5. כדי לבצע פעולות במאגרי מידע, ל-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

‫Docker שומר את הגדרות האימות בקובץ התצורה config.json.

  • ‫Linux: ‏ ~/.docker/config.json
  • ב-Windows:‏ %USERPROFILE%\.docker\config.json

בקובץ יש קטעים נפרדים לשיטות אימות שונות:

credHelpers
אם משתמשים ב-Docker credential helper לאימות, Artifact Registry מאחסן את ההגדרות של credential helper בקטע 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.

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

כדי לבצע אימות ב-Artifact Registry:

  1. מתחברים ל-CLI של gcloud בתור המשתמש שיריץ את פקודות Docker.

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

    gcloud config set artifacts/allow_unrecognized_registry True
    
  1. מריצים את הפקודה הבאה:

    gcloud auth configure-docker HOSTNAME-LIST
    

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

  2. הפקודה מציגה את הקטע credHelpers של הגדרת Docker הנוכחית ואת ההגדרה המעודכנת אחרי הוספת שמות המארחים שצוינו.

    כדי לאשר את שינויי ההגדרות, מזינים y.

    פרטי הכניסה שלכם נשמרים בספריית הבית של המשתמש.

    • ‫Linux: ‏ $HOME/.docker/config.json
    • ב-Windows:‏ %USERPROFILE%/.docker/config.json
  3. ‫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:

  1. מתחברים למכונה בתור המשתמש שיריץ את פקודות Docker.

  2. מורידים את כלי העזר העצמאי לפרטי כניסה של 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/
    
  3. מגדירים את Docker כך שישתמש בפרטי הכניסה שלכם ל-Artifact Registry כשמתקשרים עם Artifact Registry (צריך לעשות את זה רק פעם אחת):

    docker-credential-gcr configure-docker --registries=HOSTNAME-LIST
    

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

    מידע נוסף זמין במאמרי העזרה בנושא כלי עזר עצמאיים של Docker לאימות ב-GitHub.

    פרטי הכניסה שלכם נשמרים בספריית הבית של המשתמש.

    • ‫Linux: ‏ $HOME/.docker/config.json
    • ב-Windows:‏ %USERPROFILE%/.docker/config.json
  4. ‫Docker דורש שיהיו במערכת PATH כלי עזר לאימות. מוודאים שהפקודה docker-credential-gcr נמצאת במערכת PATH.

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

    echo "https://HOSTNAME" | docker-credential-gcr get
    

    מחליפים את HOSTNAME בשם מארח שהוספתם להגדרה. לדוגמה:

    echo "https://u-france-east1-docker.s3nsregistry.fr" | docker-credential-gcr get
    

    אם הפקודה מסתיימת ללא שגיאות, פלט ה-JSON שמוחזר כולל אסימון בשדה Secret. לדוגמה:

    {"ServerURL":"https://u-france-east1-docker.s3nsregistry.fr","Username":"_dcgcr_2_0_0_token","Secret":"ya29..."}
    

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

טוקן גישה

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

כדי להשתמש באסימון גישה עם פרטי כניסה של חשבון שירות:

  1. יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.

  2. מקצים לחשבון השירות את התפקיד הספציפי ב-Artifact Registry כדי לתת גישה למאגר.

  3. יצירת אסימון גישה לחשבון השירות ואימות:

    כדי להתחזות לחשבון שירות, לקבל אסימון בשבילו ואז לבצע אימות בתור חשבון השירות, אתם צריכים את ההרשאות שכלולות בתפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator).

    ‫ מריצים את הפקודה הבאה ומחליפים את ACCOUNT בכתובת האימייל בחשבון השירות ואת LOCATION במיקום האזורי של המאגר.

    Linux

    gcloud auth print-access-token \
        --impersonate-service-account ACCOUNT | docker login \
        -u oauth2accesstoken \
        --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

    Windows

    gcloud auth print-access-token --impersonate-service-account ACCOUNT | docker login -u oauth2accesstoken --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

האימות של Docker ב-Artifact Registry בוצע.

מפתח לחשבון השירות

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

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

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

כדי ליצור חשבון שירות חדש ומפתח של חשבון שירות לשימוש רק במאגרי Artifact Registry:

  1. יוצרים חשבון שירות שיפעל בשם האפליקציה, או בוחרים חשבון שירות קיים שמשמש לאוטומציה.

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

    מעבר לדף 'חשבונות שירות'

  2. אפשר גם לקודד Base64 את כל התוכן של קובץ המפתח.

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    כאשר FILE-NAME הוא שם הקובץ המקורי של המפתח ו-NEW-FILE-NAME הוא קובץ המפתח בקידוד Base64.

  3. מוודאים שההרשאות מוגדרות בצורה נכונה לחשבון השירות. אם אתם משתמשים בחשבון השירות של Compute Engine, אתם צריכים להגדיר בצורה נכונה גם את ההרשאות וגם את היקפי הגישה.

  4. משתמשים במפתח של חשבון השירות כדי להגדיר שילוב עם Docker:

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

    ‫Linux / macOS

    cat KEY-FILE | docker login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.s3nsregistry.fr
    

    Windows

    Get-Content KEY-FILE |
    docker login -u KEY-TYPE --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

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

    • KEY-TYPE הוא אחד מהבאים:
      • _json_key אם אתם משתמשים במפתח של חשבון השירות בפורמט JSON כמו שהוא סופק כשנוצר הקובץ.
      • _json_key_base64 אם קידדתם את כל התוכן של הקובץ בקידוד Base64.
    • KEY-FILE הוא השם של קובץ המפתח של חשבון השירות בפורמט JSON.
    • LOCATION הוא המיקום האזורי של המאגר שבו התמונה מאוחסנת.

האימות של Docker ב-Artifact Registry בוצע.