如何在我的 lambda 代码中使用 AWS 自定义授权方中生成的权限?



我想生成一个自定义策略,该策略提供对 AWS 自定义授权方中 DynamoDB 表的精细访问。 这可能吗?

在无服务器中,我的配置如下所示:

functions:
APIAuthorizer:
handler: src/services/auth/handlers.apiAuthorizer
cors: true
GraphQLAPI:
handler: src/services/graphql/handlers.apiHandler
events:
- http:
path: "/api"
method: post
cors: true
authorizer:
name: APIAuthorizer
type: request
resultTtlInSeconds: 0

我已经验证了我的自定义授权方是否正在被调用,并且它生成的各种权限(sts:AssumeRolelambda:InvokeFunctionexecute-api:Invoke等(是成功调用 API 处理程序所必需的。 所以我的自定义授权方正在工作,它提供的结果是必要的。

但是,当授权方包含dynamodb权限时,例如,像 { 效果: "允许", 操作: "dynamodb:", ">资源": ">}

我的 API 处理程序(GraphQLAPI 函数(失败,并显示如下消息

User: arn:aws:sts::<myaccountid>:assumed-role/<mydefaultrole>/myservice-mystage-GraphQLAPI is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:<myaccountId>:table/<mytable>/index/<someIndex> 

(我注意到投诉是关于索引权限的,因此还尝试为该索引和/或所有索引添加特定权限,但这没有效果。

经过许多不同的尝试,底线是完全忽略自定义授权方颁发的 dynamodb 权限。我的 lambda 节点.js代码使用的是 AWS 节点开发工具包,该开发工具包应从实例环境中获取权限。我认为这将包括自定义授权方生成的权限。

最后,我注意到 AWS JavaScript 开发工具包文档中关于如何加载凭证的文档只说"执行角色为 Lambda 函数提供运行和调用其他 Web 服务所需的凭证"。 也就是说,它没有提到自定义授权方颁发的动态生成的凭据。

这似乎解释了我所看到的行为。我的 API 处理程序仅具有静态定义的执行角色的权限(错误消息也指示这一点(,并且未被授予自定义授权方生成的权限。

是否可以使用我的自定义授权方在我的 API 处理程序中生成的权限?

我认为您误解了 Lambda 授权方的 IAM 策略输出。授权方输出的 IAM 策略的目的是反映 API 网关在继续处理请求方面应得出的结果。

返回的策略不一定应用于调用的函数,但应用于函数的调用。它只是告诉 API 网关请求用户有权访问哪些 API。

如果您希望向被调用的 API 函数授予对资源(如 DynamoDB 表或任何其他 AWS 资源(的特定访问权限,则必须在分配给 Lambda 函数的角色中配置这些资源。否则,您可以指定要调用的 Lambda 函数将假定向其授予额外权限的角色。此角色可以通过授权方的上下文参数传递。

最新更新