ניהול סודות בתצורה של OpenTelemetry Collector שנוצר על ידי Google

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

החל מגרסה 0.126.0 של Google-built Collector, אתם יכולים להשתמש בספק OpenTelemetry שמשולב עם Secret Manager כדי להסיר סודות בטקסט פשוט מקובצי התצורה.

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

ספק googlesecretmanager ממפה מזהים של Secret Manager לסודות, כמו סיסמאות, טוקנים ומפתחות API, ששמרתם ב-Secret Manager. היתרונות של שימוש בספק googlesecretmanager:

  • אבטחה משופרת: קובצי התצורה לא מכילים מידע רגיש כמו סיסמאות. הסודות עצמם מאוחסנים ב-Secret Manager, שירות שנועד במיוחד לאחסון, לגישה ולניהול של נתונים רגישים בצורה מאובטחת.
  • הפחתת הסיכון לחשיפה: Secret Manager מאחזר סודות במהלך האתחול של Google-Built OpenTelemetry Collector, וכך מונע תיעוד של סודות בטקסט פשוט ביומנים בטעות.

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

כדי להשתמש בספק googlesecretmanager, צריך להפעיל את Secret Manager API ולאפשר גישה ל-API, כמו שמתואר בשלבים הבאים:

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

    gcloud init

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

  2. מגדירים את פרויקט ברירת המחדל ל-Google Cloud CLI:

    gcloud config set project PROJECT_ID
    

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

  3. מפעילים את Secret Manager API, אם הוא עדיין לא מופעל:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable secretmanager.googleapis.com
  4. מעדכנים את היקפי הגישה של OAuth למופע כך שיכללו את ההיקף הנדרש ל-Secret Manager‏, https://www.googleapis.com/auth/cloud-platform:
    gcloud compute instances set-service-account "INSTANCE_ID" \
      --service-account "SERVICE_ACCT_EMAIL" \
      --scopes "https://www.googleapis.com/auth/cloud-platform"
    

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

    • ‫INSTANCE_ID: המזהה של המכונה הווירטואלית.
    • SERVICE_ACCT_EMAIL: הכתובת של חשבון השירות שמשויך למכונה הווירטואלית.

    מידע נוסף מופיע במאמר בנושא גישה ל-Secret Manager API.

  5. צריך להעניק למשתמש שמנהל את ההגדרות של Google-Built OpenTelemetry Collector את ההרשאות הנדרשות ליצירה ולניהול של סודות. התפקיד roles/secretManager.secretAdmin במערכת לניהול הזהויות והרשאות הגישה (IAM) כולל את ההרשאות הנדרשות:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

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

    • ‫PROJECT_ID: המזהה של הפרויקט ב- Google Cloud .
    • ‫USER_EMAIL: הכתובת של המשתמש שמקבל את התפקיד.
  6. נותנים לחשבון השירות שמשויך למכונה הווירטואלית את ההרשאות שנדרשות כדי לגשת לסודות. התפקיד roles/secretManager.secretAccessor במערכת לניהול הזהויות והרשאות הגישה (IAM) כולל את ההרשאות הנדרשות:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

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

    • ‫PROJECT_ID: המזהה של הפרויקט ב- Google Cloud .
    • ‫SERVICE_ACCT_EMAIL: הכתובת של חשבון השירות שמשויך ל-VM.

החלפת סודות בטקסט פשוט בסודות מנוהלים

כדי להפסיק להשתמש בסודות בטקסט פשוט בקובצי התצורה באמצעות Secret Manager וספק googlesecretmanager, צריך לבצע את הפעולות הבאות:

  1. יוצרים סוד ב-Secret Manager לכל סוד בטקסט גלוי בקובצי התצורה.
  2. מחליפים כל סוד בטקסט פשוט בקובצי התצורה בהפניה לסוד התואם ב-Secret Manager.

לדוגמה, אם אתם משתמשים בייצוא של http, קובץ התצורה יכול לכלול רשומה כמו זו:

exporters:
  logging:
    loglevel: debug
  http:
    endpoint: "https://example.com/api/metrics"
    headers:
      X-API-Key: plaintext-secret

בדוגמה הזו, רוצים להציב את המחרוזת plaintext-secret ב-Secret Manager ואז להחליף את הסוד בטקסט גלוי בהפניה לסוד המנוהל.

יצירת סודות ב-Secret Manager לסודות בטקסט פשוט

כדי ליצור סוד ב-Secret Manager שמכיל את הסוד בטקסט גלוי plaintext-secret, מריצים את הפקודה הבאה:
echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
    --replication-policy="automatic" \
    --data-file=-

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

  • ‫plaintext-secret: מחליפים את המיקום הזה בסוד בטקסט פשוט.
  • ‫SECRET_NAME: מחליפים בשם משמעותי לסוד.

הפורמט של השם המלא של המשאב של הסוד החדש הוא: VERSION עם 1.

projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

למידע נוסף על אחסון, ניהול גרסאות וגישה לסודות ב-Secret Manager, ראו יצירת סוד.

החלפת סודות בטקסט פשוט

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

exporters:
  logging:
    loglevel: debug
  http:
    endpoint: "https://example.com/api/metrics"
    headers:
      X-API-Key: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}

מידע נוסף

מידע נוסף על השימוש בספק googlesecretmanager זמין ב מאגר opentelemetry-collector-contrib.