我是Lambda的新手,我正在玩AWS中提供的lambda样本。
在nodeJS 6.10运行时,
dynamo.query({ TableName: 'my_table', KeyConditionExpression: 'id = :id',ExpressionAttributeValues: {':id': '123'} }, done);
错误地显示xxxxLambda is not authorized to perform: dynamodb:Query on resource
。
但是dynamo.scan({ TableName: 'my_table'}, done);
工作正常,PUT操作dynamo.putItem(JSON.parse(event.body), done);
也没有修改我的IAM政策。
BTW,done
变量的定义是
const done = (err, res) => callback(null, {
statusCode: err ? '400' : '200',
body: err ? err.message : JSON.stringify(res),
headers: {
'Content-Type': 'application/json',
},
});
当我附加“AmazonDynamoDBFullAccess”政策时,'查询'也开始正常工作。 但我想知道的是扫描和放置是如何工作但不是查询?
亲爱的downvoter,请添加评论,以便我可以改进我的问题。
答案 0 :(得分:2)
这似乎是一个许可问题。
仔细检查附加到Lambda函数的IAM角色内的IAM策略,无论是具有AmazonDynamoDBFullAccess还是包含“查询”操作的自定义策略。
"Effect": "Allow",
"Action" [
dynamodb:Query
]
答案 1 :(得分:0)
我遇到了同样的问题,但是仅接受的解决方案对我来说不起作用。如果我没有在权限中提供表arn,那么一切都会正常进行,而只是使它适用于所有表。当然可以,但是那不是一个安全的解决方案。
我发现我必须在IAM权限中为要查询的GSI指定arn。因此,我没有为表指定arn,而是为要查询的特定索引指定了arn。然后它起作用了。也许有一个更优雅的解决方案,但这对我有用。