如何通过无服务器框架将 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"
嘿,我刚开始使用无服务器,所以我试图尽可能准确地解决我的问题。
我正在使用 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"