הגדרת אימות למאגרי Ruby gem ב-Artifact Registry

בדף הזה מוסבר איך להגדיר אימות במאגר Ruby gem של Artifact Registry.

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

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

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

  1. אם מאגר היעד לא קיים, יוצרים מאגר Ruby gem.
  2. מוודאים ש-Ruby מותקן. הוראות להתקנה מופיעות בCloud de Confiance by S3NS הדרכה להגדרת Ruby.
  3. מוודאים שלחשבון המשתמש או לחשבון השירות שבהם אתם משתמשים יש את ההרשאות הנדרשות לגישה למאגר.
  4. מתקינים את ה-CLI של Google Cloud ואז נכנסים ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

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

סקירה כללית

‫Ruby תומך בשתי שיטות לאימות בקשות למאגר של Artifact Registry:

  • ממשק ה-CLI של RubyGems: תומך בבקשות push ו-pull. ה-CLI הזה זמין כברירת מחדל עם Ruby. כשמבצעים אימות באמצעות RubyGems, צריך לבצע אימות בכל פעם ששולחים בקשת push או בקשת משיכה (pull request) למאגר.
  • ‫Bundler CLI: תומך בבקשות משיכה. ‫Bundler מאחסן חבילות ו-upstreams בקובץ gemfile, וכך מאפשר למשתמשים ליצור הגדרות סטנדרטיות בכמה מכונות בלי צורך לאמת כל בקשת משיכה בנפרד. עם זאת, מדי פעם תצטרכו לאמת מחדש את פרטי הכניסה שלכם ל-Bundler.

    כדי להתקין את Bundler CLI, מזינים את הפקודה gem install bundler.

יצירת טוקנים לאימות

כדי לאמת את החבילה ב-Artifact Registry, צריך קודם ליצור טוקן אימות. אחר כך תוכלו להשתמש באסימון הזה כשאתם שולחים בקשות מהחבילה שלכם אל Artifact Registry.

אפשר ליצור טוקן גישה מסוג oauth2 באמצעות Cloud de Confiance by S3NS או טוקן מסוג oauth2l מחוץ ל- Cloud de Confiance by S3NS.

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

יצירת טוקן באמצעות gcloud

כדי ליצור אסימון גישה של oauth2 באמצעות Cloud de Confiance by S3NS, מריצים את הפקודה הבאה:

export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

עכשיו אפשר להפנות אל ACCESS_TOKEN כששולחים בקשות מחבילת Ruby אל Artifact Registry.

יצירת טוקן בלי להשתמש ב-gcloud

כדי ליצור אסימון גישה באמצעות ה-CLI של oauth2l בלבד:

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

    go install github.com/google/oauth2l@latest
    
  2. מריצים את הפקודה הבאה:

    export ACCESS_TOKEN="oauth2l fetch --scope cloud-platform"
    

    ‫Cloud de Confiance by S3NS יוצר אסימון גיבוב SHA256 ומאחסן אותו במשתנה ACCESS_TOKEN. עכשיו אפשר להפנות אל ACCESS_TOKEN כששולחים בקשות מחבילת Ruby אל Artifact Registry.

אימות באמצעות RubyGems CLI

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

אימות בקשות משיכה

אפשר לאמת בקשת משיכה בשורת הפקודה של Google Cloud CLI או על ידי עדכון הקובץ .gemrc.

אימות בקשות משיכה בשורת הפקודה

כדי לבצע אימות לגרסה העדכנית של ה-gem בבקשת משיכה, מריצים את הפקודה הבאה:

gem install GEM_NAME --source https://$ACCESS_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

כדי לבצע אימות לגרסה ספציפית של Gem, מוסיפים את האפשרות -v GEM_VERSION לפקודה gem install.

כאשר:

  • ‫GEM_NAME הוא שם ה-Gem שעבורו מוגשת הבקשה.
  • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  • ‫PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
  • ‫REPOSITORY הוא המזהה של המאגר.

אימות בקובץ .gemrc

כדי להגדיר אימות למקורות בבקשות משיכה, אפשר להוסיף את השורות הבאות לקובץ /.gemrc הגלובלי או הספציפי לפרויקט:

# File: ~/.gemrc

# Use the ACCESS_TOKEN retrieved from export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

<...>
:sources:
    - https://ACCESS_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/
<...>

כאשר:

  • ‫ACCESS_TOKEN הוא אסימון הגישה שלכם מסוג OAuth2.
  • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  • ‫PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
  • ‫REPOSITORY הוא המזהה של המאגר.

כדי להתקין gem באמצעות המקור או המקורות שמוגדרים בקובץ /.gemrc, מריצים את הפקודה:

gem install GEM_NAME

אימות בקשות לשליחת התראות פוש

אפשר לאמת בקשת push בשורת הפקודה של Google Cloud CLI או לעדכן את קובץ פרטי הכניסה.

אימות בקשות push בשורת הפקודה

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

export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY

כאשר:

  • ‫GEM_NAME הוא שם ה-Gem שעבורו מוגשת הבקשה.
  • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  • ‫PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
  • ‫REPOSITORY הוא המזהה של המאגר.

אימות בקשות push בקובץ פרטי כניסה

כלי שורת הפקודה gem משתמש בקובץ ~/.gem/credentials כדי לאחסן מפתחות API לשליחה ולמשיכה של חבילות gem. כדי להגדיר את קובץ פרטי הכניסה לאימות למקורות בבקשות push, מבצעים את הפעולות הבאות:

  1. מעדכנים את קובץ פרטי הכניסה:

    1. פותחים את ~/.gem/credentials ומוסיפים שורה למאגר. המפתח הוא כתובת ה-URL של המאגר, והערך הוא Bearer, ואחריו האסימון שלכם:

      :rubygems_api_key: RUBYGEMS_ORG_KEY
      https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer ACCESS_TOKEN
      

      כאשר:

      • ‫RUBYGEMS_ORG_KEY הוא מפתח ה-API של RubyGems.org.
      • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
      • ‫PROJECT הוא מזהה הפרויקט שמכיל את המאגר.
      • ‫REPOSITORY הוא המזהה של המאגר.
      • ‫ACCESS_TOKEN הוא אסימון הגישה שלכם מסוג OAuth2.
    2. דוחפים את האבן. שימו לב שלא צריך להגדיר את GEM_HOST_API_KEY, כי כבר הגדרתם את המפתח בקובץ פרטי הכניסה.

      gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
      

אימות באמצעות Bundler

‫Bundler של Ruby מנהל את יחסי התלות של האפליקציה בכמה gems. כדי להגדיר את Bundler:

  1. מוסיפים את כתובת המאגר כ-source בקובץ ה-gemfile:

    # Gemfile
    # <...>
    source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    
  2. מבצעים אימות למאגר באמצעות bundle config:

    export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
    bundle config $HOST $GEM_TOKEN
    

כאשר:

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

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

מידע נוסף על הגדרת Bundler זמין במאמר Gemfiles במסמכי התיעוד של bundler.io.

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