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

时间:2019-02-25 16:14:48

标签: amazon-web-services amazon-iam serverless

嘿,我刚开始使用Serverless,所以我试图尽可能精确地解决我的问题。

我正在使用AWS AppSyncDynamoDB解析器来使用GraphQL在我的Amazon DynamoDB表中存储和检索数据。一切运行良好,直到我想使用Batch操作(特别是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部署的。

我在这里想念东西吗?

感谢Ben!

2 个答案:

答案 0 :(得分:0)

这不能完全回答您的问题(至少不是问“为什么不批处理读/写”的部分),但这在您需要由AWS托管策略。考虑到这一点,您可以使用DynamoDB crud policy. 您的政策将如下所示(附在资源的“政策”标签上)

Policies:
- DynamoDBCrudPolicy: 
  TableName: !Ref YourTableName

由于缺少DynamoDBCrudPolicy唯一的策略是DescribeTable,因此可以根据需要尝试单独添加该策略。

答案 1 :(得分:0)

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