Amazon web services 管理员无法在AWS KMS中加密/解密

Amazon web services 管理员无法在AWS KMS中加密/解密,amazon-web-services,amazon-iam,aws-kms,aws-policies,Amazon Web Services,Amazon Iam,Aws Kms,Aws Policies,我正在AWS中使用密钥管理服务KMS,目前正在进行设置 我创建了两个角色KmsUser和KmsAdmin,并将以下关键策略附加到我的CMK: { "Version": "2012-10-17", "Statement": [ { "Sid": "KMS KeyAdmin access", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::1234567890:ro

我正在AWS中使用密钥管理服务KMS,目前正在进行设置

我创建了两个角色KmsUser和KmsAdmin,并将以下关键策略附加到我的CMK:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "KMS KeyAdmin access",
      "Effect": "Allow",
      "Principal": {"AWS": [
          "arn:aws:iam::1234567890:role/KmsAdmin",
      "arn:aws:iam::1234567890:user/myadmin"
      ]},
      "Action": [
        "kms:Create*",
        "kms:Describe*",
        "kms:Enable*",
        "kms:List*",
        "kms:Put*",
        "kms:Update*",
        "kms:Revoke*",
        "kms:Disable*",
        "kms:Get*",
        "kms:Delete*",
        "kms:TagResource",
        "kms:UntagResource",
        "kms:ScheduleKeyDeletion",
        "kms:CancelKeyDeletion"
      ],
    "Resource": "*"
    },
    {
      "Sid": "KMS KeyUser access",
      "Effect": "Allow",
      "Principal": {"AWS": [
          "arn:aws:iam::1234567890:role/KmsUser"
      ]},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    }
  ]
}
问题是,现在如果我尝试将我的密钥用作附加了AdministratorAccess策略的myadmin用户,则CLI中会出现错误:

$aws kms encrypt-密钥id别名/测试密钥-明文fileb:///tmp/plaintext.dat 调用加密操作时发生错误AccessDeniedException:用户:arn:aws:iam::1234567890:用户/myadmin无权对资源执行:kms:加密:arn:aws:kms:eu-north-1:1234567890:密钥/99999999-9999-99999999 特别奇怪的是,报告告诉我,一切都应该按预期进行:


如果我手动将myadmin用户作为主要用户添加到密钥用户策略中,则一切正常。

您需要在密钥策略中添加如下语句:

        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::1234567890:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }

这允许帐户访问密钥,这是启用IAM访问密钥所必需的。

成功了,谢谢。你知道为什么KMS与其他AWS服务相比需要明确的管理权限吗?那么这是策略模拟器中的一个bug吗?或者我遗漏了什么?这不是一个bug,模拟器只是在查看你提供的数据。它不知道关键政策是什么。它甚至不知道/不在乎这些资源是否真实。给出了关键政策如何运作的一个很好的概述。实际上,上述政策是针对职责分离的。密钥管理员不应该能够使用密钥加密或解密数据。所以管理员可以管理密钥,但不能访问数据。密钥用户可以加密或解密数据,但不能管理密钥。因此正确的答案是使用KmsUser角色进行解密/加密。