如果对KMS进行加密,AWS CloudFormation Lambda资源如何在S3中访问代码文件?

时间:2018-01-04 14:55:06

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

由于您几乎可以确定请求对加密对象失败,您必须提供您所指的使用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的权限,因为我们不知道密钥策略,我只是包含了管理选项通过关键政策本身。