我创建了一个新的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表。这是为了限制功能范围,并根据呼叫者的身份在运行时提供细粒度的访问控制?