我创建了一个新的IAM角色,该角色具有访问(扫描/查询)特定的dynamodb表。
我正在尝试使用STS假设我的lambda函数中的角色API调用,以便lambda函数可以访问特定的Dynamo DB表。
假设角色调用成功,我得到了角色ID,AccessKeyID,Secret Access键和会话令牌。
当我从lambda函数打电话时,要访问Dynamo DB,我会遇到错误
AccessDeniedException:用户: ARN:AWS:STS ::>:假定的词/ota-dev-us-east-1-lambdarole/ 无权执行:DynamoDB:在资源上扫描: ARN:AWS:dynamodb:us-east-1:>:table/<>
我的问题是,即使角色假设呼叫在lambda函数中成功,为什么lambda函数仍在使用旧角色访问dynamo db?
?我期望lambda函数扮演新角色,但是从看起来看起来仍然使用的日志中,它仍在使用旧角色。
看起来我缺少两者之间的步骤。
sts AssumeRole
调用,具体取决于您的触发方式,不会自动在sdk的aws.config全局对象中刷新凭据。
您需要检索AssumeRole
返回的访问密钥,会话密钥和会话令牌并将其传递给您的全局AWS凭据SDK对象。
确切的代码将取决于您使用的编程语言,这是Python的Boto3
的文档https://boto3.amazonaws.com/v1/documentation/api/latest/guide/guide/configuration.html
在旁注上,我想知道为什么您不在Lambda执行角色中永久访问DynamoDB表。这是为了限制功能触及范围并根据呼叫者的身份在运行时提供细粒度的访问控制?