Java 클라이언트 라이브러리를 사용하여 Spanner Omni에 연결

Spanner용 Java 클라이언트 라이브러리는 Spanner Omni에서 Spanner와 동일한 방식으로 작동합니다. 이 문서에서는 Java 클라이언트 라이브러리를 구성하여 Spanner Omni에 보안 연결을 설정하는 방법을 보여줍니다. 데이터베이스 관리 클라이언트 또는 데이터베이스 클라이언트를 만들 때 클라이언트 옵션을 설정하여 이러한 연결을 설정합니다.

Java 클라이언트 라이브러리는 일반 텍스트, TLS, 사용자 인증 정보가 있는 TLS, mTLS 연결을 지원합니다.

자세한 내용은 Spanner 문서의 Java에서 Spanner 시작하기 를 참조하세요.

시작하기 전에

Java에서 Spanner Omni를 시작하려면 Java 클라이언트 라이브러리 버전 6.119.0 이상을 사용하세요.

BOM (Bill of Materials) 없이 Maven을 사용하는 경우 pom.xml 파일 종속 항목에 다음을 추가합니다.

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

보안 구성

Spanner Java 클라이언트 라이브러리는 클라이언트와 Spanner Omni 간의 통신을 암호화하고 인증하는 방법을 정의하는 4가지 보안 구성을 지원합니다. 다음 표에서는 각 구성을 설명합니다.

보안 구성 설명
일반 텍스트 통신이 암호화되지 않습니다.
TLS 통신은 전송 계층 보안 (TLS)을 사용하여 암호화됩니다. 이 구성에서는 Java 트러스트 저장소 구성에 설명된 대로 Spanner Omni CA 인증서를 Java 트러스트 저장소에 추가해야 합니다.
사용자 인증 정보가 있는 TLS 통신은 TLS를 사용하여 암호화되고 인증은 사용자 이름과 비밀번호를 사용하여 실행됩니다.
mTLS 통신은 상호 TLS (mTLS)를 사용하여 암호화됩니다. 이 구성 에서는 클라이언트 인증서와 클라이언트 비공개 키를 모두 제공해야 합니다.

Java 트러스트 저장소 구성

모든 암호화된 연결 유형 (TLS, 사용자 인증 정보가 있는 TLS, mTLS)의 경우 클라이언트가 서버의 인증서를 확인할 수 있도록 Java 트러스트 저장소에 Spanner Omni CA 인증서를 추가해야 합니다.

기본 Java 트러스트 저장소에 CA 인증서를 추가하려면 다음 명령어를 실행합니다.

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

또는 애플리케이션을 실행할 때 커스텀 신뢰 저장소를 지정할 수 있습니다.

  1. 표준 인증 기관 (CA)을 사용하는 다른 서비스와의 호환성을 유지하려면 기본 Java 신뢰 저장소를 복사합니다.

    cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTS
    
  2. CA 인증서를 커스텀 신뢰 저장소로 가져옵니다.

    keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTS
    
  3. 애플리케이션을 실행할 때 JVM 시스템 속성을 사용하여 커스텀 신뢰 저장소를 지정합니다.

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

SpannerOptions 객체 구성

SpannerOptions 객체를 만들어 DatabaseClient 또는 DatabaseAdminClient를 구성할 때는 setHost() 다음에 setType(SpannerOptions.InstanceType.OMNI)를 사용하여 Spanner Omni 엔드포인트를 지정합니다.

다음 예에서는 지원되는 각 보안 구성에 대해 SpannerOptions 객체를 구성하는 방법을 보여줍니다.

일반 텍스트

일반 텍스트 연결을 설정하려면 http://로 Spanner Omni 엔드포인트를 지정하고 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

TLS 연결을 위해 SpannerOptions 객체를 구성할 때는 사용자 이름과 비밀번호 사용자 인증 정보를 지정할 필요가 없습니다. https://를 사용하여 Spanner Omni 엔드포인트를 지정합니다.

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

사용자 인증 정보가 있는 TLS

사용자 이름과 비밀번호 인증으로 TLS 연결을 설정하려면 https://를 사용하여 Spanner Omni 엔드포인트를 지정하고 login() 메서드를 사용하여 사용자 이름과 비밀번호를 지정합니다.

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

mTLS 연결을 사용하려면 다음 명령어를 사용하여 Spanner Omni에서 생성된 키를 Java와 호환되는 형식으로 변환합니다.

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

다음 예에서는 클라이언트 인증서를 사용하도록 SpannerOptions 객체를 구성하는 방법을 보여줍니다.

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();

데이터베이스 클라이언트 가져오기

SpannerOptions 객체를 구성한 후 데이터베이스 클라이언트를 가져올 수 있습니다. Spanner Omni는 Google Cloud 프로젝트 또는 인스턴스 ID를 사용하지 않으므로 DatabaseId를 만들 때 프로젝트 ID와 인스턴스 ID에 default를 지정합니다.

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