Utiliser la bibliothèque cliente Go pour se connecter à Spanner Omni

Ce document explique comment établir des connexions sécurisées à Spanner Omni en configurant la bibliothèque cliente Go. Pour établir ces connexions, vous devez définir des options client lorsque vous créez un client d'administration de base de données ou un client de base de données.

La bibliothèque cliente Go est compatible avec les connexions en texte brut, TLS et mTLS. Pour tous les types de connexion, incluez option.WithoutAuthentication() afin d'empêcher la transmission Google Cloud d'identifiants à un point de terminaison Spanner Omni.

Pour en savoir plus, consultez Premiers pas avec Spanner en Go dans la documentation Spanner.

Avant de commencer

Pour connecter la bibliothèque cliente Go à Spanner Omni, vous devez utiliser la configuration IsExperimentalHost: true. Cette option spécifie que la bibliothèque se connecte à un déploiement local ou sur site de Spanner Omni plutôt qu'à la version gérée de Spanner.

Pour utiliser cette option de configuration, votre environnement doit répondre aux exigences suivantes :

Communication en texte brut

Pour établir une communication en texte brut, exécutez le code suivant :

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

Connexion TLS

Pour établir une connexion TLS, exécutez le code suivant :

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)),
)
}

Connexion mTLS

Pour établir une connexion mTLS, exécutez le code suivant :

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)),
    )
}