Я пытаюсь сохранить зашифрованные данные в DynamoDB с помощью «Amazon DynamoDB Encryption Client для Java».
Я также использую Serverless Framework для развертывания моего приложения (некоторые функции Lamdba используют DynamoDB). Функции 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: ...)
(буквенно-цифровые идентификаторы здесь скрыты, чтобы не раскрывать реальные данные)
Я также попытался добавить несколько других разрешений KMS, но это не помогло:
- Effect: "Allow"
Action:
- "kms:GenerateDataKey"
- "kms:GenerateDataKeyWithoutPlaintext"
- "kms:CreateAlias"
- "kms:CreateKey"
- "kms:Decrypt"
- "kms:Encrypt"
- "kms:EnableKey"
- "kms:UpdateAlias"
Resource: "*"
Таким образом, в этом случае невозможно достичь цели «клиента шифрования Amazon DynamoDB для Java».
Чего здесь не хватает?