Menggunakan library klien Go untuk terhubung ke Spanner Omni

Dokumen ini menunjukkan cara membuat koneksi aman ke Spanner Omni dengan mengonfigurasi library klien Go. Anda membuat koneksi ini dengan menetapkan opsi klien saat membuat klien administratif database atau klien database.

Library klien Go mendukung koneksi teks biasa, TLS, dan mTLS. Untuk semua jenis koneksi, sertakan option.WithoutAuthentication() untuk mencegah transmisi Google Cloud kredensial ke endpoint Spanner Omni.

Untuk mengetahui informasi selengkapnya, lihat Memulai Spanner di Go dalam dokumentasi Spanner.

Sebelum memulai

Untuk menghubungkan library klien Go ke Spanner Omni, Anda harus menggunakan konfigurasi IsExperimentalHost: true. Opsi ini menentukan bahwa library terhubung ke deployment Spanner Omni lokal atau on-premise, bukan versi Spanner yang dikelola.

Untuk menggunakan opsi konfigurasi ini, lingkungan Anda harus memenuhi persyaratan berikut:

Komunikasi teks biasa

Untuk membuat komunikasi teks biasa, jalankan kode berikut:

import ("google.golang.org/grpc/credentials/insecure")

adminClient, err := database.NewDatabaseAdminClient(ctx,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
    option.WithEndpoint(OMNI_ENDPOINT),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
)

Koneksi TLS

Untuk membuat koneksi TLS, jalankan kode berikut:

func createClients(ca_certificate, database, omniEndpoint string){
    // TLS CA cert configuration
caCert, err := os.ReadFile(ca_certificate)
    capool := x509.NewCertPool()
capool.AppendCertsFromPEM(caCert)
    creds := credentials.NewTLS(&tls.Config{RootCAs: capool})

    adminClient, err := database.NewDatabaseAdminClient(ctx,
        option.WithEndpoint(omniEndpoint),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
option.WithoutAuthentication(),
)
clientConfig := ClientConfig{
        IsExperimentalHost: true,
    }
databaseClient, err := spanner.NewClientWithConfig(ctx, db,
clientConfig,
        option.WithEndpoint(omniEndpoint),
option.WithoutAuthentication(),
option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
)
}

Koneksi mTLS

Untuk membuat koneksi mTLS, jalankan kode berikut:

func createClients(ca_certificate, client_certificate, client_key, database, omniEndpoint string){
    // mTLS cred configuration
    caCert, err := os.ReadFile(ca_certificate)
        capool := x509.NewCertPool()
        capool.AppendCertsFromPEM(caCert)
        cert := tls.LoadX509KeyPair(client_certificate, client_key)
        creds := credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}, RootCAs: capool})

        adminClient, err := database.NewDatabaseAdminClient(ctx,
            option.WithEndpoint(omniEndpoint),
            option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds))
    )
    clientConfig := ClientConfig{
            IsExperimentalHost: true,
        }
    databaseClient, err := spanner.NewClientWithConfig(ctx, db,
    clientConfig,
            option.WithEndpoint(omniEndpoint),
    option.WithoutAuthentication(),
    option.WithGRPCDialOption(grpc.WithTransportCredentials(creds)),
    )
}