Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)
Auf dieser Seite wird gezeigt, wie Sie mit Secret Manager Airflow-Verbindungen und -Secrets sicher speichern.
Hinweis
- Zur Verwendung von Secret Manager muss Ihre Managed Airflow-Umgebung Airflow 1.10.10 oder höher und Python 3.6 oder höher verwenden.
- Python 2 wird nicht unterstützt.
Secret Manager für Ihre Umgebung konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie Secret Manager so konfigurieren, dass Sie Secrets mit Ihrer Managed Airflow-Umgebung verwenden können.
Secret Manager API aktivieren
Console
Aktivieren Sie die Secret Manager API.
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“
(roles/serviceusage.serviceUsageAdmin), die
die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von
Rollen.
gcloud
Aktivieren Sie die Secret Manager API:
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von
Rollen.
gcloud services enable secretmanager.googleapis.com
Zugriffssteuerung konfigurieren
Sie müssen die Zugriffssteuerung so konfigurieren, dass Airflow auf die in Secret Manager gespeicherten Secrets zugreifen kann.
Dazu muss das Dienstkonto, das auf Secrets zugreift, eine Rolle mit der Berechtigung secretmanager.versions.access haben. Die Rolle Zugriffsfunktion für Secret Manager-Secret enthält beispielsweise diese Berechtigung.
Sie können diese Rolle auf Secret-, Projekt-, Ordner- oder Organisationsebene zuweisen.
Verwenden Sie eine der folgenden Optionen:
(Empfohlen) Weisen Sie diese Rolle dem Dienstkonto Ihrer Umgebung zu.
Überschreiben Sie das Dienstkonto, unter dem Airflow auf Secret Manager zugreift.
- Weisen Sie diese Rolle einem Dienstkonto zu.
- Legen Sie den
gcp_key_pathParameter derbackend_kwargsAirflow-Konfigurationsoption so fest, dass er auf eine JSON-Datei mit den Anmeldedaten des Dienstkontos verweist.
DAG-Serialisierung aktivieren
Im Allgemeinen sollten Sie das Secret Manager-Backend nur von
innerhalb der execute() Methoden Ihrer Operatoren oder mit den
Jinja-Vorlagen verwenden.
Sie können beispielsweise Variablen mit var.value.example_var abrufen.
Der Airflow-Webserver wird unter einem anderen Dienstkonto mit eingeschränkten Berechtigungen ausgeführt, sodass nicht auf Secrets in Secret Manager zugegriffen werden kann. Wenn Ihr
DAG-Code während der Verarbeitung von DAG auf Secrets zugreift (nicht nur von Aufgaben aus)
und er nicht angepasst werden kann, um über
die execute() Methoden auf Secrets zuzugreifen, dann
aktivieren Sie DAG-Serialisierung. Anschließend verwendet der Airflow-Webserver verarbeitete DAGs und benötigt keinen Zugriff auf Secrets.
Secret Manager-Backend aktivieren und konfigurieren
Überschreiben Sie die folgende Airflow-Konfigurationsoption:
Bereich Schlüssel Wert secretsbackendairflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackendFügen Sie optionale Einstellungen hinzu, indem Sie die folgende Airflow Konfigurationsoption überschreiben:
Bereich Schlüssel Wert secretsbackend_kwargsWeitere Informationen finden Sie in der folgenden Beschreibung. Der Wert
backend_kwargsist die JSON-Darstellung desbackend_kwargs-Objekts mit den folgenden Feldern:connections_prefix: Präfix des zu lesenden Secret-Namens, um Verbindungen abzurufen. Der Standardwert istairflow-connections.variables_prefix: Präfix des zu lesenden Secret-Namens, um Variablen abzurufen. Der Standardwert istairflow-variables.gcp_key_path: Pfad zur Google Cloud JSON-Datei mit den Anmeldedaten. Wenn nicht angegeben, wird das Standarddienstkonto verwendet.gcp_keyfile_dict: Google Cloud JSON-Wörterbuch mit den Anmeldedaten. Schließt sich mitgcp_key_pathgegenseitig aus.sep: Trennzeichen, das zum Verketten vonconnections_prefixundconn_idverwendet wird. Der Standardwert ist-.project_id: Google Cloud Projekt-ID, unter der Secrets gespeichert werden.
Der Wert von
backend_kwargskann beispielsweise so aussehen:{"project_id": "<project id>", "connections_prefix":"example-connections", "variables_prefix":"example-variables", "sep":"-"}.
Verbindungen und Variablen in Secret Manager hinzufügen
Erstellen Sie Secrets gemäß der Anleitung unter Secrets und Versionen erstellen.
Variablen
- Muss das Format
[variables_prefix][sep][variable_name]verwenden. - Der Standardwert für
[variables_prefix]istairflow-variables. - Das Standardtrennzeichen
[sep]ist-
Beispiel: Wenn der Variablenname example-var lautet, lautet der Secret-Name airflow-variables-example-var.
Verbindungsnamen
- Muss das Format
[connection_prefix][sep][connection_name]verwenden. - Der Standardwert für
[connection_prefix]istairflow-connections. - Das Standardtrennzeichen
[sep]ist-
Wenn der Verbindungsname beispielsweise exampleConnection lautet, lautet der Secret-Name airflow-connections-exampleConnection.
Verbindungswerte
Müssen die URI-Darstellung verwenden. Beispiel:
postgresql://login:secret@examplehost:9000.Der URI muss URL-codiert (prozentual codiert) sein. Beispielsweise muss ein Passwort, das ein Leerzeichensymbol enthält, so URL-codiert sein:
postgresql://login:secret%20password@examplehost:9000.
Airflow bietet eine einfache Methode zum Generieren von Verbindungs URIs. Ein Beispiel für die Codierung einer komplexen URL mit JSON-Extras finden Sie in der Airflow-Dokumentation.
Secret Manager mit Managed Airflow verwenden
Beim Abrufen von Variablen und Verbindungen prüft Managed Airflow zuerst Secret Manager. Wenn die angeforderte Variable oder Verbindung nicht gefunden wird, prüft Managed Airflow die Umgebungsvariablen und die Airflow-Datenbank.
Variablen mit Jinja-Vorlagen lesen
Mit Secret Manager können Sie Variablen mit Jinja-Vorlagen für vorlagenbasierte Operatorenfelder lesen (die zum Zeitpunkt der Ausführung aufgelöst werden).
Für das Secret airflow-variables-secret_filename gilt:
file_name = '{{var.value.secret_filename}}'
Variablen mithilfe benutzerdefinierten Operatoren und Callbacks lesen
Sie können Secret Manager auch verwenden, um Variablen in benutzerdefinierten Operatoren oder Rückrufmethoden von Operatoren zu lesen. Das Lesen von Variablen in DAGs kann sich negativ auf die Leistung auswirken. Verwenden Sie daher Jinja-Vorlagen, wenn Sie Variablen in Ihren DAGs verwenden möchten.
Beispiel für das Secret airflow-variables-secret_filename:
from airflow.models.variable import Variable
file_name = Variable.get('secret_filename')
Verbindungen lesen
Wenn Sie keinen benutzerdefinierten Operator schreiben, sollten Sie selten direkt auf Verbindungen zugreifen müssen. Die meisten Hooks erhalten den Verbindungsnamen als Instanziierungsparameter und sollten Verbindungen vom Secret-Backend automatisch abrufen, wenn Tasks ausgeführt werden.
Das direkte Lesen von Verbindungen kann beim Schreiben eines eigenen Hooks hilfreich sein.
Beispiel für die Verbindung airflow-connections-exampleConnection:
from airflow.hooks.base_hook import BaseHook
exampleConnection = BaseHook.get_connection('exampleConnection')
BaseHook.get_connection gibt ein Connection-Objekt zurück. Die URI-Stringdarstellung einer Verbindung kann so abgerufen werden:
exampleConnectionUri = BaseHook.get_connection('exampleConnection').get_uri()