Как взять на себя роль и подключиться к postgres RDS на AWS
У нас есть сгенерированный SAM SAM-Gateway - стек интеграции Lambda, которому необходим доступ к базе данных RDS (Postgres).
SAM создает необходимый шаблон CF с пользовательской ролью и политиками сопутствующих функций для наших функций: ('AWSLambdaVPCAccessExecutionRole' & 'AmazonRDSReadOnlyAccess')
Мы настроили функции, которые должны подключаться к БД с помощью идентификаторов подсети и группы безопасности БД VPC, и пытаемся подключиться с использованием аутентификации IAM.
Мы создали учетную запись пользователя PG в целевой БД с предоставлением роли rds_admin согласно: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.DBAccounts.html
Чего мы не можем сделать, так это подключиться к RDS DB, используя AWS SDK для Go.
Похоже, что роль 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 и передачи role ARN в качестве переменной среды в нашу лямбда-функцию мы не сможем выяснить, как настроить SDK для выполнения той же роли, что и для выполнения лямбда-функции.
Если кто-нибудь может помочь со мной разобраться, я был бы очень благодарен!
заранее спасибо