Cloud Composer 1 Cloud Composer 2
Auf dieser Seite wird gezeigt, wie Sie mit Secret Manager Airflow-Verbindungen und -Secrets sicher speichern.
Secret Manager für Ihre Umgebung konfigurieren
In diesem Abschnitt wird erläutert, wie Sie Secret Manager so konfigurieren, dass Sie Secrets in Ihrer Cloud Composer-Umgebung verwenden können.
Secret Manager API aktivieren
Console
Secret Manager API aktivieren.
gcloud
Aktivieren Sie die Secret Manager API:
gcloud services enable secretmanager.googleapis.com
Zugriffssteuerung konfigurieren
Sie müssen die Zugriffssteuerung so konfigurieren, dass Airflow auf Secrets zugreifen kann, die in Secret Manager gespeichert sind.
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 diese Berechtigung beispielsweise.
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 Parameter
gcp_key_path
der Airflow-Konfigurationsoptionbackend_kwargs
so fest, dass er auf eine JSON-Datei mit den Anmeldedaten des Dienstkontos verweist.
Secret Manager-Back-End aktivieren und konfigurieren
Überschreiben Sie die folgende Airflow-Konfigurationsoption:
Bereich Schlüssel Wert secrets
backend
airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
Fügen Sie optionale Einstellungen hinzu, indem Sie die folgende Airflow-Konfigurationsoption überschreiben:
Bereich Schlüssel Wert secrets
backend_kwargs
Weitere Informationen finden Sie in der folgenden Beschreibung. Der Wert
backend_kwargs
ist die JSON-Darstellung des Objektsbackend_kwargs
mit den folgenden Feldern:connections_prefix
: Gibt das Präfix des zu lesenden Secret-Namens an, um Verbindungen abzurufen. Standardwert istairflow-connections
.variables_prefix
: Gibt das Präfix des zu lesenden Secret-Namens an, um Variablen abzurufen. Standardwert istairflow-variables
.gcp_key_path
: Pfad zur JSON-Datei mit den Google Cloud-Anmeldedaten. Wenn nicht angegeben, wird das Standarddienstkonto verwendet.gcp_keyfile_dict
: Das JSON-Wörterbuch der Google Cloud-Anmeldedaten. Dieses Feature schließt sich mitgcp_key_path
gegenseitig aus.sep
: Trennzeichen, das zum Verketten vonconnections_prefix
undconn_id
verwendet wird. Standard:-
.project_id
: Die Google Cloud-Projekt-ID, unter der Secrets gespeichert werden.
Der Wert von
backend_kwargs
kann 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. Folgen Sie dazu den unter Secrets und Versionen erstellen beschriebenen Schritten.
Variablen
- Muss das Format
[variable_prefix][sep][variable_name]
verwenden. - Der Standardwert für
[variable_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
Sie müssen eine URI-Darstellung verwenden. Beispiel:
mysql://login:password@examplehost:9000
Der URI muss URL-codiert sein (prozentual codiert). Beispielsweise muss ein Passwort, das ein Leerzeichensymbol enthält, so URL-codiert sein:
mysql://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 Cloud Composer verwenden
Beim Abrufen von Variablen und Verbindungen prüft Cloud Composer zuerst Secret Manager. Wenn die angeforderte Variable oder Verbindung nicht gefunden wird, prüft Cloud Composer die Umgebungsvariablen und die Airflow-Datenbank.
Variablen mit Jinja-Vorlagen lesen
Sie können Secret Manager verwenden, um Variablen mit Jinja-Vorlagen für vorlagenbasierte Operatorfelder zu lesen (bei der Ausführung aufgelöst).
Für das Secret airflow-variables-secret_filename
:
file_name = 'var.value.secret_filename'
Variablen mit 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-Back-End automatisch abrufen, wenn Aufgaben 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()