AWS 硝基飞地如何使用 AWS KMS - AWS Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

AWS 硝基飞地如何使用 AWS KMS

AWS 硝基飞地是一种 Amazon EC2 功能,允许您从 Amazon EC2 实例创建独立的计算环境。

在 AWS 硝基飞地中运行的应用程序可以使用AWS 硝基飞地开发工具包调用 AWS KMSDecryptGenerateDataKey, 和GenerateRandom操作。硝基飞地开发工具包将证明文档从该飞地添加到每个 AWS KMS API 请求。AWS KMS 操作使用证明文档中的公有密钥对明文进行加密,而不是返回明文数据。这种设计允许密文只能通过飞地内相应的私钥进行解密。

为了支持 AWS 硝基飞地,AWS KMS 添加了Recipient请求参数与RecipientInfo对象类型和CiphertextForRecipient响应字段添加到这些操作的标准请求和响应字段。这些特定于飞地的元素仅在受支持的 API 操作中有效,并且仅在使用 AWS Nitro Enclaves 开发工具包签署请求时才有效。AWS KMS 依靠该飞地的证明文档的数字签名来证明请求中的公钥来自有效的飞地。您不能提供自己的证书来对证明文档进行数字签名。

AWS KMS 还支持策略条件密钥,只有当证明文档包含指定内容时,您才可以使用这些密钥对 AWS KMS 密钥进行飞地操作。有关详细信息,请参阅 适用于 AWS 硝基飞地的 AWS KMS 条件密钥

有关 AWS Nitro 飞地的信息,请参阅什么是 AWS Nitro 飞地中的AWS 硝基飞地开发人员指南。有关为加密设置数据密钥和数据密钥的信息,请参阅将加密证明与 AWS KMS 结合使用

Recipient

"Recipient": { "AttestationDocument": blob, "KeyEncryptionAlgorithm": "string" }

包含来自飞地和加密算法的签名证明文档的请求参数。唯一有效的加密算法为RSAES_OAEP_SHA_256

仅当请求来自 AWS 硝基飞地开发工具包时,此参数才有效。

类型:收件人信息对象

RecipientInfo

此类型包含有关接收 API 操作响应的飞地的信息。

证明文档

描述硝基飞地状态的测量文件。本文档还包括飞地的公钥。AWS KMS 将在此公有密钥下对响应中的任何明文加密,以便稍后只能通过飞地中的相应私钥进行解密。

类型:Base64 编码的二进制数据对象

长度约束:最小长度为 1。长度上限为 262144。

必需:否

密钥加密算法

AWS KMS 应与公有密钥一起使用的加密算法。唯一有效值为 RSAES_OAEP_SHA_256

类型:字符串

有效 值:RSAES_OAEP_SHA_256

必需:否

CiphertextForRecipient

{ "CiphertextForRecipient": blob }

此响应字段包含使用请求中证明文档中的公钥加密的密文。此字段仅在请求包含Recipient参数使用有效的证明文档和加密算法。填充此字段后,Plaintext字段为空。

类型:Base64 编码的二进制数据对象

长度约束:最小长度为 1。长度上限为 6144。

针对 AWS 硝基飞地的 AWS KMS 操作

以下 AWS KMS 操作支持硝基飞地。本主题介绍了当请求来自 AWS 硝基飞地开发工具包和Recipient参数包含有效的证明文档。这些操作支持Recipient参数中的CiphertextForRecipient响应字段。

Decrypt

要调用Decrypt操作,请使用公里解密操作在 AWS 硝基飞地开发工具包中进行。

使用指定的 AWS KMS 密钥解密请求中的密文 Blob 后,Decrypt操作使用证明文档中的公钥和指定的加密算法重新加密生成的纯文本。它返回CiphertextForRecipient字段中的值。这些区域有:Plaintext字段为空。

GenerateDataKey

要调用GenerateDataKey操作,请使用千米生成数据密钥操作在 AWS 硝基飞地开发工具包中进行。

生成数据密钥后,GenerateDataKey操作会在指定的 AWS KMS 密钥下加密数据密钥的一个副本,并将其返回到CiphertextBlob字段。它会加密证明文档中公有密钥下的其他数据密钥副本,并将其返回到CiphertextForRecipient字段。这些区域有:Plaintext字段为空。

您使用两个加密数据密钥GenerateDataKey响应取决于您使用飞地。

  • 如果要使用数据密钥加密飞地内的数据,请解密CiphertextForRecipient字段使用您的飞地内的私钥。如果要将此新加密的数据保留在飞地之外,则可以将其与两个加密的数据密钥副本中的任何一个存储在GenerateDataKey(kms-generate-data-key)响应。

  • 如果您打算保持飞地运行,并且可以依赖于飞地内存中的私钥的持久性,则可以包含CiphertextForRecipient对象与新加密的数据一起移动到飞地之外。当您准备好解密CiphertextForRecipient对象中,您必须使用相应的私有密钥。

    如果你不打算保持你的飞地运行,或者你不想依赖于飞地内存中的私钥的持久性,你应该包含CiphertextBlob对象与您的加密数据一起使用。要解密此数据密钥副本,您必须将其发送 AWS KMSDecrypt(kms-decrypt) 请求。

    您还可以将CiphertextBlob对象添加到不同的飞地,然后通过调用kms-decrypt(Decrypt) 操作。此请求将包含带有新公钥的新飞地的证明文档。AWS KMS 将解密使用 KMS 密钥加密的数据密钥,然后在新飞地的公有密钥下重新加密密钥。此数据密钥只能使用新飞地中的相应私有密钥进行解密。

GenerateRandom

要调用GenerateRandom操作,请使用千米生成随机操作在 AWS 硝基飞地开发工具包中进行。

生成随机字节字符串后,GenerateRandom操作使用证明文档中的公钥和指定的加密算法对随机字节字符串进行加密。它返回加密的字节字符串CiphertextForRecipient字段。这些区域有:Plaintext字段为空。