首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >新的密钥策略将不允许您在未来更新关键策略。

新的密钥策略将不允许您在未来更新关键策略。
EN

Stack Overflow用户
提问于 2017-02-01 23:05:10
回答 4查看 17.4K关注 0票数 12

标题说明了一切。每当我试图通过AWS CloudFormation模板创建一个KMS键时,我就会得到这个错误。我是以具有管理权限的IAM用户的身份创建模板的,我希望在同一个具有KMS权限的AWS帐户中的任何IAM用户都可以管理该密钥。我使用以下YAML资源定义作为密钥:

代码语言:javascript
运行
复制
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问题中描述了原因。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-01 23:50:01

您缺少了Resource: "*"属性。这对我起了作用:

代码语言:javascript
运行
复制
  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/

票数 14
EN

Stack Overflow用户

发布于 2020-12-15 13:55:50

如果这对某人有帮助,请注意https://aws.amazon.com/premiumsupport/knowledge-center/update-key-policy-future/中的备注

重要:确保您创建的关键策略允许当前用户管理CMK。

在从管道中部署模板时,我遇到了这个问题,而建议的解决方案对我不起作用。用于部署模板的角色具有相应的kms权限,但它也需要在密钥策略的主体中!

代码语言:javascript
运行
复制
  - Effect: Allow
    Action: kms:*
    Resource: "*"
    Principal:
      AWS:
        - !Sub arn:aws:iam::${AWS::AccountId}:role/PipelineRole 
票数 6
EN

Stack Overflow用户

发布于 2019-04-22 18:34:38

代码语言:javascript
运行
复制
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:解密权限来解密和查看密钥,这是不安全的,而且无法通过笔试。

如果你想拿走解密的权限。

代码语言:javascript
运行
复制
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角色之外,我还授予了所有其他权限(确保您有这些角色)。

我给角色和具有列表、获取和加密权限的用户提供列表、获取和加密权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41991480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档