Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
בדף הזה מוסבר איך להשתמש ב-Secret Manager כדי לאחסן בצורה מאובטחת חיבורים וסודות של Airflow.
הגדרת Secret Manager בסביבה
בקטע הזה מוסבר איך להגדיר את Secret Manager כדי שאפשר יהיה להשתמש בסודות בסביבת Managed Airflow.
הפעלת Secret Manager API
המסוף
מפעילים את Secret Manager API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים
gcloud
מפעילים את Secret Manager API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים
gcloud services enable secretmanager.googleapis.com
הגדרת בקרת הגישה
צריך להגדיר בקרת גישה כדי ש-Airflow יוכל לגשת לסודות שמאוחסנים ב-Secret Manager.
כדי לעשות זאת, לחשבון השירות שמקבל גישה לסודות צריך להיות תפקיד עם ההרשאה secretmanager.versions.access. לדוגמה, התפקיד Secret Manager Secret Accessor כולל את ההרשאה הזו.
אפשר לתת את התפקיד הזה ברמת הסוד, הפרויקט, התיקייה או הארגון.
אפשר לבחור באחת מהאפשרויות הבאות:
(מומלץ) מקצים את התפקיד הזה לחשבון השירות של הסביבה.
עוקפים את חשבון השירות שדרכו Airflow ניגש אל Secret Manager.
- מקצים את התפקיד הזה לחשבון שירות.
- מגדירים את הפרמטר
gcp_key_pathשל אפשרות ההגדרהbackend_kwargsAirflow כך שיצביע על קובץ JSON עם פרטי הכניסה של חשבון השירות.
הפעלה והגדרה של הקצה העורפי של Secret Manager
עוקפים את אפשרות ההגדרה הבאה של Airflow:
קטע מפתח ערך secretsbackendairflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend(Airflow 2.10.2 ואילך) מוודאים שאפשרות ההגדרה
[secrets]backends_orderAirflow מציינת סדר חיפוש של סודות שכולל קצה עורפי שלcustomסודות. ערך ברירת המחדל של האפשרות הזו כבר מכיל את הערך הזה.קטע מפתח ערך secretsbackends_order(ברירת מחדל) custom,environment_variable,metastoreמוסיפים הגדרות אופציונליות על ידי החלפה של אפשרות התצורה הבאה של Airflow:
קטע מפתח ערך secretsbackend_kwargsראו את התיאור הבא. הערך של
backend_kwargsהוא ייצוג JSON של אובייקטbackend_kwargsעם השדות הבאים:-
connections_prefix: התחילית של שם הסוד שצריך לקרוא כדי לקבל את הנתונים של Connections. ערך ברירת המחדל הואairflow-connections. -
variables_prefix: הקידומת של שם הסוד שצריך לקרוא כדי לקבל משתנים. ערך ברירת המחדל הוא:airflow-variables. -
gcp_key_path: הנתיב אל קובץ ה-JSON של פרטי הכניסה (אם לא מצוין נתיב, נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל). Google Cloud -
gcp_keyfile_dict: Google Cloud מילון JSON של פרטי הכניסה. הן לא יכולות להיות ביחד, כמוgcp_key_path. -
sep: המפריד שמשמש לשרשור שלconnections_prefixו-conn_id. ערך ברירת המחדל הוא-. -
project_id: Google Cloud מזהה הפרויקט שבו מאוחסנים הסודות.
לדוגמה, הערך של
backend_kwargsיכול להיות:{"project_id": "<project id>", "connections_prefix":"example-connections", "variables_prefix":"example-variables", "sep":"-"}.-
הוספת חיבורים ומשתנים ב-Secret Manager
יוצרים סודות לפי השלבים שמפורטים במאמר יצירת סודות וגרסאות.
משתנים
- חובה להשתמש בפורמט
[variables_prefix][sep][variable_name]. - ערך ברירת המחדל של
[variables_prefix]הואairflow-variables. - מפריד ברירת המחדל
[sep]הוא-.
לדוגמה, אם שם המשתנה הוא example-var, שם הסוד הוא airflow-variables-example-var.
שמות החיבורים
- חובה להשתמש בפורמט
[connection_prefix][sep][connection_name]. - ערך ברירת המחדל של
[connection_prefix]הואairflow-connections. - מפריד ברירת המחדל
[sep]הוא-.
לדוגמה, אם שם החיבור הוא exampleConnection, אז שם הסוד הוא airflow-connections-exampleConnection.
ערכי חיבור
חובה להשתמש בייצוג URI. לדוגמה,
postgresql://login:secret@examplehost:9000.ה-URI חייב להיות מקודד בקידוד URL (מקודד בסימני אחוזים). לדוגמה, סיסמה שכוללת רווח צריכה לעבור קידוד URL באופן הבא:
postgresql://login:secret%20password@examplehost:9000.
ל-Airflow יש שיטה נוחה ליצירת URI של חיבורים. דוגמה לאופן הקידוד של כתובת URL מורכבת עם תוספות JSON זמינה במסמכי Airflow.
שימוש ב-Secret Manager עם Managed Airflow
כשמאחזרים משתנים וחיבורים, מערכת Managed Airflow בודקת קודם את Secret Manager. אם המשתנה או החיבור המבוקשים לא נמצאים, מערכת Managed Airflow בודקת את משתני הסביבה ואת מסד הנתונים של Airflow.
קריאת משתנים באמצעות תבניות Jinja
אפשר להשתמש ב-Secret Manager כדי לקרוא משתנים עם תבניות Jinja לשדות של אופרטורים עם תבניות (שנפתרים בזמן ההפעלה).
עבור הסוד airflow-variables-secret_filename:
file_name = '{{var.value.secret_filename}}'
קריאת משתנים באמצעות אופרטורים ופונקציות קריאה חוזרת בהתאמה אישית
אפשר גם להשתמש ב-Secret Manager כדי לקרוא משתנים באופרטורים מותאמים אישית או בשיטות של קריאה חוזרת מאופרטורים. קריאת משתנים מתוך DAG עלולה להשפיע לרעה על הביצועים, לכן כדאי להשתמש בתבניות Jinja אם רוצים להשתמש במשתנים ב-DAG.
לדוגמה, בשביל הסוד airflow-variables-secret_filename:
from airflow.models.variable import Variable
file_name = Variable.get('secret_filename')
קריאת החיבורים
אלא אם אתם כותבים אופרטור בהתאמה אישית, בדרך כלל לא תצטרכו לגשת לחיבורים ישירות. רוב ה-hooks מקבלים את שם החיבור כפרמטר של יצירת מופע, והם אמורים לאחזר חיבורים מהקצה העורפי של הסוד באופן אוטומטי כשמשימות מופעלות.
קריאת החיבורים ישירות יכולה להיות שימושית כשכותבים וו משלכם.
לדוגמה, לחיבור airflow-connections-exampleConnection:
from airflow.hooks.base_hook import BaseHook
exampleConnection = BaseHook.get_connection('exampleConnection')
BaseHook.get_connection מחזירה אובייקט Connection. אפשר לקבל את הייצוג של מחרוזת ה-URI של חיבור באופן הבא:
exampleConnectionUri = BaseHook.get_connection('exampleConnection').get_uri()