Mit der Java-Clientbibliothek eine Verbindung zu Spanner Omni herstellen

Die Java-Clientbibliothek für Spanner funktioniert mit Spanner Omni genauso wie mit Spanner. In diesem Dokument wird beschrieben, wie Sie sichere Verbindungen zu Spanner Omni herstellen, indem Sie die Java-Clientbibliothek konfigurieren. Sie stellen diese Verbindungen her, indem Sie Clientoptionen festlegen, wenn Sie einen Datenbank-Administratorklienten oder einen Datenbankclient erstellen.

Die Java-Clientbibliothek unterstützt Verbindungen im Nur-Text-Modus, TLS-, TLS-mit-Anmeldedaten- und mTLS-Verbindungen.

Weitere Informationen finden Sie in der Spanner-Dokumentation unter Erste Schritte mit Spanner in Java.

Hinweis

Wenn Sie mit Spanner Omni in Java beginnen möchten, verwenden Sie die Java-Clientbibliothek in Version 6.119.0 oder höher.

Wenn Sie Maven ohne die Materialliste (Bill of Materials, BOM) verwenden, fügen Sie den Abhängigkeiten der Datei pom.xml Folgendes hinzu:

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-spanner</artifactId>
  <version>6.119.0</version>
</dependency>

Sicherheitskonfigurationen

Die Spanner-Java-Clientbibliothek unterstützt vier Sicherheitskonfigurationen, die definieren, wie die Kommunikation zwischen dem Client und Spanner Omni verschlüsselt und authentifiziert wird. In der folgenden Tabelle werden die einzelnen Konfigurationen beschrieben:

Sicherheitskonfiguration Beschreibung
Nur-Text Die Kommunikation ist nicht verschlüsselt.
TLS Die Kommunikation wird mit Transport Layer Security (TLS) verschlüsselt. Bei dieser Konfiguration müssen Sie das Spanner Omni CA-Zertifikat dem Java-Truststore hinzufügen, wie unter Java-Truststore konfigurieren beschrieben.
TLS mit Anmeldedaten Die Kommunikation wird mit TLS verschlüsselt und die Authentifizierung erfolgt mit einem Nutzernamen und einem Passwort.
mTLS Die Kommunikation wird mit gegenseitigem TLS (mTLS) verschlüsselt. Für diese Konfiguration müssen Sie sowohl ein Clientzertifikat als auch einen privaten Clientschlüssel angeben.

Java-Truststore konfigurieren

Für alle verschlüsselten Verbindungstypen (TLS, TLS mit Anmeldedaten und mTLS) müssen Sie das Spanner Omni CA-Zertifikat dem Java-Truststore hinzufügen, damit der Client das Zertifikat des Servers prüfen kann.

Führen Sie den folgenden Befehl aus, um das CA-Zertifikat dem Standard-Java-Truststore hinzuzufügen:

sudo keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts

Alternativ können Sie beim Ausführen der Anwendung einen benutzerdefinierten Truststore angeben:

  1. Um die Kompatibilität mit anderen Diensten aufrechtzuerhalten, die Standardzertifizierungsstellen verwenden, kopieren Sie den Standard-Java-Truststore:

    cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTS
    
  2. Importieren Sie das CA-Zertifikat in Ihren benutzerdefinierten Truststore:

    keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTS
    
  3. Geben Sie den benutzerdefinierten Truststore mit JVM-Systemattributen an, wenn Sie die Anwendung ausführen:

    java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
    

SpannerOptions-Objekt konfigurieren

Wenn Sie das Objekt SpannerOptions konfigurieren, um ein DatabaseClient oder DatabaseAdminClient zu erstellen, geben Sie den Spanner Omni-Endpunkt mit setHost() gefolgt von setType(SpannerOptions.InstanceType.OMNI) an.

Die folgenden Beispiele zeigen, wie das SpannerOptions-Objekt für jede unterstützte Sicherheitskonfiguration konfiguriert wird:

Nur-Text

Wenn Sie eine Nur-Text-Verbindung herstellen möchten, geben Sie den Spanner Omni-Endpunkt mit http:// an und verwenden Sie die Methode usePlainText():

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("http://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .usePlainText()
        .build();
Spanner spanner = options.getService();

TLS

Wenn Sie das SpannerOptions-Objekt für eine TLS-Verbindung konfigurieren, müssen Sie keine Anmeldedaten für Nutzername und Passwort angeben. Geben Sie den Spanner Omni-Endpunkt mit https:// an:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .build();
Spanner spanner = options.getService();

TLS mit Anmeldedaten

Wenn Sie eine TLS-Verbindung mit Nutzername und Passwortauthentifizierung herstellen möchten, geben Sie den Spanner Omni-Endpunkt mit https:// und den Nutzernamen und das Passwort mit der Methode login() an:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .login("USERNAME", "PASSWORD".toCharArray())
        .build();
Spanner spanner = options.getService();

mTLS

Wenn Sie eine mTLS-Verbindung verwenden möchten, konvertieren Sie den von Spanner Omni generierten Schlüssel mit dem folgenden Befehl in ein mit Java kompatibles Format:

openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt

Das folgende Beispiel zeigt, wie das SpannerOptions-Objekt für die Verwendung eines Clientzertifikats konfiguriert wird:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .useClientCert(
            "PATH_TO_CLIENT_CERT",
            "PATH_TO_CLIENT_CERT_KEY")
        .build();
Spanner spanner = options.getService();

Datenbankclient abrufen

Nachdem Sie das SpannerOptions-Objekt konfiguriert haben, können Sie einen Datenbankclient abrufen. Da für Spanner Omni keine Google Cloud-Projekt- oder Instanz-IDs verwendet werden, geben Sie beim Erstellen einer DatabaseId default für die Projekt-ID und die Instanz-ID an:

DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);