通过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访问。)谢谢。
答案 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"
]
}
}
注意:
以上政策允许针对特定密钥使用所有KMS API,但您可以对其进行调整以获得最低要求的权限。
对于客户管理的CMK,还可以通过IAM策略(以及密钥策略)管理对KMS CMK的权限,因为我们不知道密钥策略,我只是包含了管理选项通过关键政策本身。