Lambda无权执行:DynamoDB:在资源上查询 - 但扫描效果很好



我是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原始角色:

  1. awslambdamicroserviceexecutionrole-xxxx
  2. awslambdabasicexecutionrole-xxxx-xxxx-xxx-xx-xx-xx

当我附上" Amazondynamodbfulllaccess"策略时,'查询'也开始工作正常。,但我想知道的是扫描和放置的工作方式但不查询?

edit-2

亲爱的下降器,请添加评论,以便我可以提高问题。

这似乎是一个权限问题。

仔细检查lambda函数附加的IAM角色内的IAM策略,无论它具有AmazondynamodBfullaccess还是自定义策略,包括授予的"查询"操作。

  "Effect": "Allow",
  "Action" [
        dynamodb:Query
   ]

我也遇到了同样的问题,但是仅接受的解决方案对我不起作用。如果我没有在权限中提供桌子上的桌子,而是让它适合所有桌子,那么我一切正常。当然,它有效,但这几乎不是一个安全的解决方案。

我发现我必须在IAM许可中为GSI指定ARN。因此,我没有为表格指定ARN,而是为要查询的特定索引指定了ARN。然后它起作用。也许有一个更优雅的解决方案,但这对我有用。

相关内容

  • 没有找到相关文章