Connexion à votre instance de base de données à l'aide de l'authentification IAM et de AWS SDK pour Go
Vous pouvez vous connecter à une instance de base de données RDS pour MariaDB, MySQL ou PostgreSQL avec l'AWS SDK pour Go, comme décrit ci-après.
Prérequis
Les conditions préalables à la connexion à votre instance de base de données à l'aide de l'authentification IAM sont les suivantes :
Exemples
Pour exécuter cet exemple de code, vous avez besoin de AWS SDK pour Go
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 de l'instance de base de données à laquelle vous souhaitez accéder.Note
Vous ne pouvez pas utiliser un enregistrement DNS Route 53 personnalisé à la place du point de terminaison de l'instance de base de données pour générer le jeton d'authentification.
-
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ù l'instance 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"
Rubriques
Connexion à l'aide de l'authentification IAM et de AWS SDK pour Go V2
Vous pouvez vous connecter à un cluster d'instance à l'aide de l'authentification IAM et de AWS SDK pour Go V2.
Les exemples de code suivants montre comment générer un jeton d'authentification, puis comment l'utiliser pour se connecter à une instance de base de données.
Ce code se connecte à une instance de base de données MariaDB ou MySQL.
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 =3306var 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) } }
Ce code se connecte à une instance de base de données PostgreSQL.
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 =5432var 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) } }
Si vous souhaitez vous connecter à une instance de bases de données via un proxy, consultez Connexion à un proxy à l'aide de l'authentification IAM.
Connexion à l'aide de l'authentification IAM et de AWS SDK pour Go V1.
Vous pouvez vous connecter à un cluster d'instance à l'aide de l'authentification IAM et de AWS SDK pour Go V1
Les exemples de code suivants montre comment générer un jeton d'authentification, puis comment l'utiliser pour se connecter à une instance de base de données.
Ce code se connecte à une instance de base de données MariaDB ou 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 := "mysqldb.123456789012.us-east-1.rds.amazonaws.com" dbPort :=3306dbEndpoint := 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 := "postgresmydb.123456789012.us-east-1.rds.amazonaws.com" dbPort :=5432dbEndpoint := 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) } }
Si vous souhaitez vous connecter à une instance de bases de données via un proxy, consultez Connexion à un proxy à l'aide de l'authentification IAM.