ניהול נתונים רגישים, כגון סיסמאות, מפתחות API ותעודות אבטחה, הוא אחד האתגרים הגדולים ביותר בניהול מערכות מידע. שמירה על נתונים אלו בצורה מאובטחת והנגשתם רק למי שצריך היא קריטית למניעת פרצות אבטחה. HashiCorp Vault הוא כלי עוצמתי לניהול נתונים רגישים (Secrets Management) המאפשר אחסון, גישה וניהול מאובטחים של נתונים רגישים בסביבות מורכבות. במאמר זה נלמד כיצד להשתמש ב-Vault לניהול נתונים רגישים, כולל דוגמאות מעשיות ושימושים מתקדמים.
התקנה והגדרת Vault
HashiCorp Vault הוא כלי מבוזר שניתן להתקנה על מערכות הפעלה שונות, כולל לינוקס, macOS ו-Windows. Vault פועל בתצורה של שרת-לקוח, כאשר השרת מנהל את הנתונים והלקוחות מבצעים קריאות לשרת לצורך אחזור ועדכון נתונים.
כדי להתחיל להשתמש ב-Vault, יש להתקין את הכלי. להלן הוראות ההתקנה עבור מערכת לינוקס:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vault
לאחר ההתקנה, ניתן להפעיל את Vault במצב פיתוח (Development Mode) לצורך ניסוי ובדיקה:
vault server -dev
מצב הפיתוח מפעיל את Vault עם תצורה מינימלית, מה שמאפשר לכם לבדוק את הפונקציות הבסיסיות של הכלי בסביבה בטוחה. עם זאת, למטרות ייצור, יש להגדיר את Vault בצורה מאובטחת יותר.
תצורה ראשונית של Vault
לאחר הפעלת השרת, ניתן להגדיר את Vault. השלב הראשון בתהליך זה הוא אתחול (Initialization). תהליך זה יוצר את קבצי הקונפיגורציה הראשוניים של Vault, כולל מפתחות פענוח ותעודת גישה ראשונית (Root Token).
להלן דוגמה לאתחול Vault:
vault operator init
הפקודה הזו תייצר מספר מפתחות פענוח ואת תעודת הגישה הראשונית. חשוב לשמור את המפתחות הללו במקום מאובטח, שכן הם נחוצים להפעלת Vault מחדש במידה ויופסק.
כדי לאפשר גישה ל-Vault, יש לבצע את תהליך הביטול נעילה (Unseal) באמצעות מפתחות הפענוח:
vault operator unseal
vault operator unseal
vault operator unseal
לאחר ביטול הנעילה, ניתן לגשת ל-Vault באמצעות תעודת הגישה הראשונית (Root Token) שנוצרה במהלך האתחול:
vault login
כעת, Vault מוכן לשימוש ואתם יכולים להתחיל לנהל נתונים רגישים בצורה מאובטחת.
ניהול נתונים רגישים עם Vault
Vault מאפשר אחסון וניהול של נתונים רגישים באמצעות מנגנון שנקרא Secrets Engines. מנגנונים אלו תומכים בסוגים שונים של נתונים, כגון סיסמאות, תעודות, מפתחות API, ועוד. במאמר זה נתמקד בשימוש במנוע KV (Key-Value), אחד מהמנועים הנפוצים ביותר ב-Vault.
להלן דוגמה לשימוש במנוע KV לאחסון סיסמאות:
תחילה, יש להפעיל את מנוע ה-KV:
vault secrets enable -path=secret kv
לאחר הפעלת המנוע, ניתן להוסיף נתונים רגישים:
vault kv put secret/db_password password="myS3cureP@ssw0rd"
בדוגמה זו, שמרנו סיסמא במסלול secret/db_password
. ניתן לגשת לסיסמא זו בכל עת באמצעות הפקודה הבאה:
vault kv get secret/db_password
Vault מצפין את הנתונים הללו לפני שמירתם, ומבטיח שרק משתמשים מורשים יכולים לגשת אליהם.
ניהול גישה ובקרת הרשאות
אחד המרכיבים החשובים ביותר ב-Vault הוא ניהול גישה ובקרת הרשאות (Access Control). Vault מאפשר להגדיר מדיניות גישה (Policies) שמגבילות את הגישה לנתונים על פי תפקידים (Roles) או משתמשים מסוימים.
לדוגמה, ניתן להגדיר מדיניות גישה שתאפשר רק למשתמשים מסוימים לקרוא סיסמאות מהסוד secret/db_password
:
path "secret/db_password" {
capabilities = ["read"]
}
ניתן להחיל מדיניות זו על משתמשים או תפקידים מסוימים:
vault policy write db_read_policy db_read_policy.hcl
כעת, תוכלו להקצות את המדיניות למשתמשים או תפקידים באמצעות הפקודה vault auth
.
אינטגרציה עם כלי DevOps אחרים
Vault משולב היטב עם מגוון כלים נוספים בעולם ה-DevOps, כגון Terraform, Kubernetes, ו-Ansible. אינטגרציה זו מאפשרת ניהול מאובטח של נתונים רגישים כחלק מהתהליכים האוטומטיים שלכם.
לדוגמה, ניתן להשתמש ב-Vault לאחסון ואחזור של סודות בתוך קבצי Terraform:
provider "vault" {
address = "http://127.0.0.1:8200"
}
data "vault_generic_secret" "db_password" {
path = "secret/db_password"
}
resource "aws_db_instance" "example" {
allocated_storage = 10
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.micro"
name = "exampledb"
username = "admin"
password = data.vault_generic_secret.db_password.data["password"]
}
בדוגמה זו, Terraform משתמש ב-Vault כדי לאחזר את סיסמת מסד הנתונים ולהגדיר את ה-DB Instance ב-AWS בצורה מאובטחת.
שימוש ב-Dynamic Secrets
Vault מציע גם את היכולת ליצור סודות דינמיים (Dynamic Secrets), שהם נתונים רגישים הנוצרים בזמן אמת ומוחזרים למשתמשים על פי בקשה. סודות אלו יכולים להיות מפתחות גישה, אישורים או נתונים אחרים הנדרשים לזמן מוגבל.
לדוגמה, ניתן ליצור משתמש זמני במסד נתונים עם גישה לזמן מוגבל:
vault secrets enable database
vault write database/config/my-database \
plugin_name=mysql-database-plugin \
connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \
allowed_roles="my-role" \
username="admin" \
password="admin"
vault write database/roles/my-role \
db_name=my-database \
creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT ON *.* TO '{{name}}'@'%';" \
default_ttl="1h" \
max_ttl="24h"
בפקודות אלו, הגדרנו את Vault כך שייצור משתמשי MySQL זמניים עם גישה מוגבלת לזמן קצוב. משתמשים יכולים לבקש מ-Vault את פרטי ההתחברות הזמניים ולמחוק אותם כאשר אינם נדרשים יותר.
שימוש ב-Vault עם Kubernetes
אינטגרציה בין Vault ל-Kubernetes מאפשרת לנהל סודות בצורה מאובטחת בתוך קלאסטר Kubernetes. ניתן להשתמש ב-Vault לאחזור סודות בצורה דינמית בתוך פודים (Pods), ולשפר את רמת האבטחה של האפליקציות שרצות בקלאסטר.
כדי להשתמש ב-Vault עם Kubernetes, יש להגדיר את מנגנון האימות של Kubernetes ב-Vault ולאפשר גישה לפודים בהתאם למדיניות האבטחה שהוגדרה. להלן דוגמה לאינטגרציה בסיסית:
vault auth enable kubernetes
vault write auth/kubernetes/config \
token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
kubernetes_ca_cert="@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
לאחר הגדרת האינטגרציה, תוכלו להשתמש ב-Vault לניהול סודות בצורה מאובטחת עבור האפליקציות שרצות ב-Kubernetes, ולהבטיח שרק הפודים המורשים יקבלו גישה לסודות.
סיכום
Vault הוא כלי חזק וגמיש לניהול נתונים רגישים במערכות מורכבות. בעזרת Vault, ניתן לאחסן ולהגן על סודות בצורה מאובטחת, לנהל גישה למשתמשים ולתפקידים, ולאחזר נתונים רגישים בצורה דינמית. אינטגרציה עם כלים נוספים כגון Terraform, Kubernetes ו-Ansible הופכת את Vault לחלק בלתי נפרד מתהליכי DevOps מאובטחים. בעזרת הכלים והדוגמאות שנסקרו במאמר זה, תוכלו להתחיל להשתמש ב-Vault בצורה אפקטיבית לשיפור אבטחת המידע בארגון שלכם.
אם אתם מעוניינים ללמוד בצורה מעמיקה יותר אתם מוזמנים להתייעץ איתנו על קורס DevOps.