kms的目的是什么:AWS中的GenerateDataKey

tmp*_*dev 6 amazon-web-services aws-kms

我正在 AWS Lambda 上编写无服务器函数。

在某些情况下,我需要使用kms:GenerateDataKey*权限。

这样做的目的究竟是什么。我检查了 AWS 文档,但它太神秘了。有人可以举一个实际例子来说明它的用途吗?

Vik*_*yol 5

需要 kms:GenerateDataKey 权限的 Lambda 函数很可能使用对称数据密钥加密大量数据。

kms:GenerateDataKey用于实现信封加密,即用另一个密钥对一个密钥进行加密的过程。对称密钥算法比公钥算法更快并且产生更小的密文,而公钥算法提供了固有的角色分离和更容易的密钥管理。信封加密结合了每种策略的优势。

AWS 中的信封加密

  1. 在 KMS 中创建客户主密钥。尽管 CMK 可用于加密高达 4K 的数据,但它主要用于加密/解密数据加密密钥。

  2. 生成数据加密密钥 - 用于使用对称加密算法加密数据。

  3. 使用 CMK 加密数据密钥。

  4. 将加密数据和加密数据密钥存储在一起。

当用户调用 时kms:GenerateDataKey,KMS 会生成一个数据密钥,使用 CMK 对其进行加密,最后返回明文和加密的数据密钥对(上面的第 2 步和第 3 步)。

用户负责管理这些密钥。明文数据密钥通常在加密数据后立即丢弃,而加密数据密钥与加密数据一起存储。数据加密密钥必须kms:decrypt 在解密数据之前使用解密。

  • 仅当预签名 URL 的创建者具有上传该对象所需的权限时,您才可以上传该对象。因此,要生成预签名 URL,您需要能够在使用 SSE-KMS 时使用数据密钥加密对象。最后的星号涵盖了GenerateDataKey 和GenerateDataKeyWithoutPlaintext 操作。但我认为您不需要后一个操作。 (2认同)

Arv*_*ash 5

为什么我们需要它?

AWS KMS 密钥只能用于加密大小不超过 4 KB(4096 字节)的数据。为了加密大小大于 4 kb 的数据,使用了一种称为信封加密的方法,该方法并非 AWS 特有的。

我是否应该使用 AWS KMS 密钥加密最大 4 KB 的应用程序数据?

不,你不应该。尽管可以使用 AWS KMS 密钥加密大小不超过 4 KB 的应用程序数据,但它并非旨在加密应用程序数据。您可以查看加密和解密数据密钥以了解更多详细信息。

信封加密/解密如何工作?

您通过提供您的 KMS 密钥 ID 来请求 AWS 生成数据密钥(加密的和纯文本的),例如以下 CLI 命令

aws kms generate-data-key --key-id your_kms_key_id_here --key-spec AES_256
Run Code Online (Sandbox Code Playgroud)

会返回类似的东西

{
"CiphertextBlob":
"RkIBAHgMxXGERpLXTIIM54OPUp/dXeRYW2ALjX6EVz3skLXeBwG6AEIFFTyHrw6EXSuZxf7gAAAAfjB8Bgkqhk
iG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeDglghkgBZQMEAS4wEQQMqsMiCfXkoxHsHbxfAgEQgDunMIdAh
gNqLaI6QtKnw5UrqQhrPezpLSE0fvkUD4yVpkJp1594C8DV6wBohptgrmSVA8B16xU9VK+cWA==",

"Plaintext": "p7hbvvuIm0Bg2ZMNpXPWqZq5cKjv1bPj23HYA4d/syM=",

"KeyId":
"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用该Plaintext值来加密数据并将加密数据与该CiphertextBlob值一起存储。随后,您删除该Plaintext值。

要解密数据:Plaintext您可以通过向 AWS 提供您的 KMS 密钥 ID 以及CiphertextBlob您与加密数据一起存储的值来请求 AWS 返回一个值。您使用返回的Plaintext值来解密加密的数据。

注意事项

  1. 加密和解密是用Plaintext值来完成的,而不是用CiphertextBlob值来完成的。
  2. 一般做法是使用密钥的别名而不是密钥本身,即您应该替换your_kms_key_id_here为别名。检查此项以了解有关别名的更多信息。
  3. 检查此项以了解有关数据密钥的更多信息。


Joh*_*ein 2

我不熟悉权限本身,但我在文档中找到了这一点:

\n\n

在 AWS KMS 中使用密钥策略 - AWS Key Management Service

\n\n
\n

kms:GenerateDataKey*\xe2\x80\x93 允许关键用户成功请求数据加密密钥(数据密钥)以用于客户端加密。密钥用户可以选择接收数据密钥\xe2\x80\x94 的两份副本,一份为明文形式,一份使用此 CMK\xe2\x80\x94 加密,或者仅接收数据密钥的加密形式。

\n
\n