我创建了一个新的IAM角色,该角色可以访问(扫描/查询)特定的DynamoDb表。
我试图通过lambda函数使用STS假定角色API调用,以便lambda函数可以访问特定的Dynamo Db表。
假设角色调用成功,我获得了角色ID,AccesskeyId,秘密访问密钥和会话令牌。
当我从lambda函数进行调用以访问Dynamo数据库时,出现错误
AccessDeniedException:用户: arn:aws:sts ::>:assumed-role / ota-dev-us-east-1-lambdaRole / 无权执行:dynamodb:扫描资源: arn:aws:dynamodb:us-east-1:>:table / <>
我的问题是,即使在Lambda函数中的角色假设调用成功之后,为什么lambda函数仍使用较旧的角色来访问Dynamo DB?
我期望Lambda函数承担新角色,但是从看起来的日志来看,它仍在使用旧角色。
好像我之间缺少一些步骤。
答案 0 :(得分:1)
STS AssumeRole
调用(取决于触发方式)不会自动刷新SDK的AWS.config全局对象中的凭据。
您需要检索AssumeRole
返回的访问密钥,会话密钥和会话令牌,并将其传递给全局AWS凭证SDK对象。
确切的代码将取决于您使用的编程语言,这是Python的Boto3的文档
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html
从侧面说,我想知道为什么您不授予Lambda执行角色中的DynamoDB表永久访问权限。这是根据调用者的身份限制功能范围并在运行时提供精细的访问控制吗?