Connessione al di istanze DB utilizzando IAM l'autenticazione e il AWS SDK for Go - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessione al di istanze DB utilizzando IAM l'autenticazione e il AWS SDK for Go

È possibile connettersi a un cluster Aurora My o . AWS SDK for Go

Prerequisiti

IAM

Esempi

Per eseguire questi esempi di codice, è necessario il AWS SDK for Gofile, trovato sul AWS sito.

Modifica i valori delle variabili seguenti in base alle esigenze.

  • dbName – Database a cui accedere.

  • dbUser – L'account database cui vuoi accedere.

  • dbHost: l'endpoint dell'istanza database cui vuoi accedere

    Nota

    Non è possibile utilizzare un DNS record Route 53 personalizzato del di istanze DB per generare il token di autenticazione.

  • dbPort – Numero di porta usato per la connessione al cluster

  • region

Inoltre, assicurarsi che le librerie importate nel codice di esempio esistano nel sistema.

Importante

Negli esempi riportati in questa sezione viene utilizzato il codice seguente per fornire credenziali che accedono a un database da un ambiente locale:

creds := credentials.NewEnvCredentials()

Se accedi a un database da un AWS servizio, come Amazon EC2 o AmazonECS, puoi sostituire il codice con il seguente codice:

sess := session.Must(session.NewSession())

creds := sess.Config.Credentials

Se si apporta questa modifica, assicurarsi di aggiungere la seguente importazione:

"github.com/aws/aws-sdk-go/aws/session"

Connessione tramite IAM autenticazione e AWS SDK for Go V2

È possibile connettersi a un di istanze DB utilizzando IAM l'autenticazione e la AWS SDK for Go V2.

Il seguente esempio di codice mostra come generare un token di autenticazione e utilizzarlo per eseguire la connessione a un'istanza del database.

Questo codice si connette a un'istanza MariaDB o SQL My DB.

package main import ( "context" "database/sql" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/feature/rds/auth" _ "github.com/go-sql-driver/mysql" ) func main() { var dbName string = "DatabaseName" var dbUser string = "DatabaseUser" var dbHost string = "mysqldb.123456789012.us-east-1.rds.amazonaws.com" var dbPort int = 3306 var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort) var region string = "us-east-1" cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials) if err != nil { panic("failed to create authentication token: " + err.Error()) } dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true", dbUser, authenticationToken, dbEndpoint, dbName, ) db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Questo codice si connette a un'istanza di Postgre DB. SQL

package main import ( "context" "database/sql" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/feature/rds/auth" _ "github.com/lib/pq" ) func main() { var dbName string = "DatabaseName" var dbUser string = "DatabaseUser" var dbHost string = "postgresmydb.123456789012.us-east-1.rds.amazonaws.com" var dbPort int = 5432 var dbEndpoint string = fmt.Sprintf("%s:%d", dbHost, dbPort) var region string = "us-east-1" cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), dbEndpoint, region, dbUser, cfg.Credentials) if err != nil { panic("failed to create authentication token: " + err.Error()) } dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", dbHost, dbPort, dbUser, authenticationToken, dbName, ) db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Se desideri connetterti a un'istanza database tramite un proxy, consulta Connessione a un proxy mediante autenticazione IAM.

Connessione tramite IAM autenticazione e V1. AWS SDK for Go

È possibile connettersi a un di istanze DB utilizzando IAM l'autenticazione e la AWS SDK for Go V1

Il seguente esempio di codice mostra come generare un token di autenticazione e utilizzarlo per eseguire la connessione a un'istanza del database.

Questo codice si connette a un'istanza MariaDB o SQL My DB.

package main import ( "database/sql" "fmt" "log" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" _ "github.com/go-sql-driver/mysql" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "mysqldb.123456789012.us-east-1.rds.amazonaws.com" dbPort := 3306 dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort) region := "us-east-1" creds := credentials.NewEnvCredentials() authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds) if err != nil { panic(err) } dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?tls=true&allowCleartextPasswords=true", dbUser, authToken, dbEndpoint, dbName, ) db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Questo codice si connette a un'istanza di Postgre DB. SQL

package main import ( "database/sql" "fmt" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" _ "github.com/lib/pq" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "postgresmydb.123456789012.us-east-1.rds.amazonaws.com" dbPort := 5432 dbEndpoint := fmt.Sprintf("%s:%d", dbHost, dbPort) region := "us-east-1" creds := credentials.NewEnvCredentials() authToken, err := rdsutils.BuildAuthToken(dbEndpoint, region, dbUser, creds) if err != nil { panic(err) } dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", dbHost, dbPort, dbUser, authToken, dbName, ) db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Se desideri connetterti a un'istanza database tramite un proxy, consulta Connessione a un proxy mediante autenticazione IAM.