Connexion à votre d’instances de base de données à l'aide de l'authentification IAM et de AWS SDK for Go - Amazon Relational Database Service

Connexion à votre d’instances de base de données à l'aide de l'authentification IAM et de AWS SDK for Go

Vous pouvez vous connecter à une instance de base de données RDS for MySQL ou RDS for PostgreSQL avec AWS SDK for Go, comme décrit ci-après.

Les conditions préalables à la connexion à votre instance de base de données à l'aide de l'authentification IAM sont les suivantes :

Pour exécuter cet exemple de code, vous avez besoin de AWS SDK for Go, disponible sur le site AWS.

Modifiez la valeur des variables suivantes selon les besoins :

  • dbName – La base de données à laquelle vous souhaitez accéder.

  • dbUser – Le compte de base de données auquel vous souhaitez accéder.

  • dbHost – Le point de terminaison du d’instances de base de données auquel vous souhaitez accéder.

  • dbPort – Le numéro du port utilisé lors de la connexion au d'instances de base de données.

  • region – La région AWS où le d'instances de base de données s'exécute.

En outre, assurez-vous que les bibliothèques importées dans l'exemple de code existent sur votre système.

Important

Les exemples de cette section utilisent le code suivant pour fournir des informations d'identification qui accèdent à une base de données à partir d'un environnement local :

creds := credentials.NewEnvCredentials()

Si vous accédez à une base de données à partir d'un service AWS, tel que Amazon EC2 ou Amazon ECS, vous pouvez remplacer le code par le code suivant :

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

creds := sess.Config.Credentials

Si vous effectuez cette modification, assurez-vous d'ajouter l'importation suivante :

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

Connexion à l'aide de l'authentification IAM et de AWS SDK for Go V2

Vous pouvez vous connecter à un cluster d’instance à l’aide de l’authentification IAM et de AWS SDK for Go V2.

Création d'un jeton d'authentification IAM

Le package d'authentification fournit des utilitaires pour la génération de jetons d'authentification nécessaires à la connexion aux instances de base de données Amazon RDS MySQL et PostgreSQL. À l'aide de la méthode BuildAuthToken, vous générez un jeton d'autorisation de base de données en fournissant le point de terminaison de base de données, la région AWS, le nom d'utilisateur et une implantation aws.CredentialProvider qui renvoie les informations d'identification IAM avec autorisation pour se connecter à la base de données à l'aide de l'authentification de base de données IAM.

L'exemple suivant montre comment utiliser BuildAuthToken pour créer un jeton d'authentification pour la connexion à une instance de base de données MySQL.

package main import "context" import "github.com/aws/aws-sdk-go-v2/config" import "github.com/aws/aws-sdk-go-v2/feature/rds/auth" func main() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), "mydb.123456789012.us-east-1.rds.amazonaws.com:3306", // Database Endpoint (With Port) "us-east-1", // AWS Region "jane_doe", // Database Account cfg.Credentials, ) if err != nil { panic("failed to create authentication token: " + err.Error()) } }

L'exemple suivant montre comment utiliser BuildAuthToken pour créer un jeton d'authentification pour la connexion à une instance de base de données PostgreSQL.

package main import "context" import "github.com/aws/aws-sdk-go-v2/config" import "github.com/aws/aws-sdk-go-v2/feature/rds/auth" func main() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), "mydb.123456789012.us-east-1.rds.amazonaws.com:5432", // Database Endpoint (With Port) "us-east-1", // AWS Region "jane_doe", // Database Account cfg.Credentials, ) if err != nil { panic("failed to create authentication token: " + err.Error()) } }

Connexion à votre instance de base de données

L'exemple de code suivant montre comment créer un jeton d'authentification, puis l'utiliser pour se connecter à un d'instances de base de données.

Ce code se connecte à une instance de base de données MySQL.

package main import "context" import "github.com/aws/aws-sdk-go-v2/config" import "github.com/aws/aws-sdk-go-v2/feature/rds/auth" func main() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), "mydb.123456789012.us-east-1.rds.amazonaws.com:3306", // Database Endpoint (With Port) "us-east-1", // AWS Region "jane_doe", // Database Account 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, authToken, dbEndpoint, dbName, ) db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Ce code se connecte à une instance de base de données PostgreSQL.

package main import "context" import "github.com/aws/aws-sdk-go-v2/config" import "github.com/aws/aws-sdk-go-v2/feature/rds/auth" func main() { cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { panic("configuration error: " + err.Error()) } authenticationToken, err := auth.BuildAuthToken( context.TODO(), "mydb.123456789012.us-east-1.rds.amazonaws.com:5432", // Database Endpoint (With Port) "us-east-1", // AWS Region "jane_doe", // Database Account 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, authToken, dbName, ) db, err := sql.Open("postgres", dsn) if err != nil { panic(err) } err = db.Ping() if err != nil { panic(err) } }

Connexion à l'aide de l'authentification IAM et de AWS SDK for Go V1.

Vous pouvez vous connecter à un cluster d’instance à l’aide de l’authentification IAM et de AWS SDK for Go V1

Création d'un jeton d'authentification IAM

Vous pouvez utiliser le package rdsutils pour générer des jetons utilisés pour vous connecter à und'instances de base de données. Appelez la fonction BuildAuthToken pour générer un jeton. Fournissez le point de terminaison d'instance de base de données, la région AWS, le nom d'utilisateur et les informations d'identification IAM pour générer le jeton pour la connexion à un d'instances de bases de données avec les informations d'identification IAM.

L'exemple suivant montre comment utiliser BuildAuthToken pour créer un jeton d'authentification pour la connexion à une instance de base de données MySQL.

package main import ( "database/sql" "fmt" "log" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "mydb.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 { log.Fatalf("failed to build auth token %v", err) } }

L'exemple suivant montre comment utiliser BuildAuthToken pour créer un jeton d'authentification pour la connexion à une instance de base de données PostgreSQL.

package main import ( "database/sql" "fmt" "log" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/rds/rdsutils" ) func main() { dbName := "app" dbUser := "jane_doe" dbHost := "mydb.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 { log.Fatalf("failed to build auth token %v", err) } }

Connexion à votre instance de base de données

L'exemple de code suivant montre comment créer un jeton d'authentification, puis l'utiliser pour se connecter à un d'instances de base de données.

Ce code se connecte à une instance de base de données MySQL.

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 := "mydb.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) } }

Ce code se connecte à une instance de base de données PostgreSQL.

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 := "mydb.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) } }