Lambda函数无法在CMK上执行CreateAlias操作。

0

【以下的问题经过翻译处理】 客户希望在AWS所有区域中使用KMS创建客户主密钥(CMK)。他们还希望在不同区域使用相同的别名来标识他们的CMK。为此,他们有一个CloudFormation模板。但是,CloudFormation不支持指定密钥别名,http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html

他们考虑了在CloudFormation中使用CustomResource来调用Lambda函数。该函数接受密钥ID和别名名称,然后尝试在给定的密钥ID上应用别名。不幸的是,Lambda无法访问执行CreateAlias或任何KMS API。似乎KMS特定的密钥策略没有指定Lambda ARN的方法,它当前仅支持IAM用户或IAM角色。

我想知道是否有其他人在过去遇到过类似的问题,如果是,你采取了什么解决方案?此外,请建议我们是否遗漏了任何文档、特性或最佳实践,以实现上述用例。

1 回答
0

【以下的回答经过翻译处理】 使用aws:userid策略变量IAM策略条件,可以为假定角色用户授予权限的解决方法。该方法在AWS博客文章中概述了。对于KMS/Lamba特定的方法,需要执行以下步骤:

  1. 创建一个新角色作为Lambda的执行角色(例如:lambda_test_kms_execution)。
  2. 确保执行角色具有创建别名的权限。
{
            "Effect": "Allow",
            "Action": "kms:CreateAlias",
            "Resource": "*"
        }
  1. 使用AWS CLI获取角色的唯一RoleId。
aws iam get-role --role-name lambda_test_kms_execution

假设输出中包含 "RoleId": "ARO1234567890" 4. 在KMS键策略中添加语句,使用条件来匹配aws:userid与唯一RoleId。

{ "Sid": "Deny IAM User Permissions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "kms:CreateAlias", "Resource": "*", "Condition": { "StringNotLike": { "aws:userid": "ARO1234567890:*" } } }
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则