我想生成一个自定义策略,该策略提供
fine grained access
到AWS自定义授权器中的DynamoDB表。这可能吗?
在serverless中,我的配置如下所示:
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:AssumeRole
,则,
lambda:InvokeFunction
,则,
execute-api:Invoke
,以及其他)是成功调用API处理程序所必需的。因此,我的自定义授权器正在工作,它提供的结果是必要的。
但是,当授权人包括dynamodb权限时,例如
{效果:“允许”,动作:“发电机B:
“,”资源“:”
“}
我的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节点SDK,它应该从实例环境中获取权限。我假设这将包括自定义授权人生成的权限。
最后,我注意到
AWS javascript SDK documentation on how credentials are loaded
仅表示“执行角色为Lambda函数提供运行和调用其他web服务所需的凭据”。一、 例如,它没有提到由自定义授权者发布的动态生成的凭据。
这似乎可以解释我看到的行为。我的API处理程序仅具有静态定义的执行角色的权限(错误消息也表明了这一点),并且没有授予自定义授权者生成的权限。
是否仍然可以使用自定义授权人在API处理程序中生成的权限?