AWS KMS 存储客户主密钥

AWS KMS storing customer master key

我知道我在这里遗漏了一些东西,但我很难理解 AWS KMS 中的 客户主密钥 概念。下面是示例代码。

创建主密钥的代码:

`CreateKeyRequest req = new CreateKeyRequest();
CreateKeyResult result = kmsClient.createKey(req);
String customerMasterKey = result.getKeyMetadata().getKeyId();`

使用客户主密钥创建数据密钥的代码:

`GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest();
dataKeyRequest.setKeyId(customerMasterKey);
dataKeyRequest.setKeySpec("AES_128");
GenerateDataKeyResult dataKeyResult = kmsClient.generateDataKey(dataKeyRequest);`

现在据我了解,每次我想要encrypt/decrypt一些东西时,我都需要使用主密钥来解密加密的数据密钥。这意味着我需要将这两个密钥存储在某个位置。那么如果其他人可以访问这两个密钥,他们是否能够使用 AWS 加密 SDK 解密我的数据?

  1. 主密钥永远不会离开 AWS,并且只能由对您的账户和密钥具有适当访问权限的人访问。如果他们可以访问您的帐户并拥有使用密钥的适当权限,那么他们可以使用主密钥 encrypt/decrypt 您的数据密钥。请记住,主密钥 ID 不是实际密钥,因此,拥有密钥 ID 在 AWS 之外没有用处。
  2. 您不存储这两个密钥,主密钥 ID 将始终可以使用控制台、CLI 或 SDK 查看(我假设因为我没有使用它)。
  3. 数据密钥不受 KMS 服务管理,因此,您必须将其(在使用主密钥加密后)与加密数据一起存储。

您的问题的答案是...如果碰巧有未经授权的人拥有您的主密钥 ID 和加密数据密钥的副本,他们将无法使用该主密钥,除非他们也可以访问您的 AWS 用户凭据,具有使用该主密钥的适当权限。