【问题标题】:How can AWS CloudFormation Lambda resource access code file in S3 if it is KMS encrypted?如果是 KMS 加密,AWS CloudFormation Lambda 资源如何访问 S3 中的代码文件?
【发布时间】:2018-06-14 08:04:08
【问题描述】:

我通过 CloudFormation 部署的 Lambda 函数在 S3 存储桶中的 Lambda 代码文件未加密时工作正常,但在我使用 KMS 加密代码文件时失败。

我有包含 Lambda 资源的 AWS CloudFormation 堆栈。我的 Python 代码 ZIP 文件位于 S3 存储桶中。我的 CFN 模板中的 Lambda 资源包含指向 zip 所在的 S3Bucket 和 S3Key 的“代码”属性。存储桶策略允许我的角色执行s3:GetObjects3:PutObjects3:ListBucket 的操作。当代码 ZIP 文件未加密时,堆栈构建工作正常。但是当我在存储桶中使用 KMS 加密的 zip 文件时,我得到了错误:

“您的访问已被 S3 拒绝,请确保您的请求凭据具有对 my-bucket/my-folder/sample.zip 的 GetObject 的权限。S3 错误代码:AccessDenied。S3 错误消息:访问被拒绝”

我是否需要增强我的 S3 存储桶策略以支持访问 KMS 加密文件?这是怎么做的? (错误消息似乎具有误导性,因为我的存储桶策略已经允许我的角色 GetObject 访问。)谢谢。

【问题讨论】:

    标签: amazon-web-services encryption amazon-s3 lambda


    【解决方案1】:

    由于您几乎可以确定加密对象的请求失败,因此您必须授予您所指的“角色”使用 KMS CMK 的权限,并且必须通过 KMS 密钥策略(和/或 IAM 策略)。

    如果您使用的是客户管理的 CMK,那么您可以参考 here 并将 IAM 角色添加为关键用户。如果您使用 AWS 托管 CMK(可通过 AWS 图标识别),您可以将权限策略添加到 IAM 角色,如下所示:

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": [
          "kms:*"
        ],
        "Resource": [
          "arn:aws:kms:*:account_id:key/key_id"
        ]
      }
    }
    

    注意:

    1. 以上策略允许特定密钥的所有 KMS API,但您可以对其进行调整以提供最低要求的权限。

    2. 对于客户管理的 CMK,还可以通过 IAM 策略(以及密钥策略)管理对 KMS CMK 的权限,因为我们不知道密钥策略,所以我只包含了通过密钥管理的选项政策本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 2019-03-29
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多