仅授予对Amazon别名密钥

时间:2017-11-01 19:58:11

标签: amazon-web-services amazon-iam aws-kms amazon-kms

KMS中,有亚马逊别名密钥(例如/alias/aws/s3)和Customer Master Keys(CMK)。

对于每个开发团队,我都有一些带别名的CMK(例如/alias/team1/default/alias/team1/confidential

我想允许访问所有IAM用户/群组/角色的aws别名密钥,但提供团队级访问权限

尝试允许访问aws托管密钥时出现问题

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "NotAction": [
        "iam:*",
        "kms:*"
      ],
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:MultiFactorAuthAge": "false"
        }
      }
    },
    {
      "Effect": "Allow",
      "Resource": "arn:aws:kms:us-east-1:111111111111:alias/aws/*",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Condition": {
        "Null": {
          "aws:MultiFactorAuthAge": "false"
        }
      }  
    }
  ]
}

iam:*kms:*提供隐式拒绝,但允许访问aws别名密钥

使用IAM策略模拟器时,看起来我必须提供对完整密钥arn(arn:aws:kms:us-east-1:111111111111:key/abcd123-acbd-1234-abcd-acbcd1234abcd)的访问权限,而不是别名(arn:aws:kms:us-east-1:111111111111:alias/aws/*

有没有更好的方法来管理它?

我知道我可以使用关键策略管理对CMK的访问,但不允许从IAM访问,但您无法在KMS密钥策略中将组用作Principal

2 个答案:

答案 0 :(得分:2)

您可以使用密钥别名作为API的资源,这些API用于控制对别名本身起作用的API的访问(例如,创建/删除别名),并且别名不能用作ARN来代替密钥ID控制对底层密钥的访问。您可以参考以下URL中的表格,该表格说明了与KMS API一起使用的资源/ ARN。

http://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html

您可以考虑这种方法:允许IAM组承担IAM角色并允许IAM角色参与CMK的密钥策略。

来源:https://forums.aws.amazon.com/thread.jspa?threadID=173540

答案 1 :(得分:1)

虽然我知道问题已解决,但我还是想从最好的来源发布此问题。
别名不能在策略中使用 请参阅https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf

中的以下段落
  

请注意,CMK别名不能在策略中使用。   这是因为可以将别名映射到键   在政策之外,这将允许特权升级。   因此,必须在KMS密钥策略,IAM策略和   KMS拨款