הגדרת 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, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

להפעלת ה-API

gcloud

מפעילים את Secret Manager API, אם הוא עדיין לא מופעל:

תפקידים שנדרשים להפעלת ממשקי API

כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

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, אז שם ה-Secret הוא 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()

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