控制对外部密钥存储的访问 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

控制对外部密钥存储的访问

与标准 KMS 密钥配合使用的所有 Amazon KMS 访问控制功能(密钥策略、IAM 策略权)对外部密钥存储中的 KMS 密钥的作用相同。您可以使用 IAM policy 来控制对创建和管理外部密钥存储的 API 操作的访问。您可以使用 IAM 策略和密钥策略来控制对外部密钥存储 Amazon KMS keys 中的的访问权限。您还可以使用适用于您的 Amazon 组织的服务控制策略VPC 终端节点策略来控制对外部密钥存储中的 KMS 密钥的访问。

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

授权外部密钥存储管理器

创建和管理外部密钥存储的主体需要自定义密钥存储操作的权限。以下列表描述了外部密钥存储管理器所需的最低权限。由于自定义密钥存储不是 Amazon 资源,因此您无法为其他 Amazon Web Services 账户密钥库中的委托人提供对外部密钥存储的权限。

  • kms:CreateCustomKeyStore

  • kms:DescribeCustomKeyStores

  • kms:ConnectCustomKeyStore

  • kms:DisconnectCustomKeyStore

  • kms:UpdateCustomKeyStore

  • kms:DeleteCustomKeyStore

创建外部密钥存储的主体需要权限来创建和配置外部密钥存储组件。主体只能在自己的账户中创建外部密钥存储。要创建具有 VPC 端点服务连接的外部密钥存储,主体必须具有创建以下组件的权限:

  • Amazon VPC

  • 公有子网和私有子网

  • 网络负载均衡器和目标组

  • Amazon VPC 端点服务

有关详细信息,请参阅 Amazon VPC 的身份和访问管理VPC 端点和 VPC 端点服务的身份和访问管理以及 Elastic Load Balancing API 权限

授权外部密钥存储中 KMS 密钥的用户

Amazon KMS keys 在您的外部密钥存储中创建和管理的委托人需要与在中创建和管理任何 KMS 密钥的委托人相同的权限。 Amazon KMS外部密钥存储中的 KMS 密钥的默认密钥策略与 Amazon KMS中 KMS 密钥的默认密钥策略相同。基于属性的访问权限控制(ABAC)使用标签和别名来控制对 KMS 密钥的访问,对外部密钥存储中的 KMS 密钥也有效。

使用自定义密钥存储中的 KMS 密钥进行加密操作的委托人需要使用 KMS 密钥执行加密操作的权限,如 kms:Decrypt。您可以在 IAM 或密钥策略中提供这些权限。但是,他们无需任何额外权限即可在自定义密钥存储中使用 KMS 密钥。

要设置仅适用于外部密钥存储中 KMS 密钥的权限,请使用值为 EXTERNAL_KEY_STOREkms:KeyOrigin 策略条件。您可以使用此条件来限制 kms: CreateKey 权限或任何特定于 KMS 密钥资源的权限。例如,以下 IAM policy 允许其所连接的身份对账户中的所有 KMS 密钥调用指定操作,只要这些 KMS 密钥位于外部密钥存储中。请注意,您可以将权限限制为外部密钥存储中的 KMS 密钥和账户中的 KMS 密钥 Amazon Web Services 账户,但不能限制账户中任何特定的外部密钥存储区。

{ "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" } } }

授权 Amazon KMS 与您的外部密钥存储代理进行通信

Amazon KMS 仅通过您提供的外部密钥存储代理与您的外部密钥管理器通信。 Amazon KMS 使用签名版本 4 (Sigv4) 进程使用您指定的外部密钥存储代理身份验证凭据对代理的请求进行签名,从而对代理进行身份验证。如果您为外部密钥存储代理使用公共端点连接, Amazon KMS 则不需要任何其他权限。

但是,如果您使用的是 VPC 终端节点服务连接,则必须 Amazon KMS 授予权限才能为您的 Amazon VPC 终端节点服务创建接口终端节点。无论外部密钥存储代理位于您的 VPC 中,还是外部密钥存储代理位于其他地方,但使用 VPC 终端节点服务与之通信,都需要此权限 Amazon KMS。

Amazon KMS 要允许创建接口终端节点,请使用 Amazon VPC 控制台ModifyVpcEndpointServicePermissions操作。允许以下主体的权限:cks.kms.<region>.amazonaws.com

例如,以下 Amazon CLI 命令允许 Amazon KMS 连接到美国西部(俄勒冈)(us-west-2) 区域中的指定 VPC 终端节点服务。在使用此命令之前,请将 Amazon VPC 服务 ID 和 Amazon Web Services 区域 替换为适用于您的配置的有效值。

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

要移除此权限,请使用 Amazon VPC 控制台ModifyVpcEndpointServicePermissionsRemoveAllowedPrincipals参数的。

外部密钥存储代理授权(可选)

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

代理授权独立于基于 SIGV4 的代理身份验证,后者 Amazon KMS 需要所有外部密钥存储代理。其还独立于授权访问影响外部密钥存储或其 KMS 密钥的操作的密钥策略、IAM policy 和授权。

要启用外部密钥存储代理的授权,请在每个代理 API 请求中 Amazon KMS 包含元数据,包括调用者、KMS 密钥、 Amazon KMS 操作、 Amazon Web Services 服务 (如果有)。外部密钥代理 API 版本 1(v1)的请求元数据如下所示。

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

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

如果代理授权失败,则相关 Amazon KMS 操作将失败,并显示一条解释错误的消息。有关详细信息,请参阅 代理授权问题

mTLS 身份验证(可选)

要使您的外部密钥存储代理能够对来自的请求进行身份验证 Amazon KMS,请使用外部密钥存储的 S Amazon KMS ignature V4 (Sigv4) 代理身份验证凭据对外部密钥存储代理的所有请求进行签名。

为了进一步保证您的外部密钥存储代理仅响应 Amazon KMS 请求,一些外部密钥代理支持相互传输层安全 (mTLS),即交易双方使用证书进行身份验证。mTLS 在标准 TLS 提供的服务器端身份验证中添加了客户端身份验证(即外部密钥存储代理服务器对 Amazon KMS 客户端进行身份验证)。在极少数情况下,代理身份验证凭证会遭到泄露,mTLS 会阻止第三方成功向外部密钥存储代理发出 API 请求。

要实现 mTLS,请将您的外部密钥存储代理配置为仅接受具有以下属性的客户端 TLS 证书:

  • TLS 证书上的主题通用名称必须是 cks.kms.<Region>.amazonaws.com,例如 cks.kms.eu-west-3.amazonaws.com

  • 证书必须链接到与 Amazon Trust Services 关联的证书颁发机构。