使用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。我有什么遗漏吗?

1 Antwort
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
EXPERTE
beantwortet vor 8 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen