【发布时间】:2019-09-05 15:24:51
【问题描述】:
我正在尝试借助“Amazon DynamoDB Encryption Client for Java”将加密数据保存到 DynamoDB。 我还使用无服务器框架来部署我的应用程序(一些使用 DynamoDB 的 lamdba 函数)。 AWS Lamdba 函数是用 Kotlin 编写的。
我在iamRoleStatements 部分的serverless.yml 中有这个(在provider 部分下):
- Effect: “Allow”
Action:
- “kms:GenerateDataKey”
Resource: “*”
我认为应该足够了,但是当我尝试将加密数据保存到 DynamoDB 时出现此错误:
com.amazonaws.services.kms.model.AWSKMSException: User: arn:aws:sts::120102300450:assumed-role/appname-username-eu-west-1-lambdaRole/appname-username-functionname is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:eu-west-1:120102300450:key/12d3f45c-6fff-0007-b123-5bfe5678e012 (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: ...)
(此处对字母数字 ID 进行了混淆处理,以免泄露真实数据)
我还尝试添加其他几个 KMS 权限,但没有帮助:
- Effect: "Allow"
Action:
- "kms:GenerateDataKey"
- "kms:GenerateDataKeyWithoutPlaintext"
- "kms:CreateAlias"
- "kms:CreateKey"
- "kms:Decrypt"
- "kms:Encrypt"
- "kms:EnableKey"
- "kms:UpdateAlias"
Resource: "*"
因此,在这种情况下无法实现“Amazon DynamoDB Encryption Client for Java”的全部目的。
这里缺少什么?
【问题讨论】:
标签: amazon-dynamodb serverless-framework aws-kms