tmp*_*dev 6 amazon-web-services aws-kms
我正在 AWS Lambda 上编写无服务器函数。
在某些情况下,我需要使用kms:GenerateDataKey*权限。
这样做的目的究竟是什么。我检查了 AWS 文档,但它太神秘了。有人可以举一个实际例子来说明它的用途吗?
需要 kms:GenerateDataKey 权限的 Lambda 函数很可能使用对称数据密钥加密大量数据。
kms:GenerateDataKey用于实现信封加密,即用另一个密钥对一个密钥进行加密的过程。对称密钥算法比公钥算法更快并且产生更小的密文,而公钥算法提供了固有的角色分离和更容易的密钥管理。信封加密结合了每种策略的优势。
AWS 中的信封加密
在 KMS 中创建客户主密钥。尽管 CMK 可用于加密高达 4K 的数据,但它主要用于加密/解密数据加密密钥。
生成数据加密密钥 - 用于使用对称加密算法加密数据。
使用 CMK 加密数据密钥。
将加密数据和加密数据密钥存储在一起。
当用户调用 时kms:GenerateDataKey,KMS 会生成一个数据密钥,使用 CMK 对其进行加密,最后返回明文和加密的数据密钥对(上面的第 2 步和第 3 步)。
用户负责管理这些密钥。明文数据密钥通常在加密数据后立即丢弃,而加密数据密钥与加密数据一起存储。数据加密密钥必须kms:decrypt 在解密数据之前使用解密。
AWS KMS 密钥只能用于加密大小不超过 4 KB(4096 字节)的数据。为了加密大小大于 4 kb 的数据,使用了一种称为信封加密的方法,该方法并非 AWS 特有的。
不,你不应该。尽管可以使用 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值来解密加密的数据。
注意事项:
Plaintext值来完成的,而不是用CiphertextBlob值来完成的。your_kms_key_id_here为别名。检查此项以了解有关别名的更多信息。我不熟悉权限本身,但我在文档中找到了这一点:
\n\n从在 AWS KMS 中使用密钥策略 - AWS Key Management Service:
\n\n\n\n\n
kms:GenerateDataKey*\xe2\x80\x93 允许关键用户成功请求数据加密密钥(数据密钥)以用于客户端加密。密钥用户可以选择接收数据密钥\xe2\x80\x94 的两份副本,一份为明文形式,一份使用此 CMK\xe2\x80\x94 加密,或者仅接收数据密钥的加密形式。
| 归档时间: |
|
| 查看次数: |
3750 次 |
| 最近记录: |