![](/img/trans.png)
[英]Canary - AccessDeniedException: Access to KMS is not allowed
[英]Permissions required for Lambda to access KMS
我正在使用 AWS CDK。
我已经创建了客户管理的 CMK KMS 密钥以在 dynamoDB 表上启用服务器端加密。
KMS 关键政策:
public static getKMSKeyPolicyDocument(): PolicyDocument {
return new PolicyDocument({
statements: [
//Allow root in IAM Policy: https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam
new PolicyStatement({
principals: [new AccountRootPrincipal()],
actions: ["kms:*"],
resources: ["*"],
}),
new PolicyStatement({
principals: [
new ServicePrincipal("dynamodb.amazonaws.com"),
new ServicePrincipal("lambda.amazonaws.com"),
],
actions: [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:Get*",
"kms:List*",
],
resources: ["*"],
}),
],
});
}
一些 Lambda 使用这些发电机数据库表来获取数据。 所以,我的问题是:
我们是否需要再次明确授予每个 lambda 访问 KMS 密钥的权限?
public static grantAccessToKMSKey(role: IRole, kmsKey: IKey): void {
role.addToPrincipalPolicy(
new PolicyStatement({
actions: [
"kms:CreateGrant",
"kms:Decrypt",
"kms:DescribeKey",
"kms:Encrypt",
"kms:GenerateDataKey*",
"kms:ReEncrypt*",
"kms:Get*",
"kms:List*",
],
resources: [kmsKey.keyArn],
})
);
}
您已授权 AWS Lambda 服务访问您的密钥,而不是实际的 lambda function。这对于 lambda function 访问 KMS 密钥既不充分也不需要。
相反,您有两个选择:
如果您的 lambda 和密钥都在同一个帐户中,那么上述两个选项中的任何一个就足够了。 如果它们在不同的帐户中,则您需要同时执行这两项操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.