הגדרת אימות למאגרי חבילות Python ב-Artifact Registry

בדף הזה מוסבר איך להגדיר אימות למאגר חבילות Python ב-Artifact Registry.

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

לא צריך להגדיר אימות עבור Cloud Build או סביבות זמן ריצה כמו Google Kubernetes Engine ו-Cloud Run, אבל כדאי לוודא שההרשאות הנדרשות מוגדרות. Google Cloud

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

  1. אם מאגר היעד לא קיים, יוצרים מאגר חדש של חבילות Python.
  2. מוודאים ש-Python 3 מותקן. הוראות התקנה מופיעות בGoogle Cloud הדרכה להגדרת Python.
  3. מוודאים שלחשבון המשתמש או לחשבון השירות שבהם אתם משתמשים יש את ההרשאות הנדרשות לגישה למאגר.
  4. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init

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

  5. (אופציונלי) הגדרת ברירות מחדל לפקודות של ה-CLI של gcloud.

סקירה כללית

‫Artifact Registry תומך בשיטות האימות הבאות.

ספריית Python keyring (מומלץ)
Artifact Registry מספק קצה עורפי של מחזיק מפתחות לאחסון פרטי הכניסה לחיבור למאגרי Artifact Registry.
אימות סיסמה
משתמשים באפשרות הזו כשאי אפשר להשתמש ב-keyring וצריך אפשרות שתומכת באימות סיסמה בסיסי.

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

אימות באמצעות מחזיק מפתחות

ספריית keyring של Python מספקת לאפליקציות דרך לגשת לעורפי קצה של keyring, כלומר למאגרי פרטי כניסה של מערכת ההפעלה ושל צד שלישי.

‫Artifact Registry מספק את קצה העורף של מחזיקי המפתחות keyrings.google-artifactregistry-auth לטיפול באימות למאגרי Artifact Registry.

סדר החיפוש של פרטי הכניסה

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

  1. Application Default Credentials‏ (ADC), אסטרטגיה שמחפשת פרטי כניסה בסדר הבא:

    1. פרטי הכניסה מוגדרים במשתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS.

    2. פרטי הכניסה שחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine,‏ Google Kubernetes Engine,‏ Cloud Run,‏ App Engine או בפונקציות של Cloud Run מספק.

  2. פרטי כניסה שסופקו על ידי Google Cloud CLI, כולל פרטי כניסה של משתמשים מהפקודה gcloud auth application-default login.

המשתנה GOOGLE_APPLICATION_CREDENTIALS הופך את החשבון לאימות למפורש, וכך קל יותר לפתור בעיות. אם לא משתמשים במשתנה, צריך לוודא שלחשבונות ש-ADC עשוי להשתמש בהם יש את ההרשאות הנדרשות. לדוגמה, לחשבון השירות שמוגדר כברירת מחדל למכונות וירטואליות ב-Compute Engine, לצמתים ב-Google Kubernetes Engine ולעדכונים ב-Cloud Run יש גישת קריאה בלבד למאגרים. אם אתם מתכוונים להעלות נתונים מהסביבות האלה באמצעות חשבון השירות שמוגדר כברירת מחדל, אתם צריכים לשנות את ההרשאות.

הגדרת מחזיק המפתחות

כדי להגדיר אימות באמצעות קצה העורף של מחזיק המפתחות של Artifact Registry:

  1. מתקינים את ספריית keyring.

    pip install keyring
    
  2. מתקינים את הבק אנד של Artifact Registry.

    pip install keyrings.google-artifactregistry-auth
    
  3. מריצים את הפקודה הבאה כדי לוודא שההתקנה בוצעה:

    keyring --list-backends
    

    הרשימה צריכה לכלול

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority: 9)
  4. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר שצריך להוסיף לפרויקט Python.

    gcloud artifacts print-settings python --project=PROJECT \
        --repository=REPOSITORY \
        --location=LOCATION
    

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

    • PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
    • REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  5. מוסיפים את ההגדרות הבאות לקובץ .pypirc. מיקום ברירת המחדל הוא:

    • ‫Linux ו-macOS: ‏ $HOME/.pypirc
    • ב-Windows:‏ %USERPROFILE%\.pypirc
    [distutils]
    index-servers =
        PYTHON-REPO-ID
    
    [PYTHON-REPO-ID]
    repository = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/
    

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

    • PYTHON-REPO-ID הוא מזהה של המאגר שאפשר להפנות אליו באמצעות כלים כמו Twine.
    • PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
    • REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  6. מוסיפים את המאגר לקובץ התצורה של pip. מיקום הקובץ תלוי בשאלה אם רוצים לעדכן את הקובץ לכל משתמש או את הקובץ הספציפי לסביבה וירטואלית שבה משתמשים.

    עבור הקובץ שמשויך למשתמש במערכת ההפעלה:

    • Unix: $HOME/.config/pip/pip.conf או $HOME/.pip/pip.conf
    • macOS: ‏ /Library/Application Support/pip/pip.conf או $HOME/.config/pip/pip.conf
    • ‫Windows: ‏ %APPDATA%\pip\pip.ini או %USERPROFILE%\pip\pip.ini

    בסביבות וירטואליות:

    • ‫Unix ו-macOS: ‏ $VIRTUAL_ENV/pip.conf
    • ב-Windows:‏ %VIRTUAL_ENV%\pip.ini

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

    [global]
    index-url = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/simple/
    

    המחרוזת /simple/ בסוף נתיב המאגר מציינת שהמאגר מטמיע את Python Simple Repository API.

סביבת Python שלכם מוגדרת עכשיו לאימות ב-Artifact Registry.

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

אחרי הגדרת keyring, אפשר להשתמש ב-keyring עם פרטי הכניסה של המשתמש ב-CLI של gcloud. צריך להיכנס ל-Google Cloud CLI לפני שמתחברים למאגר חבילות Python.

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

gcloud auth login

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

אחרי הגדרת keyring, אפשר להגדיר חשבון שירות לאימות.

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

    • Application Default Credentials (מומלץ)

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

      export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
      
    • פרטי כניסה ל-CLI של gcloud

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

      gcloud auth activate-service-account --key-file=KEY-FILE
      

    מחליפים את KEY-FILE בנתיב של קובץ המפתח של חשבון השירות.

אימות באמצעות מפתח של חשבון שירות

משתמשים בגישה הזו כשנדרש אימות באמצעות שם משתמש וסיסמה.

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

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

כדי להגדיר אימות:

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

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

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

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

  3. מריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר שצריך להוסיף לפרויקט Python.

    gcloud artifacts print-settings python --project=PROJECT \
        --repository=REPOSITORY \
        --location=LOCATION \
        --json-key=KEY-FILE
    

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

    • PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
    • REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    • KEY-FILE הוא הנתיב לקובץ מפתח JSON של חשבון השירות.
  4. מוסיפים את ההגדרות הבאות לקובץ .pypirc. מיקום ברירת המחדל של קובץ התצורה pip לכל משתמש הוא:

    • ‫Linux ו-macOS: ‏ $HOME/.pypirc
    • ב-Windows:‏ %USERPROFILE%\.pypirc
    [distutils]
    index-servers =
        PYTHON-REPO-ID
    
    [PYTHON-REPO-ID]
    repository = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/
    username: _json_key_base64
    password: KEY
    

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

    • PYTHON-REPO-ID הוא מזהה של המאגר שאפשר להפנות אליו באמצעות כלים כמו Twine.
    • PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
    • REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    • KEY הוא המפתח בקידוד Base64 בקובץ המפתח של חשבון השירות.
  5. מוסיפים את המאגר לקובץ התצורה של pip. המיקום של קובץ ההגדרות של pip תלוי בשאלה אם רוצים לעדכן את הקובץ לכל משתמש או את הקובץ שספציפי לסביבה וירטואלית שבה משתמשים.

    עבור הקובץ שמשויך למשתמש במערכת ההפעלה:

    • Unix: $HOME/.config/pip/pip.conf או $HOME/.pip/pip.conf
    • macOS: ‏ /Library/Application Support/pip/pip.conf או $HOME/.config/pip/pip.conf
    • ‫Windows: ‏ %APPDATA%\pip\pip.ini או %USERPROFILE%\pip\pip.ini

    בסביבות וירטואליות:

    • ‫Unix ו-macOS: ‏ $VIRTUAL_ENV/pip.conf
    • ב-Windows:‏ %VIRTUAL_ENV%\pip.ini

    מוסיפים את השורה הבאה לקובץ התצורה של pip:

    [global]
    index-url = https://_json_key_base64:KEY@LOCATION-python.pkg.dev/PROJECT/REPOSITORY/simple/
    
    • KEY המפתח הפרטי בקובץ המפתח של חשבון השירות.
    • המחרוזת /simple/ בסוף נתיב המאגר מציינת שהמאגר מטמיע את Python Simple Repository API.

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