在通过 SAM/CloudFormation 管理的 Lambda 函数中使用现有的 KMS 密钥

Use already existing KMS key in Lambda functions that are managed through SAM/CloudFormation

情况是:
使用 SAM/CloudFormation 创建 lambda 函数。附加了一个策略以允许此函数访问现有存储桶(在同一区域中)。这看起来像这样:

  MyFunction:

    Type: AWS::Serverless::Function
    Properties:
    .....
    Policies:
        - Statement:
          - Effect: Allow
            Action:
              - "s3:ListBucket"
              - "s3:PutObject"
              - "s3:GetObject"

            Resource: 
              - "arn:aws:s3:::my-great-existing-bucket"
              - "arn:aws:s3:::my-great-existing-bucket/*"

这意味着:在不修改现有存储桶策略的情况下,新创建的 lambda 函数现在可以访问该存储桶。

但在这种情况下,这个已经存在的存储桶使用现有的客户管理的 KMS 密钥(同样在同一区域)进行了额外加密,因此访问 Lambda 函数仍然会被拒绝。
我们的目标是将使用现有密钥的策略也直接添加到云形成模板中。
我发现了这个 link: https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html

我的解释是,指定的目标通常只能以相反的方式实现: 您需要修改 KMS 密钥的策略。但是它们的密钥当然不是通过 Cloud Formation Stack 管理的,因此在这里无法管理(或者我错了吗?)。

所以实现它的唯一方法是为 KMS 密钥激活通用 IAM 策略? https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam
这样理解对吗?

So the only way to achieve it would be to activate general IAM Policies for the KMS-key?

是的。 正确。如果您的客户管理的 KMS 密钥没有它,您必须修改 KMS 策略以允许 lambda 角色。如果您激活通用 IAM 策略,那么您只需修改具有 KMS 密钥权限的 lambda 执行角色。