DynamoDB,无法保存加密的数据,“未经授权执行:kms:GenerateDataKey on resource”

时间:2019-04-15 15:35:58

标签: amazon-dynamodb serverless-framework aws-kms

我正在尝试通过“适用于Java的Amazon DynamoDB加密客户端”将加密的数据保存到DynamoDB。 我还使用无服务器框架来部署我的应用程序(一些使用DynamoDB的Lamdba函数)。 AWS Lamdba函数是用Kotlin编写的。

我在serverless.yml部分(在iamRoleStatements部分下)的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 Java加密客户端”的全部目的无法实现。

这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。我使用了默认的KMS密钥,并且不得不使用自定义密钥。然后它起作用了。