

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS 全局条件键
<a name="conditions-aws"></a>

AWS 定义[全局条件密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)，这是一组策略条件密钥，适用于使用 IAM 进行访问控制的所有 AWS 服务。 AWS KMS 支持所有全局条件键。您可以在 AWS KMS 密钥策略和 IAM 策略中使用它们。

例如，只有当请求中的委托人由条件键值中的 [Amazon 资源名称 AWS KMS key (ARN) 表示时，您才可以使用 aws: PrincipalArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn) 全局条件密钥允许访问 (KMS 密钥)。要在中支持[基于属性的访问控制](abac.md) (AB [AC) AWS KMS，您可以在 IAM 策略中使用 aws:ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 全局条件密钥来允许访问带有特定标签的 KMS 密钥。

在委托人为 AWS 服务主体的策略中，为了防止[AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)被用作混淆的副手，您可以使用[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)或[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全局条件键。有关更多信息，请参阅 [使用 `aws:SourceArn` 或 `aws:SourceAccount` 条件键](least-privilege.md#least-privilege-source-arn)。

有关 AWS 全局条件密钥的信息，包括可用的请求类型，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。有关在 IAM policy 中使用全局条件键的示例，请参阅 *IAM 用户指南*中的[控制对请求的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)和[控制标签密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

以下主题提供有关使用基于 IP 地址和 VPC 终端节点的条件键的特殊指导。

**Topics**
+ [在具有 AWS KMS 权限的策略中使用 IP 地址条件](#conditions-aws-ip-address)
+ [在具有 AWS KMS 权限的策略中使用 VPC 终端节点条件](#conditions-aws-vpce)
+ [在 IAM 和 AWS KMS 密钥策略中使用 IPv6 地址](#KMS-IPv6-policies)

## 在具有 AWS KMS 权限的策略中使用 IP 地址条件
<a name="conditions-aws-ip-address"></a>

您可以使用 AWS KMS 在[集成 AWS 服务](service-integration.md)中保护您的数据。但是，在允许或拒绝访问的同一策略声明中指定 [IP 地址`aws:SourceIp`条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)或条件密钥时，请谨慎行事 AWS KMS。例如，“[AWS 基于源 IP 拒绝访问” 中的AWS策略将](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) AWS 操作限制为来自指定 IP 范围的请求。

请考虑以下情况：

1. 您向 IAM 身份附加了如下所示[的策略AWS： AWS 基于源 IP 拒绝访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)。您将`aws:SourceIp` 条件键的值设置为该用户公司的 IP 地址范围。此 IAM 身份还附加了允许其使用 Amazon EBS、Amazon EC2 和 AWS KMS的其他策略。

1. 该身份试图将一个加密的 EBS 卷挂载到 EC2 实例。即使用户有权使用所有相关服务，此操作也会失败并显示授权错误。

第 2 步失败，因为解密卷加密数据密钥的请求来自与 Amazon EC2 基础设施关联的 IP 地址。 AWS KMS 要想成功，请求必须来自始发用户的 IP 地址。由于步骤 1 中的策略明确拒绝除来自指定 IP 地址以外的所有请求，因此将不允许 Amazon EC2 对 EBS 卷的加密数据密钥进行解密。

此外，当请求来自 [Amazon VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)时，`aws:SourceIP` 条件键也不起作用。要限制对 VPC 终端节点（包括 [AWS KMS VPC 终端节点](kms-vpc-endpoint.md)）的请求，请使用 `aws:SourceVpce` 或 `aws:SourceVpc` 条件键。有关更多信息，请参阅 [Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#vpc-endpoints-iam-access) 中的 *VPC 终端节点 - 控制终端节点的使用*。

## 在具有 AWS KMS 权限的策略中使用 VPC 终端节点条件
<a name="conditions-aws-vpce"></a>

[AWS KMS 支持由提供支持的亚马逊虚拟私有云（亚马逊 VPC）终端节点[AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html#what-is-privatelink)](kms-vpc-endpoint.md)。当请求来自 VPC 或使用 VPC 终端节点时，您可以在[密钥策略和 IAM 策略中使用以下全局条件密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)来控制对 AWS KMS 资源的访问。有关更多信息，请参阅 [使用 VPC 终端节点控制对 AWS KMS 资源的访问](vpce-policy-condition.md)。
+ `aws:SourceVpc` 将访问限制为来自指定 VPC 的请求。
+ `aws:SourceVpce` 将访问限制为来自指定 VPC 端点的请求。

如果您使用这些条件密钥来控制对 KMS 密钥的访问，则可能会无意中拒绝访问代表您使用的 AWS AWS KMS 服务。

请注意避免出现类似 [IP 地址条件键](#conditions-aws-ip-address)示例的情况。如果您将对 KMS 密钥的请求限制在 VPC 或 VPC 终端节点上，则 AWS KMS 从 Amazon S3 或 Amazon EBS 等集成服务对的调用可能会失败。即使源请求最终来源于 VPC 或 VPC 终端节点，也会发生这种情况。

## 在 IAM 和 AWS KMS 密钥策略中使用 IPv6 地址
<a name="KMS-IPv6-policies"></a>

在尝试访问 AWS KMS 之前 IPv6，请确保所有包含 IP 地址限制的密钥和 IAM 策略都已更新为包含 IPv6 地址范围。未更新以处理 IPv6 地址的基于 IP 的策略可能会导致客户端在开始使用时错误地丢失或获得访问权限 IPv6。有关 KMS 访问控制的一般指南，请参阅 [KMS 密钥访问权限和权限](control-access.md)。要了解 KMS 和双栈支持，请参阅[双堆栈端点支持](ipv6-kms.md)。

**重要**  
这些语句并未允许任何操作。请将这些语句与允许特定操作的其他语句结合使用。

以下语句明确拒绝来自 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"
            ]
        }
    }
}
```