如何通过无服务器框架将 BatchWriteItem 权限附加到我的 IAM 角色策略?

How do I attach BatchWriteItem Permission to my IAM role policy via the serverless framework?

嘿,我刚开始使用无服务器,所以我试图尽可能准确地解决我的问题。

我正在使用 AWS AppSyncDynamoDB 解析器来使用 GraphQL 在我的 Amazon DynamoDB table 中存储和检索数据。在我想专门使用 BatchDeleteItem 之前,一切都运行良好。

尽管我在 Serverless.yml 文件中指定了以下内容,但我收到了用户缺少必要权限的错误消息:

Effect: “Allow”

Action:

- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- dynamodb:BatchWriteItem
- dynamodb:BatchDeleteItem

我进入 IAM 管理控制台,发现创建的策略 BatchWriteItem 和 BatchDelteItem 丢失了:

{
“Version”: “2012-10-17”,
“Statement”: [
{
  “Action”: [
    “dynamodb:DeleteItem”,
    “dynamodb:GetItem”,
    “dynamodb:PutItem”,
    “dynamodb:Query”,
    “dynamodb:Scan”,
    “dynamodb:UpdateItem”
  ],
  “Resource”: [
    “arn:aws:dynamodb:eu-central-1:MYID:table/MYTABLENAME”,
    “arn:aws:dynamodb:eu-central-1:MYID:table/MYTABLENAME/*”
  ],
  “Effect”: “Allow”
}
]
}

当我手动向策略添加必要的权限时,一切正常。但对我来说,这个策略是在 serverless.yml 文件和 sls 部署上创建的,这对我来说非常重要。

我是不是漏掉了什么?

谢谢本!

这并没有完全回答您的问题(至少不是询问 "why isn't BatchRead/Write getting attached" 的部分),但在您需要 AWS 托管策略所涵盖的确切权限的情况下,它是一个有效的选项。考虑到这一点,您可以使用 DynamoDB crud policy. 您的政策将如下所示(当附加到资源的政策标签时):

Policies:
- DynamoDBCrudPolicy: 
  TableName: !Ref YourTableName

由于 DynamoDBCrudPolicy 唯一缺少的策略是 DescribeTable,如果需要,您可以尝试单独添加一个。

真正解决我的问题的是 Appsync 的 lambda 函数是通过无服务器 Appsync 插件调用的,并且在此角色中缺少 BatchWriteItem。 我将 package.json 文件中的插件版本更改为 GitHub 版本,该版本已解决此问题,但直到今天才发布。这修复了它: "serverless-appsync-plugin": "https://github.com/sid88in/serverless-appsync-plugin.git#e33b5cfd"