尝试使用基于IAM的令牌连接到rds(mysql)。该角色具有rds-db:connect策略(以及其他策略)。
一个片段显示我如何尝试连接到rds:
cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-west-2"))
if err != nil {
log.Error("Unable to load credentials: %s", err)
}
db_host := "test1-instance-1.cstuff.us-west-2.rds.amazonaws.com:3306"
authToken, err := auth.BuildAuthToken(
context.TODO(),
db_host, // Database Endpoint (With Port)
"us-west-2", // AWS Region
"iamuser", // Database Account
cfg.Credentials,
)
if err != nil {
panic("failed to create authentication token: " + err.Error())
}
fmt.Println(authToken)
// Create the MySQL DNS string for the DB connection
// user:password@protocol(endpoint)/dbname?<params>
connectStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?allowCleartextPasswords=true&tls=true",
"iamuser", authToken, db_host, "db_name",
)
// Use db to perform SQL operations on database
dbdbdb, err := sql.Open("mysql", connectStr)
if err != nil {
panic(err)
}
err = dbdbdb.Ping()
if err != nil {
panic(err)
}
字符串
这让我在'.Ping()'处出现恐慌,并显示消息:panic: tls: failed to verify certificate: x509: certificate signed by unknown authority
不知道为什么我看到这个错误。
顺便说一句-我通常在EKS中运行这个应用程序。它输出的令牌有几百个字符长。当我在EC2中运行同一个应用程序时,它可能是100个字符。为什么?
如果我使用它在EKS中打印的令牌并使用它从EC2连接,它就可以工作。
在EC2中生成的相同令牌不起作用。
错误消息是相同的任何方式。
1条答案
按热度按时间shyt4zoc1#
找到了一个指向答案here的路径:
您需要像这样添加TLS位:
字符串
将此调用添加到sql.Open之前。
型
将DSN中的“tls=true”更改为“tls= rds”。