如何防止 IAM 策略允许用户或角色访问 AWS KMS 中的 KMS 密钥?

上次更新时间:2021 年 2 月 17 日

我想保护我的 AWS KMS 密钥免受 AWS Identity and Access Management (IAM) 身份(用户、组和角色)的访问。但是,原定设置 KMS 密钥策略允许账户中的 IAM 身份以 IAM 权限访问 KMS 密钥。我该如何预防此问题?

简短描述

原定设置的 KMS 密钥 IAM 策略包含类似于以下内容的语句:

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

在此示例中,EffectPrincipal 元素不引用 AWS 根用户账户Amazon Resource Names (ARN) 允许使用此 IAM 策略访问 KMS 密钥的权限。如果将所需的 AWS Key Management Service (AWS KMS) 权限附加到 IAM 实体,则 AWS 账户 111122223333 中的任何委托人都对 KMS 密钥有根访问权限。

解决方法

您可以阻止 IAM 实体访问 KMS 密钥,并允许根用户账户管理该密钥。这还可以防止根用户账户失去对 KMS 密钥的访问权限。

确保 KMS 密钥策略包含同一账户中的密钥管理员,类似于以下内容:

{
    "Sid": "Allow access for Key Administrators",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::111122223333:user/KMSAdminUser",
            "arn:aws:iam::111122223333:role/KMSAdminRole"
        ]
    },
    "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": "*"
}

将 KMS 密钥 IAM 策略 Sid 替换为“EnableRootAccessAndPreventPermissionDelegation”,然后添加类似以下内容的 Condition 元素:

重要提示:用您的账号替换账户 111122223333,并确保条件键 aws:PrincipalType 设置为 Account

{
    "Sid": "EnableRootAccessAndPreventPermissionDelegation",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": "kms:*",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:PrincipalType": "Account"
        }
    }
}

只有 KMS 密钥策略的管理员部分中列出的账户根用户和 IAM 实体才能管理密钥。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?