amazon-web-services - 在 IAM 策略中使用 LeadingKeys 条件时,DynamoDb 上的 KeyConditionExpression 用于“查询所有项目”?
问题描述
我正在 API Gateway 中编写一个集成请求,它应该查询一个 DynamoDb 表。我正在使用特定角色来访问数据库,利用细粒度的访问控制机制,我不知道要使用哪个 KeyConditionExpression。
我想“查询所有项目”,并让 DynamoDb 根据我的 IAM 政策的LeadingKeys 来处理要返回的项目。
到目前为止,我尝试了一个简单的方法:
{"ProjectionExpression": "sortKey", "ConsistentRead": false, "TableName": "testTable"}
但这可以预见地失败了:
{ "__type": "com.amazon.coral.validate#ValidationException",
"message": "必须在请求中指定 KeyConditions 或 KeyConditionExpression 参数。" }
我应该怎么办?
解决方案
我自己找到的。您根本无法在不指定分区键的情况下发送查询,但您可以定义动态分区键。
您可以使用 API Gateway 上下文变量来传递与您的策略的 LeadingKeys 匹配的 KeyProjectionExpression。就我而言,它是 Cognito Identity:
{
"KeyConditionExpression":"pk=:pk",
"ExpressionAttributeValues":{":pk":{"S":"$context.identity.cognitoIdentityId"}}
}
此处提供了更完整的 API Gateway 变量列表。
推荐阅读
- ansible - Ansible - wait_for 空文件
- spring - 如何创建bean?
- android - 无法从 assets 文件夹中复制 sdcard 中的文件
- java - Spring Async 不并行执行任务
- c# - 我想从我的资源中更改 asp 中的 textButton
- javascript - 带有 Framework 7 的 Cordova 应用程序在 iPhone X / XR / XS 上显示问题
- java - java 8:如果在映射键中找不到元素,则从列表中删除元素
- node.js - 内部 promise 的 then() 子句中未调用外部 resolve()
- javascript - .js 创建(由 Webassembly 和 emscripten)只工作一次
- javascript - ExpressJS - 不会将新用户发布到 MongoDB(500 内部服务器错误)