如何在AWS上担任角色并连接到Postgres RDS

时间:2018-12-09 10:16:14

标签: amazon-web-services go aws-lambda aws-sdk-go serverless-application-model

我们有一个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函数相同的角色。

如果有人可以帮助我解决这个问题,我将非常感激!

预先感谢

0 个答案:

没有答案