AccessDeniedException:用户无权对资源执行 dynamodb BatchWriteItem:表

Posted

技术标签:

【中文标题】AccessDeniedException:用户无权对资源执行 dynamodb BatchWriteItem:表【英文标题】:AccessDeniedException: User is not authorized to perform dynamodb BatchWriteItem on resource: table 【发布时间】:2018-08-22 00:59:22 【问题描述】:

我正在使用 nodejs、无服务器和 aws dynamodb。我正在尝试创建一个 lambda,在其中调用 API,获取数据(1000 条记录),现在,我想将此数据插入到我的 dynamodb 中。

我为此使用了 batchWrite,并通过创建每个包含 25 个 json 对象的存储桶来使用它。但我收到一个错误:AccessDeniedException: <Username> is not authorized to perform dynamodb BatchWriteItem on resource <table-name>

当我在没有 batchWrite 和单独的 PUT 操作的情况下执行相同操作时,它可以正常工作(但我需要使用批处理,因为这会导致吞吐量超出错误)。

我已将 AWS 中的所有管理权限授予我使用无服务器的用户。

【问题讨论】:

【参考方案1】:

在你的 serverless.yml 文件中,你应该添加一个新角色

    - Effect: Allow
  Action:
    - dynamodb:DescribeTable
    - dynamodb:Query
    - dynamodb:Scan
    - dynamodb:GetItem
    - dynamodb:PutItem
    - dynamodb:UpdateItem
    - dynamodb:DeleteItem
    - dynamodb:BatchWriteItem
  Resource: "arn:aws:dynamodb:$self:custom.region:*:table/*"

【讨论】:

谢谢。我已经想通了。是的,你是对的。 serverless.yml 文件中提到的角色覆盖了我在我的 aws 帐户中设置的权限。所以我添加了上面提到的动作并且它起作用了。 :)【参考方案2】:

这是我在使用 Amplify CLI 项目时的设置方式:


    "Effect": "Allow",
    "Action": [
        "dynamodb:PutItem",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:Scan"
    ],
    "Resource": "arn:aws:dynamodb:*:*:table/*"
,

    "Effect": "Allow",
    "Action": "dynamodb:Query",
    "Resource": "arn:aws:dynamodb:*:*:table/*/index/*"

【讨论】:

谢谢,我更新了 amplify/backend/function/mylambdafunction/mylambdafunction-cloudformation-template.json 文件中的 BatchWriteItem 权限并运行了 amplify push

以上是关于AccessDeniedException:用户无权对资源执行 dynamodb BatchWriteItem:表的主要内容,如果未能解决你的问题,请参考以下文章

AmazonServiceException:用户无权执行:dynamodb:DescribeTable 状态码:400;错误代码:AccessDeniedException

调用扫描操作时如何解决 (AccessDeniedException):用户:arn:aws:sts... 无权执行:dynamodb:Scan on resource.."?

错误代码:AccessDeniedException。用户:arn:aws:iam::xxx:user/xxx 无权执行:lambda:CreateEventSourceMapping on reso

由于错误 AccessDeniedException(Lambda 别名作为 Cognito 触发器),AWS Cognito 用户池引发 PreSignUp 调用失败

gsutil cors set 命令返回 403 AccessDeniedException

AccessDeniedException 上的 HTTP 401 [重复]