标题说明了一切。每当我尝试通过 AWS CloudFormation 模板创建 KMS key 时,都会收到此错误。我以具有管理权限的 IAM 用户身份创建模板,并且希望同一 AWS 账户中具有 KMS 权限的任何 IAM 用户都可以管理该 key 。我使用以下 YAML 资源定义作为 key :
LambdaKmsKey:
Type: AWS::KMS::Key
Properties:
Enabled: true
KeyPolicy:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: kms:*
Principal:
AWS: <Principle>
然而,<Principal>
没有以下值正在工作,即使我尝试以 root 用户身份创建堆栈!
-
!Join [ "", [ "arn:aws:iam::", !Ref "AWS::AccountId", ":root" ] ]
-
!Join [ "", [ "arn:aws:sts::", !Ref "AWS::AccountId", ":root" ] ]
-
!Ref "AWS::AccountId"
我不能只对主体的用户名进行硬编码,因为我希望具有堆栈创建权限的任何人都可以实例化此模板。有谁知道如何解决这种非常令人沮丧的情况?提前致谢。
编辑:
我应该提到,我不再在 CloudFormation 模板中定义 KMS key 策略。事实上,我现在完全避免在 CF 模板中定义任何安全资源,例如 IAM 实体、策略和 ACM 证书。我这样做的原因在GitHub issue中有描述。 .
最佳答案
您缺少资源:“*”
属性。这对我有用:
LambdaKmsKey:
Type: AWS::KMS::Key
Properties:
Enabled: true
KeyPolicy:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: kms:*
Resource: "*"
Principal:
AWS: !Join [ "", [ "arn:aws:iam::", !Ref "AWS::AccountId", ":root" ] ]
资源:“*”
is required and is the only possible value :
Resource – (Required) In a key policy, you use "*" for the resource, which means "this CMK." A key policy applies only to the CMK it is attached to.
参见https://aws.amazon.com/premiumsupport/knowledge-center/update-key-policy-future/举个例子。
关于amazon-web-services - 新的 key 策略将不允许您将来更新 key 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991480/