标题说明了一切。每当我试图通过AWS CloudFormation模板创建一个KMS键时,我就会得到这个错误。我是以具有管理权限的IAM用户的身份创建模板的,我希望在同一个具有KMS权限的AWS帐户中的任何IAM用户都可以管理该密钥。我使用以下YAML资源定义作为密钥:
LambdaKmsKey:
Type: AWS::KMS::Key
Properties:
Enabled: true
KeyPolicy:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: kms:*
Principal:
AWS: <Principle>
然而,即使我试图以根用户的身份创建堆栈,<Principal>
的下列值都不起作用!
!Join [ "", [ "arn:aws:iam::", !Ref "AWS::AccountId", ":root" ] ]
!Join [ "", [ "arn:aws:sts::", !Ref "AWS::AccountId", ":root" ] ]
!Ref "AWS::AccountId"
我不能仅仅为主体硬编码我的用户名,因为我希望这个模板能够被任何拥有堆栈创建权限的人实例化。有谁知道如何解决这个非常令人沮丧的问题吗?提前谢谢。
编辑
我应该指出,我不再在CloudFormation模板中定义KMS关键策略。实际上,我现在完全避免在CF模板中定义任何安全资源,比如IAM实体、策略和ACM证书。我在这个GitHub问题中描述了原因。
发布于 2017-02-01 15:50:01
您缺少了Resource: "*"
属性。这对我起了作用:
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" ] ]
Resource: "*"
是必需的,并且是唯一可能的值。
资源-(必需)在关键策略中,对资源使用"*“,这意味着”此CMK“。一个关键的策略只适用于它所附属的CMK。
有关示例,请参见https://aws.amazon.com/premiumsupport/knowledge-center/update-key-policy-future/。
发布于 2020-12-15 05:55:50
如果这对某人有帮助,请注意https://aws.amazon.com/premiumsupport/knowledge-center/update-key-policy-future/中的备注
重要:确保您创建的关键策略允许当前用户管理CMK。
在从管道中部署模板时,我遇到了这个问题,而建议的解决方案对我不起作用。用于部署模板的角色具有相应的kms权限,但它也需要在密钥策略的主体中!
- Effect: Allow
Action: kms:*
Resource: "*"
Principal:
AWS:
- !Sub arn:aws:iam::${AWS::AccountId}:role/PipelineRole
发布于 2019-04-22 10:34:38
LambdaKmsKey:
Type: AWS::KMS::Key
Properties:
Description: Key for Lambda function
Enabled: True
KeyPolicy:
Version: '2012-10-17'
Id: key-consolepolicy-3
Statement:
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: arn:aws:iam::AwsAccountId:root
Action: kms:*
Resource: "*"
- Sid: Allow use of the key
Effect: Allow
Principal:
AWS:
Fn::GetAtt: [ IamRoleLambdaExecution, Arn ]
Action:
- kms:Decrypt
- kms:Encrypt
Resource: "*"
此策略有点危险,因为它给帐户下的任何用户或角色以kms:解密权限来解密和查看密钥,这是不安全的,而且无法通过笔试。
如果你想拿走解密的权限。
LambdaKmsKey:
Type: AWS::KMS::Key
Properties:
Description: Key for Lambda function
Enabled: True
KeyPolicy:
Version: '2012-10-17'
Id: key-consolepolicy-3
Statement:
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: arn:aws:iam::AwsAccountId:role/sudo
Action:
- kms:Create*
- kms:Describe*
- kms:Enable*
- kms:List*
- kms:Put*
- kmzs:Update*
- kms:Revoke*
- kms:Disable*
- kms:Get*
- kms:Delete*
- kms:ScheduleKeyDeletion
- kms:CancelKeyDeletion
- kms:Encrypt
Resource: "*"
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: arn:aws:iam::AwsAccountId:role/admin
Action:
- kms:Create*
- kms:Describe*
- kms:Enable*
- kms:List*
- kms:Put*
- kmzs:Update*
- kms:Revoke*
- kms:Disable*
- kms:Get*
- kms:Delete*
- kms:ScheduleKeyDeletion
- kms:CancelKeyDeletion
- kms:Encrypt
Resource: "*"
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: arn:aws:iam::AwsAccountId:root
Action:
- kms:List*
- kms:Get*
- kms:Encrypt
Resource: "*"
- Sid: Allow use of the key
Effect: Allow
Principal:
AWS:
Fn::GetAtt: [ IamRoleLambdaExecution, Arn ]
Action:
- kms:Decrypt
- kms:Encrypt
Resource: "*"
通过这种方式,除了解密到sudo和admin角色之外,我还授予了所有其他权限(确保您有这些角色)。
我给角色和具有列表、获取和加密权限的用户提供列表、获取和加密权限。
https://stackoverflow.com/questions/41991480
复制相似问题