我正在尝试通过“适用于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加密客户端”的全部目的无法实现。
这里缺少什么?
答案 0 :(得分:0)
我发现了问题所在。我使用了默认的KMS密钥,并且不得不使用自定义密钥。然后它起作用了。