הגדרת Secret Manager בסביבה

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. איך מקצים תפקידים

להפעלת ה-API

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 כולל את ההרשאה הזו.

אפשר לתת את התפקיד הזה ברמת הסוד, הפרויקט, התיקייה או הארגון.

אפשר לבחור באחת מהאפשרויות הבאות:

הפעלה והגדרה של הקצה העורפי של Secret Manager

  1. עוקפים את אפשרות ההגדרה הבאה של Airflow:

    קטע מפתח ערך
    secrets backend airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
  2. (Airflow 2.10.2 ואילך) מוודאים שאפשרות ההגדרה [secrets]backends_order Airflow מציינת סדר חיפוש של סודות שכולל קצה עורפי של custom סודות. ערך ברירת המחדל של האפשרות הזו כבר מכיל את הערך הזה.

    קטע מפתח ערך
    secrets backends_order (ברירת מחדל) custom,environment_variable,metastore
  3. מוסיפים הגדרות אופציונליות על ידי החלפה של אפשרות התצורה הבאה של Airflow:

    קטע מפתח ערך
    secrets backend_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()

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