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

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

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

与标准密钥配合使用的所有 Amazon KMS 访问控制功能(KMS密钥IAM策略、策略权)对外部KMS密钥存储中的密钥的作用相同。您可以使用IAM策略来控制对创建和管理外部密钥存储的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 Balancin API g 权限

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

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

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

要设置仅适用于外部KMS密钥存储库中密钥的权限,请使用值为的kms:KeyOrigin策略条件EXTERNAL_KEY_STORE。您可以使用此条件来限制 kms: CreateKey 权限或任何特定于KMS密钥资源的权限。例如,以下IAM策略允许其所关联的身份对账户中的所有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策略、策略和授权。

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

"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 操作将失败,并显示一条解释错误的消息。有关详细信息,请参阅 代理授权问题

m TLS 身份验证(可选)

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

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

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

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

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