【发布时间】:2018-10-11 23:16:47
【问题描述】:
我想生成一个自定义策略,为 AWS 自定义授权方内的 DynamoDB 表提供 fine grained access。这可能吗?
在无服务器中,我的配置如下所示:
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
我已验证正在调用我的自定义授权方,并且成功调用 API 处理程序需要它生成的各种权限(sts:AssumeRole、lambda:InvokeFunction、execute-api:Invoke 等)。所以我的自定义授权器正在工作,它提供的结果是必要的。
但是,当授权方包含 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 node.js 代码正在使用 AWS 节点 SDK,它应该从实例环境中获取权限。我假设这将包括自定义授权者生成的权限。
最后,我注意到AWS javascript SDK documentation on how credentials are loaded 只说“执行角色为 Lambda 函数提供运行和调用其他 Web 服务所需的凭据”。即,它没有提及自定义授权方发布的动态生成的凭据。
这似乎解释了我所看到的行为。我的 API 处理程序仅具有来自静态定义的执行角色的权限(错误消息也表明了这一点),并且未授予自定义授权者生成的权限。
是否可以使用我的自定义授权方在我的 API 处理程序中生成的权限?
【问题讨论】:
-
我有同样的期望,它是为 any 资源而不仅仅是 api 网关的动态策略生成,并且 lambda 将在动态策略下执行。在 AWS 文档中应该更清楚。
标签: aws-lambda amazon-dynamodb amazon-iam serverless lambda-authorizer