AWS KMS存储客户主密钥

时间:2019-03-01 11:49:58

标签: aws-kms

我知道我在这里遗漏了一些东西,但是我很难理解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);`

现在,根据我的理解,每次我想对某些事物进行加密/解密时,都需要使用主密钥对加密的数据密钥进行解密。这意味着我需要将这两个密钥存储在某个位置。因此,如果其他人可以访问这两个密钥,他们是否可以使用AWS加密SDK解密我的数据?

1 个答案:

答案 0 :(得分:1)

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

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