我正在尝试在"Amazon DynamoDB Encryption Client for Java“的帮助下将加密数据保存到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: "*"
因此,在这种情况下,“亚马逊DynamoDB加密客户端Java”的整个目的是无法实现的。
这里缺少什么?
发布于 2019-04-16 15:06:36
我找到了问题所在。我使用默认的KMS密钥,并且我必须使用自定义密钥。然后它就成功了。
https://stackoverflow.com/questions/55692683
复制相似问题