

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

# 控制对外部密钥存储的访问
<a name="authorize-xks-key-store"></a>

与标准 KMS [密钥配合使用的所有 AWS KMS 访问控制功能（密钥策略](key-policies.md)[、IAM 策略](iam-policies.md)和[授](grants.md)权）对外部密钥存储中的 KMS 密钥的作用相同。您可以使用 IAM policy 来控制对创建和管理外部密钥存储的 API 操作的访问。您可以使用 IAM 策略和密钥策略来控制对外部密钥存储 AWS KMS keys 中的的访问权限。您还可以使用适用于您的 AWS 组织的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)和 [VPC 终端节点策略](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)来控制对外部密钥存储中的 KMS 密钥的访问。

我们建议您仅向用户和角色提供他们可能执行的任务所需的权限。

**Topics**
+ [

## 授权外部密钥存储管理器
](#authorize-xks-managers)
+ [

## 授权外部密钥存储中 KMS 密钥的用户
](#authorize-xks-users)
+ [

## 授权 AWS KMS 与您的外部密钥存储代理进行通信
](#allowlist-kms-xks)
+ [

## 外部密钥存储代理授权（可选）
](#xks-proxy-authorization)
+ [

## mTLS 身份验证（已弃用）
](#xks-mtls)

## 授权外部密钥存储管理器
<a name="authorize-xks-managers"></a>

创建和管理外部密钥存储的主体需要自定义密钥存储操作的权限。以下列表描述了外部密钥存储管理器所需的最低权限。由于自定义密钥存储不是 AWS 资源，因此您无法为其他 AWS 账户密钥库中的委托人提供对外部密钥存储的权限。
+ `kms:CreateCustomKeyStore`
+ `kms:DescribeCustomKeyStores`
+ `kms:ConnectCustomKeyStore`
+ `kms:DisconnectCustomKeyStore`
+ `kms:UpdateCustomKeyStore`
+ `kms:DeleteCustomKeyStore`

要创建具有 [Amazon VPC 终端节点服务连接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部密钥存储库，并且 VPC 终端节点服务归另一方所有 AWS 账户，您还需要以下权限：
+ `ec2:DescribeVPCEndpointServices`

创建外部密钥存储的主体需要权限来创建和配置外部密钥存储组件。主体只能在自己的账户中创建外部密钥存储。要创建具有 [VPC 端点服务连接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部密钥存储，主体必须具有创建以下组件的权限：
+ Amazon VPC
+ 公有子网和私有子网
+ 网络负载均衡器和目标组
+ Amazon VPC 端点服务

有关详细信息，请参阅 [Amazon VPC 的身份和访问管理](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html)、[VPC 端点和 VPC 端点服务的身份和访问管理](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-iam.html)以及 [Elastic Load Balancing API 权限](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/elb-api-permissions.html)。

## 授权外部密钥存储中 KMS 密钥的用户
<a name="authorize-xks-users"></a>

 AWS KMS keys 在您的外部密钥存储中创建和管理的委托人需要与在[中创建和管理任何 KMS 密钥的委托人相同的权限](create-keys.md#create-key-permissions)。 AWS KMS外部密钥存储中的 KMS 密钥的[默认密钥策略](key-policy-default.md)与 AWS KMS中 KMS 密钥的默认密钥策略相同。[基于属性的访问权限控制](abac.md)（ABAC）使用标签和别名来控制对 KMS 密钥的访问，对外部密钥存储中的 KMS 密钥也有效。

使用自定义密钥存储中的 KMS 密钥进行[加密操作](manage-cmk-keystore.md#use-cmk-keystore)的委托人需要使用 KMS 密钥执行加密操作的权限，如 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)。您可以在 IAM 或密钥策略中提供这些权限。但是，他们无需任何额外权限即可在自定义密钥存储中使用 KMS 密钥。

要设置仅适用于外部密钥存储中 KMS 密钥的权限，请使用值为 `EXTERNAL_KEY_STORE` 的 [`kms:KeyOrigin`](conditions-kms.md#conditions-kms-key-origin) 策略条件。您可以使用此条件限制 [kms: CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 权限或任何特定于 KMS 密钥资源的权限。例如，以下 IAM policy 允许其所连接的身份对账户中的所有 KMS 密钥调用指定操作，只要这些 KMS 密钥位于外部密钥存储中。请注意，您可以将权限限制为外部密钥存储中的 KMS 密钥和账户中的 KMS 密钥 AWS 账户，但不能限制账户中任何特定的外部密钥存储区。

```
{
  "Sid": "AllowKeysInExternalKeyStores",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "EXTERNAL_KEY_STORE"
    }
  }
}
```

## 授权 AWS KMS 与您的外部密钥存储代理进行通信
<a name="allowlist-kms-xks"></a>

AWS KMS 仅通过您提供的外部密钥[存储代理与您的外部密钥](keystore-external.md#concept-xks-proxy)管理器通信。 AWS KMS 使用签[名版本 4 (Sigv4) 进程使用您指定的外部密钥存储代理身份验证凭据对代理的请求进行签名](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)[，从而对代理进行身份验证](keystore-external.md#concept-xks-credential)。如果您为外部密钥存储代理使用[公共端点连接](choose-xks-connectivity.md#xks-connectivity-public-endpoint)， AWS KMS 则不需要任何其他权限。

但是，如果您使用的是 [VPC 终端节点服务连接](choose-xks-connectivity.md#xks-vpc-connectivity)，则必须 AWS KMS 授予权限才能为您的 Amazon VPC 终端节点服务创建接口终端节点。无论外部密钥存储代理位于您的 VPC 中，还是外部密钥存储代理位于其他地方，但使用 VPC 终端节点服务进行通信，都需要此权限 AWS KMS。

 AWS KMS 要允许创建接口终端节点，请使用 [Amazon VPC 控制台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或[ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html)操作。允许以下主体的权限：`cks.kms.<region>.amazonaws.com`。

如果您的 Amazon VPC 终端节点服务由拥有外部密钥存储库 (XKS) 以外 AWS 账户 的其他人所有，则还需要允许 XKS 访问该 VPC 终端节点服务。 AWS 账户 为此，请将 [XKS AWS 账户 ID 列为亚马逊 VPC 终端节点服务的委托人](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)。

------
#### [ Same AWS 账户 ]

如果您的 VPC 终端节点服务归您的外部密钥存储库所有，则必须将其添加 AWS KMS 到 VPC 终端节点服务的**允许委托人**列表中。 AWS 账户 

以下示例使用[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html) AWS CLI 命令允许 AWS KMS 连接到美国西部（俄勒冈）(us-west-2) 区域中的指定 VPC 终端节点服务。在使用此命令之前，请将 Amazon VPC 服务 ID 和 AWS 区域 替换为适用于您的配置的有效值。

```
modify-vpc-endpoint-service-permissions
--service-id vpce-svc-12abc34567def0987
--add-allowed-principals '["cks.kms.us-west-2.amazonaws.com"]'
```

要移除此权限，请使用 [Amazon VPC 控制台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或[ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html)带`RemoveAllowedPrincipals`参数的。

------
#### [ Cross AWS 账户 ]

如果您的 VPC 终端节点服务归另一方所有 AWS 账户，则必须将两者 AWS KMS 以及您的外部密钥存储库添加到 VPC 终端节点服务的**允许委托人**列表中。

以下示例使用[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html) AWS CLI 命令允许两者 AWS KMS 以及您的外部密钥存储 (XKS) 连接到美国西部（俄勒冈）(us-west-2) 区域中的指定 VPC 终端节点服务。请首先将 Amazon VPC 服务 ID、 AWS 区域和 IAM 主体 ARN 替换为适用于您的配置的有效值，然后再使用此命令。应将 IAM 委托人替换为 XKS 所有者 AWS 账户中的委托人。

在此示例中，`arn:aws:iam::123456789012:role/cks_role` 是 XKS 所有者账户中的一个 IAM 主体，将用于创建、更新 XKS 或将其连接到您的 VPC 端点服务。如果要允许 XKS 所有者账户中的所有主体访问您的 VPC 端点服务，则可以指定 `arn:aws:iam::123456789012:root`。

```
modify-vpc-endpoint-service-permissions
--service-id vpce-svc-12abc34567def0987
--add-allowed-principals '["cks.kms.us-west-2.amazonaws.com", "arn:aws:iam::123456789012:role/cks_role"]'
```

要移除此权限，请使用 [Amazon VPC 控制台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或[ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html)带`RemoveAllowedPrincipals`参数的。

------

## 外部密钥存储代理授权（可选）
<a name="xks-proxy-authorization"></a>

一些外部密钥存储代理针对其外部密钥的使用执行授权要求。允许但不要求使用外部密钥存储代理来设计和实现授权方案，该方案允许特定用户仅在特定条件下请求特定操作。例如，可以将代理配置为允许用户 A 使用特定的外部密钥进行加密，但不允许使用该外部密钥进行解密。

代理授权独立于[基于 SIGV4 的代理身份验证](keystore-external.md#concept-xks-credential)，后者 AWS KMS 需要所有外部密钥存储代理。其还独立于授权访问影响外部密钥存储或其 KMS 密钥的操作的密钥策略、IAM policy 和授权。

要启用外部密钥存储代理的授权，请在每个代[理 API 请求](keystore-external.md#concept-proxy-apis)中 AWS KMS 包含元数据，包括调用者、KMS 密钥、 AWS KMS 操作、 AWS 服务 （如果有）。外部密钥代理 API 版本 1（v1）的请求元数据如下所示。

```
"requestMetadata": {
    "awsPrincipalArn": string,
    "awsSourceVpc": string, // optional
    "awsSourceVpce": string, // optional
    "kmsKeyArn": string,
    "kmsOperation": string,
    "kmsRequestId": string,
    "kmsViaService": string // optional
}
```

例如，您可以将代理配置为允许来自特定委托人 (`awsPrincipalArn`) 的请求，但前提是请求由特定 AWS 服务 (`kmsViaService`) 代表委托人提出。

如果代理授权失败，则相关 AWS KMS 操作将失败，并显示一条解释错误的消息。有关详细信息，请参阅 [代理授权问题](xks-troubleshooting.md#fix-xks-authorization)。

## mTLS 身份验证（已弃用）
<a name="xks-mtls"></a>

本指南的先前版本提到了*相互传输层安全* (mTLS) 作为一种可选的辅助身份验证机制，用于对来自 AWS KMS的请求进行身份验证。在 mTLS 中，通过 TLS 通道进行通信的双方（AWS KMS 作为客户端，XKS 代理作为服务器）使用证书进行相互身份验证。

但是，[Chrome根目录计划政策（第4.2.2节）](https://googlechrome.github.io/chromerootprogram/policy-archive/policy-version-1-7/#422-pki-hierarchies-included-in-the-chrome-root-store)的变更禁止Chrome根目录商店中 CAs 包含的公众信任的根目录在2026年6月15日之后颁发带有ClientAuth扩展密钥用法 (EKU) 扩展程序的证书。因此， AWS KMS 无法再从 [Amazon Trust Services](https://www.amazontrust.com/repository/) 获得适合 mTL 的客户证书。任何用于在 2026 年 3 月 16 日 AWS KMS 之后创建新的外部密钥存储的 XKS 代理都不得需要 mTLS。2026 年 6 月 15 日之后，任何配置为需要 mTLS 的 XKS 代理都将无法与之通信。 AWS KMS客户必须依靠 Sigv4 身份验证来验证请求是否来自于。 AWS KMS有关更多信息，请参阅[外部密钥存储代理身份验证凭据](keystore-external.md#concept-xks-credential)。