AWS Secrets Manager: הגדרה וניהול סודות אוטומטי
אנו מתחברים ל-AWS Secrets Manager לאחסון מאובטח, רוטציה אוטומטית וביקורת של סודות יישומיים. פתרון מפתח-ביד: מתכנון סכמה ועד תיעוד והדרכת צוות. הגדרת אינטגרציה בסיסית אורכת עד יום אחד, רוטציה מותאמת אישית עד 3 ימים. המהנדסים שלנו מחזיקים בהסמכות AWS Professional ויש להם 50+ פרויקטים של העברת סודות מ-Parameter Store ו-Vault.
אישורים קשיחים בקוד הם תקלות אמיתיות: מפתח AWS במאגר GitHub ציבורי חי פחות משתי דקות לפני ניצול ראשון. משתני סביבה בהגדרת משימת ECS גלויים לכל מי שיש לו גישה לקונסולה. Secrets Manager פותר זאת באופן מרכזי: אחסון, רוטציה, ביקורת — הכל דרך שירות אחד עם אינטגרציית IAM. אנו מבטיחים SLA של 99.9% לסודות קריטיים ומפחיתים עלויות תקלות ב-40% באמצעות ניטור פרואקטיבי.
Secrets Manager מאובטח פי 3 מפתרון מותאם אישית על Parameter Store + Lambda בזכות רוטציה מובנית וביקורת מלאה. הטבלה שלהלן משווה ביניהם.
| פרמטר | AWS Secrets Manager | Parameter Store + Lambda |
|---|---|---|
| רוטציה מובנית | כן | לא (דורש Lambda) |
| ביקורת גישה | CloudTrail על כל GetSecretValue | CloudTrail רק ברמת SSM |
| שמות | נתיב/קידומת חופשיים | מבנה היררכי /aws/... |
| תגיות | חובה (סינון, הקצאת עלויות) | אופציונלי |
| מחיר | $0.40 לכל סוד/חודש | $0.05 לכל פרמטר/חודש + $0.001 לכל קריאת GetParameter |
למה להשתמש ב-AWS Secrets Manager לניהול סודות?
Secrets Manager פותר ניהול סודות מרכזי במאמץ מינימלי. הוא תומך ברוטציה אוטומטית עבור RDS, Aurora, DocumentDB ושירותים אחרים. תגיות מאפשרות הקצאת עלויות ומדיניות משאבים. ביקורת מלאה דרך CloudTrail — כל קריאת GetSecretValue מתועדת. המהנדסים שלנו מגדירים התראות על כמויות קריאות חריגות, ומפחיתים את סיכון הדליפה.
מבנה סוד ושמות
Secrets Manager מאחסן סוד כזוג מפתח-ערך או JSON חופשי. עבור אישורי מסד נתונים, הפורמט הסטנדרטי:
{
"username": "app_user",
"password": "...",
"host": "aurora-cluster.cluster-xyz.eu-west-1.rds.amazonaws.com",
"port": 5432,
"dbname": "production"
}מתן שמות לסודות חשוב יותר ממה שנדמה. הסכמה { "username": "app_user", "password": "...", "host": "aurora-cluster.cluster-xyz.eu-west-1.rds.amazonaws.com", "port": 5432, "dbname": "production" } מתאימה היטב: {env}/{service}/{type}, prod/payments-api/db-credentials. מדיניות מבוססת משאבים ב-IAM יכולה להעניק גישה לפי קידומת: staging/auth-service/jwt-secret — השירות רואה רק את הסודות שלו.
תגיות הן חובה: arn:aws:secretsmanager:*:*:secret:prod/payments-api/*, Environment: production, Service: payments-api. זה מאפשר סינון סודות, בניית הקצאת עלויות והגדרת מדיניות משאבים באמצעות תנאי תגיות.
איך פועלת רוטציה אוטומטית?
רוטציה של סוד ב-Secrets Manager היא לא רק "שינוי סיסמה". זו פונקציית Lambda ש:
- יוצרת סיסמה חדשה במסד הנתונים (כתיבה כפולה — הסיסמה הישנה עדיין עובדת)
- מעדכנת את הסוד ב-Secrets Manager
- בודקת את הסיסמה החדשה
- מסירה את הסיסמה הישנה ממסד הנתונים
AWS מספקת רוטציית Lambda מנוהלת עבור RDS (MySQL, PostgreSQL), Aurora, Redshift, DocumentDB. עבור שירותים אלה, הרוטציה מוגדרת בפקודה אחת דרך הקונסולה או Owner: backend-team.
עבור סודות מותאמים אישית (מפתחות API של צד שלישי), אנו כותבים Lambda ידנית. תבנית זמינה ב-aws secretsmanager rotate-secret. הפונקציה מיישמת 4 שלבים: aws-samples/aws-secrets-manager-rotation-lambdas, createSecret, setSecret, testSecret.
לוח זמנים לרוטציה: finishSecret — דרך EventBridge. חשוב: בהפעלה ראשונה, הרוטציה רצה מיד. אם היישום שומר אישורים במטמון ללא מנגנון עדכון, לאחר הרוטציה הראשונה הוא יתחיל לקבל rate(30 days). המהנדסים שלנו מיישמים תקופת חסד של 24 שעות לפני מחיקת הסיסמה הישנה.
אינטגרציה עם יישומים ללא הפעלה מחדש
היישום חייב להיות מסוגל לרענן אישורים ללא הפעלה מחדש. שני דפוסים:
סטנדרטי: קריאת הסוד בעת ההפעלה, שמירה במטמון בזיכרון, בעת Authentication failed ממסד הנתונים — כפיית קריאה חוזרת של הסוד וחיבור מחדש. ל-SDK של AWS Secrets Manager יש לקוח מטמון מובנה:
import boto3
from aws_secretsmanager_caching import SecretCache
client = boto3.client('secretsmanager')
cache = SecretCache(client=client)
secret = cache.get_secret_string('prod/payments-api/db-credentials')המטמון מתבטל כברירת מחדל לאחר שעה — מספיק לרוב תרחישי הרוטציה.
דרך פרמטרי ECS/Kubernetes: בעת הפעלת קונטיינר, אישורים מוזרקים כמשתני סביבה מ-Secrets Manager. זה פשוט יותר ליישומים מדור קודם, אך רוטציה דורשת הפעלה מחדש של הקונטיינר. אנו משתמשים ב-AuthenticationError בגרסאות ECS חדשות יותר.
מדיניות IAM: עקרון ההרשאות המינימליות
פונקציית Lambda של היישום צריכה לקבל הרשאה לקרוא רק סודות ספציפיים:
{
"Effect": "Allow",
"Action": ["secretsmanager:GetSecretValue"],
"Resource": "arn:aws:secretsmanager:eu-west-1:123456789:secret:prod/payments-api/*"
}אין להעניק import boto3 from aws_secretsmanager_caching import SecretCache client = boto3.client('secretsmanager') cache = SecretCache(client=client) secret = cache.get_secret_string('prod/payments-api/db-credentials') לרוב השירותים — זה חושף את קיומם של סודות, מה שעוזר לתוקף לאחר פריצה.
מדיניות מבוססת משאבים על הסוד עצמו (Permissions → Resource policy) היא שכבה נוספת: Deny מפורש לכולם מלבד תפקידים ספציפיים. הגנה לעומק.
KMS והצפנה
Secrets Manager מצפין סודות דרך KMS. כברירת מחדל הוא משתמש במפתח המנוהל ECS_ENABLE_SECRET_UPDATE_ON_ROTATION: true. עבור דרישות ציות או גישה בין חשבונות, אנו יוצרים מפתח מנוהל על ידי לקוח (CMK):
aws kms create-key --description "Secrets Manager CMK"
aws kms create-alias --alias-name alias/secrets-manager --target-key-id <key-id>CMK מאפשר להגדיר מדיניות מפתח: מי יכול להשתמש במפתח להצפנה/פענוח. זה קריטי לגישת סודות בין חשבונות.
ניטור וביקורת
CloudTrail מתעד כל קריאת { "Effect": "Allow", "Action": ["secretsmanager:GetSecretValue"], "Resource": "arn:aws:secretsmanager:eu-west-1:123456789:secret:prod/payments-api/*" } : מי, מתי, מאיזו כתובת IP, איזה סוד. זה הבסיס לביקורת. התראות CloudWatch על כמות חריגה של secretsmanager:ListSecrets מגורם אחד — הסימן הראשון לפריצת אישורים. אנו מגדירים התראות עם הודעת TLS בטלגרם או Slack.
מה כלול בהגדרה
- ביקורת סודות וסיכונים קיימים
- עיצוב סכמת שמות ותגיות
- הגדרת רוטציה (עבור RDS/Aurora — Lambda מנוהלת)
- הגדרת מדיניות IAM ומדיניות מבוססת משאבים
- אינטגרציית יישום (לקוח מטמון או פרמטרי ECS)
- הגדרת ניטור והתראות
- תיעוד (runbook, תיאורי סודות)
- הדרכת צוות (חצי יום)
עלות ההגדרה מחושבת באופן אישי — צרו קשר כדי להעריך את הפרויקט שלכם במסגרת ייעוץ. קבלו הצעת מחיר ולוח זמנים תוך 2 ימי עסקים.
הפחתת עלויות של 40% בהשוואה לפתרונות מותאמים אישית. חסכו עד $5,000 בשנה על תקלות עם הגדרה נכונה.







