En este documento, se muestra cómo establecer conexiones seguras con Spanner Omni configurando la biblioteca cliente de Go. Estas conexiones se establecen configurando las opciones del cliente cuando creas un cliente administrativo de la base de datos o un cliente de la base de datos.
La biblioteca cliente de Go admite conexiones de texto sin formato, TLS y mTLS. Para todos los tipos de conexión, incluye option.WithoutAuthentication() para evitar la transmisión de credenciales de Google Cloud a un extremo de Spanner Omni.
Para obtener más información, consulta Cómo comenzar a usar Spanner en Go en la documentación de Spanner.
Antes de comenzar
Para conectar la biblioteca cliente de Go a Spanner Omni, debes usar la configuración de IsExperimentalHost: true. Esta opción especifica que la biblioteca se conecta a una implementación local o en las instalaciones de Spanner Omni en lugar de a la versión administrada de Spanner.
Para usar esta opción de configuración, tu entorno debe cumplir con los siguientes requisitos:
La biblioteca cliente de Go debe ser la versión v1.91.0 o posterior.
La versión de Go debe ser 1.25 o posterior.
Comunicación de texto sin formato
Para establecer una comunicación de texto simple, ejecuta el siguiente código:
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())),
)
Conexión TLS
Para establecer una conexión TLS, ejecuta el siguiente código:
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)),
)
}
Conexión mTLS
Para establecer una conexión de mTLS, ejecuta el siguiente código:
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)),
)
}