繁体   English   中英

Lambda访问KMS所需权限

[英]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 密钥既不充分也不需要。

相反,您有两个选择:

  1. 更新 KMS 策略并使用您的 lambda function arn 作为委托人
  2. 更新 lambda iam 角色策略以访问 KMS 密钥

如果您的 lambda 和密钥都在同一个帐户中,那么上述两个选项中的任何一个就足够了。 如果它们在不同的帐户中,则您需要同时执行这两项操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM