Apache Beam ist ein einheitliches Open-Source-Modell, mit dem sowohl Batch- als auch Streamingpipelines zur parallelen Datenverarbeitung ausgeführt werden können. In diesem Dokument wird beschrieben, wie Sie den SpannerIO-Connector in einer Apache Beam-Pipeline verwenden, um aus Spanner Omni-Datenbanken zu lesen oder in diese zu schreiben.
Hinweis
Damit Sie SpannerIO mit Spanner Omni verbinden können, müssen die folgenden Anforderungen erfüllt sein:
Datenbank in Ihrer Spanner Omni-Umgebung initialisieren
Wenn Sie die Verschlüsselung verwenden, achten Sie darauf, dass Sie eine kompatible Version von Apache Beam verwenden:
- Für die TLS-Verschlüsselung: Version 2.69.0 oder höher.
- Für die gegenseitige TLS-Verschlüsselung (mTLS) Version 2.75.0 oder höher.
Richten Sie Authentifizierungsdaten für Ihre Umgebung ein.
SpannerIO für die Verbindung mit Spanner Omni konfigurieren
Wenn Sie SpannerIO mit Spanner Omni verbinden möchten, konfigurieren Sie SpannerConfig mit Ihren Datenbankdetails und Verbindungsparametern.
Wählen Sie einen der folgenden Verbindungsmodi aus, um die Verbindung zu konfigurieren:
- Verbindung über Nur-Text-Kommunikation herstellen
- Verbindung über TLS-Verschlüsselung herstellen
- Verbindung über mTLS-Verschlüsselung herstellen
Verbindung über Nur-Text-Kommunikation herstellen
Wenn Sie eine Nur-Text-Verbindung herstellen möchten, geben Sie den Spanner Omni-Endpunkt an, aktivieren Sie die experimentelle Hostunterstützung mit der Methode withExperimentalHost() und konfigurieren Sie die Pipeline mit der Methode withUsingPlainTextChannel().
Das folgende Beispiel zeigt, wie eine Nur-Text-Verbindung konfiguriert wird:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
Ersetzen Sie Folgendes:
DATABASE_ID: die ID Ihrer Spanner Omni-Datenbank, z. B.test-db.ENDPOINT: der Endpunkt Ihrer Spanner Omni-Instanz, z. B.localhost:15000.
Verbindung über Verschlüsselung herstellen
Zum Schutz des Datenbank-Traffics und für eine sichere Kommunikation zwischen Apache Beam und Spanner Omni können Sie eine Verbindung über TLS- oder mTLS-Verschlüsselung herstellen. Durch die Verschlüsselung bleiben Ihre Anmeldedaten und Daten vertraulich.
TLS-Verschlüsselung verwenden
Wenn Sie den Datenbank-Traffic zwischen Apache Beam und Spanner Omni mit TLS-Verschlüsselung schützen möchten, müssen Sie in SpannerConfig keine Anmeldedatenattribute angeben. Konfigurieren Sie stattdessen einen Java-Truststore mit dem CA-Zertifikat von Spanner Omni und konfigurieren Sie dann die SpannerConfig für die Verwendung des sicheren TLS-Endpunkts.
Schritt 1: Java-Truststore konfigurieren
Um die Kommunikation zu sichern, müssen Sie das von Spanner Omni generierte CA-Zertifikat in einen Java-Truststore importieren. Verwenden Sie eine der folgenden Optionen:
Standard-Java-Truststore
Fügen Sie das von Spanner Omni generierte CA-Zertifikat dem Standard-Java-Truststore hinzu, indem Sie den folgenden Befehl ausführen:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
Benutzerdefinierter Truststore
Damit Ihre Pipeline weiterhin eine Verbindung zu anderen Datenbanken oder Diensten herstellen kann, die Standard-Zertifizierungsstellen verwenden, erstellen Sie einen benutzerdefinierten Truststore:
Erstellen Sie einen benutzerdefinierten Truststore, indem Sie den vorhandenen Java-Truststore kopieren:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATEImportieren Sie das CA-Zertifikat in Ihren benutzerdefinierten Truststore:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATEÜbergeben Sie den benutzerdefinierten CA-Zertifikatsspeicher, wenn Sie die Pipeline ausführen:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
Ersetzen Sie Folgendes:
PATH_TO_CUSTOM_CA_CERTIFICATE: der Pfad zu Ihrem benutzerdefinierten CA-Zertifikatsspeicher.PIPELINE_NAME: der Name Ihrer Apache Beam-Pipeline.
Schritt 2: SpannerConfig konfigurieren
Wenn Sie SpannerConfig für die Verwendung einer sicheren TLS-Verbindung konfigurieren möchten, fügen Sie Ihrer Pipeline den folgenden Code hinzu:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
Ersetzen Sie Folgendes:
DATABASE_ID: die ID Ihrer Spanner Omni-Datenbank, z. B.test-db.ENDPOINT: der Endpunkt Ihrer Spanner Omni-Instanz, z. B.localhost:15000.
mTLS-Verschlüsselung verwenden
Wenn Sie eine gegenseitige TLS-Verbindung (mTLS) mit Apache Beam herstellen möchten, müssen Sie den Java-Truststore mit dem CA-Zertifikat konfigurieren, einen privaten Client-Schlüssel generieren oder in das PKCS#8-Format konvertieren und dann SpannerConfig mit dem Client-Zertifikat und dem Schlüsselpfad konfigurieren.
Schritt 1: Java-Truststore konfigurieren
Konfigurieren Sie den Java-Truststore mit dem Spanner Omni-CA-Zertifikat, wie zuvor in diesem Dokument unter Schritt 1: Java-Truststore konfigurieren beschrieben.
Schritt 2: Privaten Clientschlüssel konvertieren oder generieren
Wenn Sie eine Verbindung über mTLS herstellen möchten, muss der private Schlüssel des Clients im PKCS#8-Format vorliegen. Verwenden Sie eine der folgenden Optionen:
openssl
Führen Sie den folgenden Befehl aus, um den von Spanner Omni generierten Clientschlüssel in ein Java-kompatibles Format zu konvertieren:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
Spanner Omni-Befehlszeile
Generieren Sie den Schlüssel direkt im PKCS#8-Format, wenn Sie Ihr Clientzertifikat mit der Spanner Omni CLI und dem Flag --generate-pkcs8-key erstellen.
Führen Sie den folgenden Befehl aus, um ein Clientzertifikat und einen privaten Schlüssel im PKCS#8-Format zu generieren:
spanner certificates create-client CLIENT_NAME \
--ca-certificate-directory=PATH_TO_CA_CERTIFICATES \
--ca-private-key-directory=PATH_TO_PRIVATE_KEYS \
--output-directory=PATH_TO_CERTIFICATES \
--generate-pkcs8-key
Ersetzen Sie Folgendes:
CLIENT_NAME: der Name des Clients, für den das Zertifikat und der private Schlüssel generiert werden sollen.PATH_TO_CA_CERTIFICATES: der Pfad zum Verzeichnis, das die CA-Zertifikate enthält.PATH_TO_PRIVATE_KEYS: der Pfad zum Verzeichnis, das die privaten Schlüssel der Zertifizierungsstelle enthält.PATH_TO_CERTIFICATES: der Pfad zum Verzeichnis, in dem das Clientzertifikat und der private Schlüssel gespeichert sind.
Schritt 3: SpannerConfig konfigurieren
Konfigurieren Sie die SpannerConfig in Ihrem Pipelinecode mit dem Clientzertifikat und dem privaten Schlüssel des Clients:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT")
// Specify the paths to the client certificate and private key
.withClientCert(
"PATH_TO_CLIENT_CERT",
"PATH_TO_CLIENT_CERT_KEY");
Ersetzen Sie Folgendes:
DATABASE_ID: die ID Ihrer Spanner Omni-Datenbank, z. B.test-db.ENDPOINT: der Endpunkt Ihrer Spanner Omni-Instanz, z. B.localhost:15000.PATH_TO_CLIENT_CERT: der Pfad zu Ihrer Clientzertifikatsdatei.PATH_TO_CLIENT_CERT_KEY: der Pfad zur privaten Schlüsseldatei des Clients.
Authentifizierungstokens konfigurieren
Authentifizierungstokens werden für die Verwendung durch Clients nicht empfohlen, da die von Spanner Omni generierten Tokens ablaufen und manuell mit der Spanner Omni CLI erneuert werden müssen. Wenn Sie ein Authentifizierungstoken mit einer TLS- oder mTLS-Einrichtung für einen Spanner Omni-Endpunkt verwenden möchten, setzen Sie die Umgebungsvariable SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN auf den Wert des Authentifizierungstokens, das von der Spanner Omni CLI generiert wurde. Lassen Sie diese Variable für Verbindungen, für die keine Anmeldedaten erforderlich sind, ungesetzt.