AWS 全局条件键
AWS 定义全局条件键,它是一组策略条件键,适用于使用 IAM 进行访问控制的所有 AWS 服务。AWS KMS 支持所有全局条件键。您可以在 AWS KMS 密钥策略和 IAM policy 中使用它们。
例如,仅当请求中的主体由条件键值中的 Amazon Resource Name (ARN) 表示时,才可以使用 aws:PrincipalArn 全局条件键来允许访问 AWS KMS key(KMS 密钥)。要在 AWS KMS 中支持基于属性的访问权限控制(ABAC),您可以在 IAM 策略中使用 aws:ResourceTag/tag-key 全局条件键来允许访问带有特定标签的 KMS 密钥。
在主体是 AWS 服务主体的策略中,为帮助防止 AWS 服务被用作混淆代理,您可以使用 aws:SourceArn 或 aws:SourceAccount 全局条件键。有关更多信息,请参阅 使用 aws:SourceArn 或 aws:SourceAccount 条件键。
有关 AWS 全局条件键(包括它们在其中可用的请求类型)的信息,请参阅 IAM 用户指南中的 AWS 全局条件上下文键。有关在 IAM policy 中使用全局条件键的示例,请参阅 IAM 用户指南中的控制对请求的访问和控制标签密钥。
以下主题提供有关使用基于 IP 地址和 VPC 终端节点的条件键的特殊指导。
在具有 AWS KMS 权限的策略中使用 IP 地址条件
您可以使用 AWS KMS 保护您在集成 AWS 服务中的数据。但在允许或拒绝访问 的同一策略语句中指定 IP 地址条件运算符aws:SourceIp或 AWS KMS 条件键时,请务必小心。例如,AWS:基于源 IP 拒绝对 AWS 的访问中的策略将 AWS 操作限制为来自指定 IP 范围的请求。
请考虑以下情况:
-
您将与 AWS:基于源 IP 拒绝对 AWS 的访问 中所示策略类似的策略附加到 IAM 身份。您将
aws:SourceIp条件键的值设置为该用户公司的 IP 地址范围。此 IAM 身份还附加了允许其使用 Amazon EBS、Amazon EC2 和 AWS KMS 的其他策略。 -
该身份试图将一个加密的 EBS 卷挂载到 EC2 实例。即使用户有权使用所有相关服务,此操作也会失败并显示授权错误。
步骤 2 失败,因为要求 AWS KMS 解密卷的加密数据密钥的请求来自与 Amazon EC2 基础设施关联的 IP 地址。要想成功,请求必须来自始发用户的 IP 地址。由于步骤 1 中的策略明确拒绝除来自指定 IP 地址以外的所有请求,因此将不允许 Amazon EC2 对 EBS 卷的加密数据密钥进行解密。
此外,当请求来自 Amazon VPC 终端节点时,aws:SourceIP 条件键也不起作用。要限制对 VPC 终端节点(包括 AWS KMS VPC 终端节点)的请求,请使用 aws:SourceVpce 或 aws:SourceVpc 条件键。有关更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 终端节点 - 控制终端节点的使用。
在具有 AWS KMS 权限的策略中使用 VPC 终端节点条件
AWS KMS 支持 Amazon Virtual Private Cloud (Amazon VPC) 终端节点,该终端节点由 AWS PrivateLink 提供支持。当请求来自 VPC 或使用 VPC 端点时,您可以使用密钥策略和 IAM policy 中的以下全局条件键以控制对 AWS KMS 资源的访问。有关更多信息,请参阅 使用 VPC 端点控制对 AWS KMS 资源的访问。
-
aws:SourceVpc将访问限制为来自指定 VPC 的请求。 -
aws:SourceVpce将访问限制为来自指定 VPC 终端节点的请求。
如果您使用这些条件键来控制对 KMS 密钥的访问,那么您可能会意外拒绝访问代表您使用 AWS KMS 的 AWS 服务。
请注意避免出现类似 IP 地址条件键示例的情况。如果您将对 KMS 密钥的请求限制为 VPC 或 VPC 终端节点,则从集成服务(如 Amazon S3 或 Amazon EBS)调用 AWS KMS 可能会失败。即使源请求最终来源于 VPC 或 VPC 终端节点,也会发生这种情况。
在 IAM 和 AWS KMS 密钥策略中使用 IPv6 地址
在尝试通过 IPv6 访问 AWS KMS 之前,请确保包含 IP 地址限制的所有密钥策略和 IAM 策略都已更新为包括 IPv6 地址范围。如果未将基于 IP 的策略更新为处理 IPv6 地址,则可能在开始使用 IPv6 时导致客户端错误地失去或获得访问权限。有关 KMS 访问控制的一般指南,请参阅 KMS 密钥访问权限和权限。要了解 KMS 和双栈支持,请参阅双堆栈端点支持。
重要
这些语句并未允许任何操作。请将这些语句与允许特定操作的其他语句结合使用。
以下语句会显式拒绝来自 IPv4 地址范围 192.0.2.* 的请求访问所有 KMS 权限。此范围之外的所有 IP 地址均未被显式拒绝 KMS 权限。由于所有 IPv6 地址都在拒绝范围之外,此语句并未显式拒绝任何 IPv6 地址的 KMS 权限。
{ "Sid": "DenyKMSPermissions", "Effect": "Deny", "Action": [ "kms:*" ], "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } } }
您可以按以下示例所示修改 Condition 元素,以拒绝 IPv4 (192.0.2.0/24) 和 IPv6 (2001:db8:1234::/32) 地址范围。
{ "Sid": "DenyKMSPermissions", "Effect": "Deny", "Action": [ "kms:*" ], "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "2001:db8:1234::/32" ] } } }