Amazon web services 如果S3中的代码文件是KMS加密的,AWS CloudData如何访问该文件?

Amazon web services 如果S3中的代码文件是KMS加密的,AWS CloudData如何访问该文件?,amazon-web-services,encryption,amazon-s3,lambda,Amazon Web Services,Encryption,Amazon S3,Lambda,当S3存储桶中的Lambda代码文件未加密时,我通过CloudFormation进行的Lambda函数部署工作正常,但在使用KMS加密代码文件时失败 我有一个AWS CloudFormation堆栈,其中包含Lambda资源。我的Python代码ZIP文件位于S3存储桶中。我的CFN模板中的Lambda资源包含指向zip所在的S3Bucket和S3Key的“Code”属性。bucket策略允许我的角色执行操作s3:GetObject,s3:PutObject,s3:ListBucket。当代码Z

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

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

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


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

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

如果您使用的是客户管理的CMK,则可以将IAM角色作为关键用户引用和添加。如果您使用的是AWS管理的CMK(可通过AWS图标识别),则可以将权限策略添加到IAM角色,如下所示:

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

  • 上述策略允许特定密钥的所有KMS API,但您可以调整它以提供所需的最低权限

  • 对于客户管理的CMK,也可以通过IAM策略(以及密钥策略)管理对KMS CMK的权限,因为我们不知道密钥策略,我只包括了通过密钥策略本身进行管理的选项