AWS Lambda:即使在STS:AssumeRole成功之后,lambda函数仍然使用旧的IAM角色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Lambda:即使在STS:AssumeRole成功之后,lambda函数仍然使用旧的IAM角色相关的知识,希望对你有一定的参考价值。

我创建了一个新的IAM角色,它具有对特定DynamoDb表的访问(扫描/查询)。

我试图从我的lambda函数使用STS Assume Role API调用,以便lambda函数可以访问特定的Dynamo Db表。

假设角色调用成功,我获得了角色ID,AccesskeyId,秘密访问密钥和会话令牌。

当我从我的lambda函数调用时,要访问Dynamo DB,我收到一个错误

AccessDeniedException:User:arn:aws:sts ::>:assume-role / ota-dev-us-east-1-lambdaRole /无权执行:dynamodb:扫描资源:arn:aws:dynamodb:us-east -1:>:表/ <>

我的问题是,即使在Lambda函数中的Role Assume调用成功之后,为什么lambda函数仍然使用旧角色来访问Dynamo DB?

我期待Lambda函数承担新角色,但从日志看起来,它仍然使用较旧的角色。

看起来我错过了介于两者之间的一些步骤。

答案

根据您触发它的方式,STS AssumeRole调用不会自动刷新SDK的AWS.config全局对象中的凭据。

您需要检索AssumeRole返回的访问密钥,会话密钥和会话令牌,并将其传递给您的全局AWS凭证SDK对象。

确切的代码取决于您使用的编程语言,这里是Python的Boto3的文档

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html

另外,我想知道为什么你不能在Lambda执行角色中永久访问DynamoDB表。这是为了限制功能范围,并根据呼叫者的身份在运行时提供细粒度的访问控制?

以上是关于AWS Lambda:即使在STS:AssumeRole成功之后,lambda函数仍然使用旧的IAM角色的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Lambda 中担任角色,在 SSM 调用时拒绝访问

即使配置了过滤器,AWS Lambda 函数也会停止所有实例

即使 IAM 角色具有完整的 Redshift 权限,AWS Lambda 在调用 Redshift 的“CreateCluster”操作时也会出现“拒绝访问”错误

如何授权 lambda 使用 CDK 执行 ses:SendEmail?

lambda 创建事件事件的权限:PutEvents

AWS lambda函数未终止线程