我是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',
},
});
编辑
我的lambda-am原始角色:
- awslambdamicroserviceexecutionrole-xxxx
- awslambdabasicexecutionrole-xxxx-xxxx-xxx-xx-xx-xx
当我附上" Amazondynamodbfulllaccess"策略时,'查询'也开始工作正常。,但我想知道的是扫描和放置的工作方式但不查询?
edit-2
亲爱的下降器,请添加评论,以便我可以提高问题。
这似乎是一个权限问题。
仔细检查lambda函数附加的IAM角色内的IAM策略,无论它具有AmazondynamodBfullaccess还是自定义策略,包括授予的"查询"操作。
"Effect": "Allow",
"Action" [
dynamodb:Query
]
我也遇到了同样的问题,但是仅接受的解决方案对我不起作用。如果我没有在权限中提供桌子上的桌子,而是让它适合所有桌子,那么我一切正常。当然,它有效,但这几乎不是一个安全的解决方案。
我发现我必须在IAM许可中为GSI指定ARN。因此,我没有为表格指定ARN,而是为要查询的特定索引指定了ARN。然后它起作用。也许有一个更优雅的解决方案,但这对我有用。