我们有一个SAM生成的API-网关-Lambda集成堆栈,需要访问RDS数据库(Postgres)。
SAM正在使用我们的功能的自定义角色和附带策略创建必要的CF模板:(“ AWSLambdaVPCAccessExecutionRole”和“ AmazonRDSReadOnlyAccess”)
我们已配置了需要使用DBs VPC的subnetID和安全组连接到数据库的功能,并尝试使用 IAM身份验证进行连接。
我们已经根据目标https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBAccounts.html
在rds_admin角色授予中在目标数据库中创建了PG用户帐户。我们无法使用 Go 的AWS开发工具包连接到RDS数据库。
看起来ARN必须这样做:
从文档中,链接到这里: https://docs.aws.amazon.com/sdk-for-go/api/service/rds/rdsutils/
authToken, err := BuildAuthToken(dbEndpoint, awsRegion, dbUser, awsCreds)
// 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=rds",
dbUser, authToken, dbEndpoint, dbName,
)
// Use db to perform SQL operations on database
db, err := sql.Open("mysql", connectStr)
..除了我们将使用Postgres连接字符串。
但是,如果不创建“长格式” CFN模板并将roleARN作为环境变量传递给我们的lambda函数,我们将无法确定如何配置SDK以承担与执行lambda函数相同的角色。
如果有人可以帮助我解决这个问题,我将非常感激!
预先感谢