Ane*_*apu 4 amazon-dynamodb amazon-iam aws-lambda serverless lambda-authorizer
我想生成一个自定义策略,该策略提供对 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
Run Code Online (Sandbox Code Playgroud)
我已验证我的自定义授权被调用,并生成各种权限(sts:AssumeRole,lambda:InvokeFunction,execute-api:Invoke,等)所需要的成功调用API处理器。所以我的自定义授权器正在工作,它提供的结果是必要的。
但是,当授权方包含 dynamodb 权限时,例如像 { Effect: "Allow", Action: "dynamodb: ", "Resource": " " }这样的语句
我的 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>
Run Code Online (Sandbox Code Playgroud)
(我注意到投诉是关于索引权限的,因此还尝试为该索引和/或所有索引添加特定权限,但这没有效果。)
经过多次不同尝试后的底线是,完全忽略了自定义授权方颁发的 dynamodb 权限。我的 lambda node.js 代码正在使用 AWS 节点 SDK,它应该从实例环境中获取权限。我认为这将包括自定义授权方生成的权限。
最后,我注意到有关如何加载凭据的AWS javascript SDK 文档仅说明“执行角色为 Lambda 函数提供运行和调用其他 Web 服务所需的凭据”。即,它没有提到由自定义授权方颁发的动态生成的凭据。
这似乎解释了我所看到的行为。我的 API 处理程序仅具有静态定义的执行角色的权限(错误消息也表明了这一点),并且未授予自定义授权方生成的权限。
无论如何要使用我的自定义授权方在我的 API 处理程序中生成的权限?
我认为您误解了 Lambda 授权方的 IAM 策略输出。来自授权方的 IAM 策略输出的目的是反映 API 网关在继续处理请求方面的结果。
返回的策略不一定应用于调用的函数,而是应用于函数的调用。它只是告诉 API Gateway 请求用户有权访问哪些 API。
如果您希望为被调用的 API 函数提供对资源(例如 DynamoDB 表)或任何其他 AWS 资源的特定访问权限,则必须在分配给 Lambda 函数的角色中配置这些资源。否则,您可以指定一个角色,要调用的 Lambda 函数将假定该角色授予它额外的权限。这个角色可以通过来自授权者的上下文参数传递。
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |