首页 > 解决方案 > 在 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 参数。" }

我应该怎么办?

标签: amazon-web-servicesamazon-dynamodbaws-api-gateway

解决方案


我自己找到的。您根本无法在不指定分区键的情况下发送查询,但您可以定义动态分区键。

您可以使用 API Gateway 上下文变量来传递与您的策略的 LeadingKeys 匹配的 KeyProjectionExpression。就我而言,它是 Cognito Identity:

{
"KeyConditionExpression":"pk=:pk", 
"ExpressionAttributeValues":{":pk":{"S":"$context.identity.cognitoIdentityId"}}
}

此处提供了更完整的 API Gateway 变量列表。


推荐阅读