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

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

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

与标准 KMS 密钥一起使用的所有 Amazon KMS 访问控制功能(密钥策略IAM policy授权)的工作方式,与外部密钥存储中的 KMS 密钥的工作方式相同。您可以使用 IAM policy 来控制对创建和管理外部密钥存储的 API 操作的访问。您可以使用 IAM policy 和密钥策略来控制对外部密钥存储中 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 的主体需要具有与在 Amazon KMS 中创建和管理任何 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 密钥和 Amazon Web Services 账户 中的 KMS 密钥的权限,但不能限制到账户中任何特定的外部密钥存储。

{ "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 使用特定的外部密钥进行加密,但不允许使用该外部密钥进行解密。

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

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

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

例如,仅当请求由特定 Amazon Web Service(kmsViaService)代表主体发出时,您可以将代理配置为允许来自特定主体(awsPrincipalArn)的请求。

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

mTLS 身份验证(可选)

要让外部密钥存储代理对来自 Amazon KMS 的请求进行身份验证,Amazon KMS 会使用外部密钥存储的签名版本 4(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 关联的证书颁发机构。