首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从本地lambda函数访问db时,用户无权执行:dynamodb:查询资源错误

从本地lambda函数访问db时,用户无权执行:dynamodb:查询资源错误
EN

Stack Overflow用户
提问于 2020-08-30 16:09:00
回答 1查看 583关注 0票数 0

我正在尝试使用SAM模板和运行时node.js在本地运行一个新创建的lambda函数。我有以下几点:

a)拥有region、accessKeyId & secretAccessKey的aws帐户b) aws-cli、aws-sam、docker

使用sam本地调用在本地运行lambda函数是很好的,但问题是当我在函数中连接到dynamodb时,得到以下错误。

代码语言:javascript
复制
{"message":"User: arn:aws:iam::*********:user/test.user is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-west-2:********:table/my_table with an explicit deny","code":"AccessDeniedException","time":"2020-08-30T07:45:51.678Z","requestId":"7SIBTHTKDSSDJNSTLNUSSBHDNDHBSMVJF66Q9ASUAAJG","statusCode":400,"retryable":false,"retryDelay":40.84164538820391}

我有权访问亚马逊网络服务的帐户,并有accessKeyId和secretAccessKey,并能够查询时,尝试从亚马逊网络服务控制台。在vscode编辑器中,安装了aws-toolkit并添加了凭据,但在本地仍然收到相同的错误。

有没有人能帮我解决这个问题,因为我正在经历一个困难的情况来寻找解决方案。这是我的代码片段。

代码语言:javascript
复制
let response;
const AWS = require('aws-sdk');
AWS.config.update({
    region: "us-west-2",
    accessKeyId: '************',
    secretAccessKey: '********************'
});
const dbClient = new AWS.DynamoDB.DocumentClient();


exports.lambdaHandler = async (event, context) => {
    try {

        let myTable = await getData(event.myId);
        response = {
            'statusCode': 200,
            'body': JSON.stringify({
                message: myTable 
            })
        }
    } catch (err) {
        console.log(err);
        return err;
    }
    return response
};


const MY_TABLE_NAME = "my_table";

const getData = async (myId) => {
    const params = {
        TableName: MY_TABLE_NAME ,
        KeyConditionExpression: "#uid = :id",
        ExpressionAttributeValues: {
            ':id': myId
        },
        ExpressionAttributeNames: {
            '#uid': 'userID'
        }
    };

    let { Count, Items } = await dbClient.query(params).promise();
    if (Items.length == 0) {
        return false;
    } else {
        var obj = {
            Name: (Count > 0) ? Items[0].name : null,
            MY_TABLE: MY_TABLE
        };
        return obj;
    }
};

template.yaml

代码语言:javascript
复制
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info 
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Policies: AmazonDynamoDBFullAccess
      Events:
        HelloWorld:
          Type: Api # More info
          Properties:
            Path: /hello
            Method: get

任何帮助都将不胜感激。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 10:29:54

我收到用户未授权错误的原因是因为我没有编程访问权限,只有授权访问aws控制台访问权限。

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63655327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档