2

KMS中有亚马逊别名密钥(例如/alias/aws/s3)和客户主密钥(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:*提供对and的隐式拒绝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 的访问,但您不能Principal在 KMS 密钥策略中使用组

4

2 回答 2

11

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

应该注意的是,CMK 别名不能在策略中使用。这是因为别名到键的映射可以在策略之外进行操作,这将允许权限升级。因此,在 KMS 密钥策略、IAM 策略和 KMS 授权中必须使用密钥 ID

于 2018-11-16T01:46:06.663 回答
7

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

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

您可以考虑这种方法:允许 IAM 组代入 IAM 角色并在 CMK 的密钥策略中允许 IAM 角色。

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

于 2017-11-01T21:27:34.497 回答