Hashicorp Vault

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

מידע נוסף על Vault זמין במסמכי התיעוד של Hashicorp Vault.

דרישות מוקדמות

כדי לאסוף נתוני טלמטריה של Vault, צריך להתקין את סוכן התפעול:

  • כדי להשתמש במדדים, צריך להתקין את גרסה 2.18.2 ואילך.
  • כדי לראות את היומנים, צריך להתקין את גרסה 2.18.1 ואילך.

השילוב הזה תומך ב-Vault גרסה 1.6 ומעלה.

הגדרת מופע Vault

כדי לאסוף נתוני טלמטריה ממופע Vault, צריך להגדיר את השדה prometheus_retention_time לערך שאינו אפס בקובץ התצורה של Vault בפורמט HCL או JSON.

Full configuration options can be found at https://www.vaultproject.io/docs/configuration
telemetry {
  prometheus_retention_time = "10m"
  disable_hostname = false
}

בנוסף, נדרש משתמש עם גישת Root כדי להפעיל איסוף של יומני ביקורת וכדי ליצור מדיניות ACL של מדדי Prometheus. משתמשים בטוקן הבסיסי כדי להוסיף מדיניות עם יכולות קריאה לנקודת הקצה /sys/metrics. המדיניות הזו משמשת ליצירת אסימון Vault עם הרשאה מספקת לאיסוף מדדי Vault.

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

export VAULT_ADDR=http://localhost:8200
# Create simple Vault initialization with 1 key share and a key threshold of 1.
vault operator init -key-shares=1 -key-threshold=1 | head -n3 | cat > .vault-init
VAULT_KEY=$(grep 'Unseal Key 1'  .vault-init | awk '{print $NF}')
VAULT_TOKEN=$(grep 'Initial Root Token:' .vault-init | awk '{print $NF}')
export VAULT_TOKEN
vault operator unseal $VAULT_KEY

# Enable audit logs.
vault audit enable file file_path=/var/log/vault_audit.log

# Create Prometheus ACL policy to access metrics endpoint.
vault policy write prometheus-metrics - << EOF
path "/sys/metrics" {
  capabilities = ["read"]
}
EOF

# Create an example token with the prometheus-metrics policy to access Vault metrics.
# This token is used as `$VAULT_TOKEN` in your Ops Agent configuration for Vault.
vault token create -field=token -policy prometheus-metrics > prometheus-token

הגדרת סוכן התפעול ל-Vault

פועלים לפי המדריך בנושא הגדרת Ops Agent, מוסיפים את הרכיבים הנדרשים לאיסוף טלמטריה ממופעי Vault ומפעילים מחדש את הסוכן.

הגדרה לדוגמה

הפקודות הבאות יוצרות את ההגדרה לאיסוף ולעיבוד של נתוני טלמטריה עבור Vault:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Create a Vault token that has read capabilities to /sys/metrics policy.
# For more information see: https://developer.hashicorp.com/vault/tutorials/monitoring/monitor-telemetry-grafana-prometheus?in=vault%2Fmonitoring#define-prometheus-acl-policy
VAULT_TOKEN=$(cat prometheus-token)


sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    vault:
      type: vault
      token: $VAULT_TOKEN
      endpoint: 127.0.0.1:8200
  service:
    pipelines:
      vault:
        receivers:
          - vault
logging:
  receivers:
    vault_audit:
      type: vault_audit
      include_paths: [/var/log/vault_audit.log]
  service:
    pipelines:
      vault:
        receivers:
          - vault_audit
EOF

כדי שהשינויים האלה ייכנסו לתוקף, צריך להפעיל מחדש את Ops Agent:

Linux

  1. כדי להפעיל מחדש את הסוכן, מריצים את הפקודה הבאה במופע:
    sudo systemctl restart google-cloud-ops-agent
    
  2. כדי לוודא שהסוכן הופעל מחדש, מריצים את הפקודה הבאה ומוודאים שהרכיבים Metrics Agent ו-Logging Agent הופעלו:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. מתחברים למופע באמצעות RDP או כלי דומה ומתחברים ל-Windows.
  2. פותחים טרמינל ב-PowerShell עם הרשאות אדמין על ידי לחיצה ימנית על סמל PowerShell ובחירה באפשרות הפעלה כמנהל מערכת.
  3. כדי להפעיל מחדש את הסוכן, מריצים את פקודת PowerShell הבאה:
    Restart-Service google-cloud-ops-agent -Force
    
  4. כדי לוודא שהסוכן הופעל מחדש, מריצים את הפקודה הבאה ומוודאים שהרכיבים Metrics Agent ו-Logging Agent הופעלו:
    Get-Service google-cloud-ops-agent*
    

הגדרת איסוף יומנים

כדי להטמיע יומנים מ-Vault, צריך ליצור מקלט ליומנים ש-Vault מייצר, ואז ליצור צינור למקלט החדש.

כדי להגדיר מקלט ליומני vault_audit, מציינים את השדות הבאים:

שדה ברירת מחדל תיאור
exclude_paths רשימה של תבניות של נתיבים במערכת הקבצים שצריך להחריג מהקבוצה שתואמת ל-include_paths.
include_paths רשימה של נתיבי מערכת קבצים לקריאה על ידי מעקב אחרי כל קובץ. אפשר להשתמש בתו כללי לחיפוש (*) בנתיבים.
record_log_file_path false אם הערך הוא true, הנתיב לקובץ הספציפי שממנו נרשם רשומת היומן מופיע ברשומת היומן של הפלט כערך של התווית agent.googleapis.com/log_file_path. כשמשתמשים בתו כללי, מתועד רק הנתיב של הקובץ שממנו התקבל הרשומה.
type הערך חייב להיות vault_audit.
wildcard_refresh_interval 60s המרווח שבו נתיבי קבצים עם תו כללי ב-include_paths מתרעננים. הערך הוא משך זמן, לדוגמה 30s או 2m. הנכס הזה יכול להיות שימושי כשקצב העברת הנתונים של הרישום ביומן גבוה, והקבצים ביומן מתחלפים מהר יותר מהמרווח שמוגדר כברירת מחדל.

מה נרשם ביומן

הערך של logName נגזר ממזהי המקלט שצוינו בהגדרה. אלה השדות המפורטים בתוך LogEntry:

יומני vault_audit מכילים את השדות הבאים ב-LogEntry:

שדה סוג תיאור
jsonPayload.auth struct
jsonPayload.auth.accessor מחרוזת זהו HMAC של אמצעי הגישה לאסימון הלקוח.
jsonPayload.auth.client_token מחרוזת זהו HMAC של מזהה הטוקן של הלקוח.
jsonPayload.auth.display_name מחרוזת זהו השם המוצג שמוגדר על ידי התפקיד של שיטת האימות או באופן מפורש בזמן יצירת הסוד.
jsonPayload.auth.entity_id מחרוזת זהו מזהה של ישות מסוג token.
jsonPayload.auth.metadata אובייקט השדה הזה יכיל רשימה של צמדי מפתח/ערך של מטא-נתונים שמשויכים ל-client_token.
jsonPayload.auth.policies אובייקט התגובה תכיל רשימה של מדיניות שמשויכת ל-client_token.
jsonPayload.auth.token_type מחרוזת
jsonPayload.error מחרוזת אם אירעה שגיאה בבקשה, הודעת השגיאה תופיע בערך של השדה הזה.
jsonPayload.request struct
jsonPayload.request.client_token מחרוזת זהו HMAC של מזהה הטוקן של הלקוח.
jsonPayload.request.client_token_accessor מחרוזת זהו HMAC של אמצעי הגישה לאסימון הלקוח.
jsonPayload.request.data אובייקט אובייקט הנתונים יכיל נתונים סודיים בצמדי מפתח/ערך.
jsonPayload.request.headers אובייקט כותרות HTTP נוספות שצוינו על ידי הלקוח כחלק מהבקשה.
jsonPayload.request.id מחרוזת זהו מזהה הבקשה הייחודי.
jsonPayload.request.namespace.id מחרוזת
jsonPayload.request.operation מחרוזת זהו סוג הפעולה שמתאים ליכולות הנתיב, והוא צריך להיות אחד מהערכים הבאים: create, ‏ read, ‏ update, ‏ delete או list.
jsonPayload.request.path מחרוזת נתיב Vault לפעולה המבוקשת.
jsonPayload.request.policy_override בוליאני הערך הזה הוא true אם נשלחה בקשה לביטול מדיניות שהיא חובה רכה.
jsonPayload.request.remote_address מחרוזת כתובת ה-IP של הלקוח ששולח את הבקשה.
jsonPayload.request.wrap_ttl מחרוזת אם האסימון עטוף, מוצג כאן ערך ה-TTL העטוף שהוגדר כמחרוזת מספרית.
jsonPayload.response struct
jsonPayload.response.data.accessor מחרוזת זהו HMAC של אמצעי הגישה לאסימון הלקוח.
jsonPayload.response.data.creation_time מחרוזת חותמת הזמן של יצירת האסימון בפורמט RFC 3339.
jsonPayload.response.data.creation_ttl מחרוזת משך הזמן לתפוגה (TTL) של יצירת הטוקן בשניות.
jsonPayload.response.data.display_name מחרוזת זהו השם המוצג שמוגדר על ידי התפקיד של שיטת האימות או באופן מפורש בזמן יצירת הסוד.
jsonPayload.response.data.entity_id מחרוזת זהו מזהה של ישות מסוג token.
jsonPayload.response.data.expire_time מחרוזת חותמת זמן בפורמט RFC 3339 שמייצגת את הרגע שבו התוקף של האסימון יפוג.
jsonPayload.response.data.explicit_max_ttl מחרוזת ערך TTL מקסימלי מפורש של אסימון בשניות ("0" אם לא מוגדר).
jsonPayload.response.data.id מחרוזת המזהה הייחודי של התגובה.
jsonPayload.response.data.issue_time מחרוזת חותמת זמן בפורמט RFC 3339.
jsonPayload.response.data.num_uses מספר אם האסימון מוגבל למספר שימושים, הערך הזה יופיע כאן.
jsonPayload.response.data.orphan בוליאני ערך בוליאני שמייצג אם האסימון הוא יתום.
jsonPayload.response.data.path מחרוזת נתיב Vault לפעולה המבוקשת.
jsonPayload.response.data.policies אובייקט התגובה תכיל רשימה של מדיניות שמשויכת ל-client_token.
jsonPayload.response.data.renewable בוליאני ערך בוליאני שמייצג אם האסימון הוא יתום.
jsonPayload.type מחרוזת סוג יומן הביקורת.
severity מחרוזת (LogSeverity) רמת רשומת היומן (מתורגמת).

הגדרת איסוף מדדים

כדי להטמיע מדדים מ-Vault, צריך ליצור מקלט למדדים ש-Vault מייצר, ואז ליצור צינור למקלט החדש.

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

כדי להגדיר נמען למדדים של vault, צריך לציין את השדות הבאים:

שדה ברירת מחדל תיאור
ca_file הנתיב לאישור CA. הלקוח מאמת את אישור השרת. אם העמודה ריקה, הנמען משתמש ב-CA הבסיסי של המערכת.
cert_file נתיב לאישור TLS לשימוש בחיבורים שנדרש בהם mTLS.
collection_interval 60s ערך של משך זמן, כמו 30s או 5m.
endpoint localhost:8200 הערך 'שם המארח:יציאה' שבו נעשה שימוש ב-Vault.
insecure true ההגדרה קובעת אם להשתמש בחיבור TLS מאובטח. אם המדיניות מוגדרת לערך false, פרוטוקול TLS מופעל.
insecure_skip_verify false ההגדרה קובעת אם לדלג על אימות האישור או לא. אם insecure מוגדר כ-true, הערך insecure_skip_verify לא נמצא בשימוש.
key_file הנתיב למפתח ה-TLS שבו יש להשתמש לחיבורים שנדרש בהם mTLS.
metrics_path /v1/sys/metrics הנתיב לאיסוף מדדים.
token localhost:8200 טוקן שמשמש לאימות.
type הערך חייב להיות vault.

מה נבדק

בטבלה הבאה מפורטים המדדים שסוכן התפעול אוסף ממופע Vault.

סוג המדד 
סוג, סוג
משאבים במעקב
תוויות
workload.googleapis.com/vault.audit.request.failed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/vault.audit.response.failed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/vault.core.leader.duration
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.core.request.count
GAUGEINT64
gce_instance
cluster
workload.googleapis.com/vault.memory.usage
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.storage.operation.delete.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.delete.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.token.count
GAUGEINT64
gce_instance
cluster
namespace
workload.googleapis.com/vault.token.lease.count
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.renew.time
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.revoke.time
GAUGEINT64
gce_instance
 

אימות ההגדרה

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

כדי לוודא שהיומנים של Vault נשלחים אל Cloud Logging, מבצעים את הפעולות הבאות:

  1. במסוף Google Cloud , נכנסים לדף Logs Explorer:

    כניסה אל Logs Explorer

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

  2. מזינים את השאילתה הבאה בעורך ולוחצים על Run query:
    resource.type="gce_instance"
    log_id("vault_audit")
    

כדי לוודא שהמדדים של Vault נשלחים ל-Cloud Monitoring:

  1. במסוף Google Cloud , עוברים לדף  Metrics explorer:

    כניסה אל Metrics Explorer

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. בסרגל הכלים של חלונית הכלי ליצירת שאילתות, לוחצים על הלחצן ששמו הוא  MQL או  PromQL.
  3. מוודאים שהאפשרות PromQL נבחרה במתג שפה. המתג לשפה נמצא באותו סרגל כלים שבו אפשר לעצב את השאילתה.
  4. מזינים את השאילתה הבאה בעורך ולוחצים על Run query:
    {"workload.googleapis.com/vault.memory.usage", monitored_resource="gce_instance"}
    

צפייה בלוח הבקרה

כדי לראות את המדדים של Vault, צריך להגדיר תרשים או לוח בקרה. השילוב של Vault כולל לוח בקרה אחד או יותר. כל לוחות הבקרה מותקנים אוטומטית אחרי שמגדירים את השילוב וסוכן Ops מתחיל לאסוף נתונים של מדדים.

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

כדי לראות מרכז בקרה שהותקן:

  1. במסוף Google Cloud , עוברים לדף  Dashboards:

    מעבר אל מרכזי בקרה

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

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

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

כדי לראות תצוגה מקדימה סטטית של מרכז הבקרה:

  1. נכנסים לדף  Integrations במסוף Google Cloud :

    עוברים אל Integrations

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. לוחצים על המסנן Compute Engine של פלטפורמת הפריסה.
  3. מאתרים את הרשומה של Vault ולוחצים על הצגת פרטים.
  4. לוחצים על הכרטיסייה מרכזי בקרה כדי לראות תצוגה מקדימה סטטית. אם מרכז הבקרה מותקן, אפשר ללחוץ על View dashboard (הצגת מרכז הבקרה) כדי לעבור אליו.

מידע נוסף על מרכזי בקרה ב-Cloud Monitoring זמין במאמר בנושא מרכזי בקרה וטבלאות.

מידע נוסף על השימוש בדף Integrations (שילובים) זמין במאמר ניהול שילובים.

התקנה של כללי מדיניות התראות

מדיניות התראות מורה ל-Cloud Monitoring לשלוח לכם התראה כשמתרחשים תנאים מסוימים. השילוב של Vault כולל מדיניות התראות אחת או יותר שתוכלו להשתמש בהן. אפשר לראות ולהתקין את מדיניות ההתראות הזו בדף שילובים ב-Monitoring.

כדי לראות את התיאורים של כללי מדיניות ההתראות הזמינים ולהתקין אותם:

  1. נכנסים לדף  Integrations במסוף Google Cloud :

    עוברים אל Integrations

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. מאתרים את הערך של Vault ולוחצים על הצגת פרטים.
  3. לוחצים על הכרטיסייה התראות. בכרטיסייה הזו מופיעים תיאורים של מדיניות ההתראות הזמינה וממשק להתקנתן.
  4. התקנה של כללי מדיניות התראות. כדי שמדיניות ההתראות תדע לאן לשלוח התראות על הפעלה של התראה, היא צריכה לקבל מכם מידע להתקנה. כדי להתקין מדיניות התראות:
    1. ברשימת מדיניות ההתראות הזמינה, בוחרים את אלה שרוצים להתקין.
    2. בקטע הגדרת התראות, בוחרים ערוץ התראות אחד או יותר. יש לכם אפשרות להשבית את השימוש בערוצי התראות, אבל אם תעשו את זה, מדיניות ההתראות שלכם תופעל ללא התראות. אפשר לבדוק את הסטטוס שלהם בדף 'מעקב', אבל לא תקבלו התראות.

      מידע נוסף על ערוצי התראות זמין במאמר בנושא ניהול ערוצי התראות.

    3. לוחצים על יצירת מדיניות.

למידע נוסף על מדיניות התראות ב-Cloud Monitoring, אפשר לעיין במאמר מבוא להתראות.

מידע נוסף על השימוש בדף Integrations (שילובים) זמין במאמר ניהול שילובים.

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

בסרטון Install the Ops Agent to troubleshoot third-party applications מוסבר איך להשתמש ב-Ansible כדי להתקין את סוכן התפעול, להגדיר אפליקציית צד שלישי ולהתקין לוח בקרה לדוגמה.