使用Lambda IAM角色访问Amazon RDS for MySQL时出现“拒绝访问”错误。

0

【以下的问题经过翻译处理】 我目前使用AWS Secrets Manager凭据从Amazon EC2 / ECS / Lambda连接到AWS服务(例如Amazon RDS)。我希望改为使用IAM角色进行连接,以便可以进行集中管理。我已经成功将AWS IAM角色附加到EC2实例,并使用令牌将IAM角色连接到Amazon RDS for MySQL DB实例(https://aws.amazon.com/premiumsupport/knowledge-center/users-connect-rds-iam/)。

当我按照使用https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.Java.html中的说明在Lambda函数中采用类似的方法时,我能够生成IAM访问令牌。但是当尝试连接到Amazon RDS时,我会收到'user'@database ip'用户的访问被拒绝的错误。在我的控制台中,当我审查AWS Lambda函数的资源摘要时,我看到AWS Lambda已针对所需资源配置了正确的RDS IAM授权策略。

我期望Lambda执行角色(RDSFullAccess和RDS IAM Auth策略)足以连接到RDS。我有什么遗漏吗?

profile picture
专家
已提问 8 个月前40 查看次数
1 回答
0

【以下的回答经过翻译处理】 你遵循的使用IAM身份验证连接DB实例的说明不适用于AWS Lambda。此文档中的示例代码设置BasicAWSCredentials awsCredentials并获取Amazon RDS授权令牌。如果你需要扮演IAM角色的Lambda函数,这种方法不起作用。

相反,尝试传递一个新的DefaultAWSCredentialsProviderChain,让AWS Lambda运行时获取正确的AWS凭证。例如:

RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
        		    .credentials(new DefaultAWSCredentialsProviderChain())
        		    .region(REGION_NAME)
        		    .build();

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则