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 Datenbankverwaltungsclient oder einen Datenbankclient erstellen.

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

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

Hinweis

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

Wenn Sie Maven ohne 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 wird jede Konfiguration beschrieben:

Sicherheitskonfiguration Beschreibung
Nur-Text Die Kommunikation ist nicht verschlüsselt.
TLS Die Kommunikation wird mit Transport Layer Security (TLS) verschlüsselt. Für diese 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 gegenseitiger 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 überprü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 (CAs) 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 beim Ausführen der Anwendung mit JVM-Systemattributen an:

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

Das Objekt SpannerOptions konfigurieren

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

In den folgenden Beispielen wird gezeigt, wie das Objekt SpannerOptions 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 Objekt SpannerOptions für eine TLS-Verbindung konfigurieren, müssen Sie keine Anmeldedaten für den Nutzernamen und das 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 Authentifizierung per Nutzername und Passwort 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

Im folgenden Beispiel wird gezeigt, wie das Objekt SpannerOptions so konfiguriert wird, dass ein Clientzertifikat verwendet 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 Objekt SpannerOptions konfiguriert haben, können Sie einen Datenbankclient abrufen. Da Spanner Omni keine Google Cloud-Projekt- oder Instanz-IDs verwendet, 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);