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
또는 애플리케이션을 실행할 때 커스텀 신뢰 저장소를 지정할 수 있습니다.
표준 인증 기관 (CA)을 사용하는 다른 서비스와의 호환성을 유지하려면 기본 Java 신뢰 저장소를 복사합니다.
cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTSCA 인증서를 커스텀 신뢰 저장소로 가져옵니다.
keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTS애플리케이션을 실행할 때 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);