Utilizza la libreria client Go per connetterti a Spanner Omni

Questo documento mostra come stabilire connessioni sicure a Spanner Omni configurando la libreria client Go. Queste connessioni vengono stabilite impostando le opzioni client quando crei un client di amministrazione del database o un client di database.

La libreria client Go supporta connessioni in testo non crittografato, TLS e mTLS. Per tutti i tipi di connessione, includi option.WithoutAuthentication() per impedire la trasmissione delle Google Cloud credenziali a un endpoint Spanner Omni.

Per ulteriori informazioni, consulta la guida introduttiva a Spanner in Go nella documentazione di Spanner.

Prima di iniziare

Per connettere la libreria client Go a Spanner Omni, devi utilizzare la configurazione IsExperimentalHost: true. Questa opzione specifica che la libreria si connette a un deployment locale o on-premise di Spanner Omni anziché alla versione gestita di Spanner.

Per utilizzare questa opzione di configurazione, il tuo ambiente deve soddisfare i seguenti requisiti:

Comunicazione in testo non crittografato

Per stabilire una comunicazione in testo non crittografato, esegui il seguente codice:

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

Connessione TLS

Per stabilire una connessione TLS, esegui il seguente codice:

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

Connessione mTLS

Per stabilire una connessione mTLS, esegui il seguente codice:

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