AWS IAM 和 KMS 政策 'muddlement'

AWS IAM and KMS policy 'muddlement'

我希望一些 AWS 政策专家可以帮助我破解这里发生的事情。

我一直在研究 AWS 中的 IAM 和资源策略。根据 AWS 自己的文档,除非所有策略中有任何明确拒绝,否则资源策略应优先于 IAM 策略。请参阅显示 AWS 政策评估逻辑的附件 link。如果资源策略是 'allow',则不应评估 IAM 策略。

Policy Evaluation Logic

我(在使用 KMS 时)努力应对的挑战就是这个。我定义了一个如下所示的用户 IAM 策略:

{ 
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:DeleteAlias"
            ],
            "Resource": "*"
        }
    ]
}

它的唯一目的是允许用户删除 KMS CMK 别名。而且,我创建了一个 KMS CMK(资源策略),如下所示:

{
    "Version": "2012-10-17",
    "Id": "key-consolepolicy-3",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::xxxxxxxxxxxx:user/user1"
                ]
            },
            "Action": [
                "kms:Create*",
                "kms:Delete*"
            ],
            "Resource": "*"
        },
}

我遇到的问题,尽管 KMS 资源政策说我可以 'CreateAlias',AWS 不允许我这样做,除非 IAM 政策也明确包含它。

我希望有人能够向我解释 AWS 的策略逻辑实际上是如何工作的,以及我是否做错了什么。

非常感谢!

我认为罪魁祸首可能是您在 IAM 和资源策略中都缺少 kms:DescribeKey。它在 Controlling access to Aliases document.

中按要求列出
  • kms:为 KMS 密钥创建别名。此权限必须在密钥策略或从密钥策略委派的 IAM 策略中提供。
{
  "Sid": "Key policy for 1234abcd-12ab-34cd-56ef-1234567890ab",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSAdminUser"},
  "Action": [
    "kms:CreateAlias",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

这是因为 kms 别名操作是 唯一 并且需要 both KMS 密钥和 IAM 策略权限。具体来说 kms:CreateAlias must be allowed 在您的 user1 的密钥策略和 IAM 策略中:

这意味着 KMS 密钥策略仅适用于密钥,而不适用于别名。