首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS KMS解密:如何配置KMS密钥?

AWS KMS解密:如何配置KMS密钥?
EN

Stack Overflow用户
提问于 2019-07-09 11:30:27
回答 3查看 1.2K关注 0票数 2

对于密码文本blob是如何用AWS KMS客户端解密的,我有点困惑。下面是AWS文档的一个示例:

代码语言:javascript
复制
// Encrypt a data key
//
// Replace the following fictitious CMK ARN with a valid CMK ID or ARN
String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd- 
56ef-1234567890ab";
ByteBuffer plaintext = ByteBuffer.wrap(new byte[]{1,2,3,4,5,6,7,8,9,0});

EncryptRequest req = new 
EncryptRequest().withKeyId(keyId).withPlaintext(plaintext);
ByteBuffer ciphertext = kmsClient.encrypt(req).getCiphertextBlob();

// Decrypt a data key
//

ByteBuffer ciphertextBlob = Place your ciphertext here;

DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob);
ByteBuffer plainText = kmsClient.decrypt(req).getPlaintext();

在解密方法中没有提供任何KMS密钥。这是否意味着KMS密钥在密码文本blob中被加密了?如果是这样..。

  • 如何授予解密加密密文blob的权限?
  • 如果我想解密AWS服务中的值,是否创建一个IAM角色来这样做,并配置KMS密钥以允许该角色解密?
EN

回答 3

Stack Overflow用户

发布于 2019-07-09 11:43:31

您的示例来自加密和解密数据密钥

这些操作旨在对数据键进行加密和解密。它们在加密操作中使用AWS 客户主键 (CMK),它们不能接受超过4KB (4096字节)的数据。虽然您可能会使用它们来加密少量数据,例如密码或RSA密钥,但它们并不用于加密应用程序数据。

CMK:

是在AWS KMS中创建的,并且从不让AWS KMS不加密。要使用或管理您的CMK,您可以通过AWS KMS访问它们。

这些操作都使用AWS设置中配置的主键,而不是动态提供的键。使用AWS管理控制台来管理这些密钥。

使用加密法时,密钥ID存储在响应中:

代码语言:javascript
复制
{
   "CiphertextBlob": blob,
   "KeyId": "string"
}

它将在解密过程中使用。

票数 1
EN

Stack Overflow用户

发布于 2021-03-26 19:23:23

代码语言:javascript
复制
AmazonKeyManagementServiceConfig kmsConfig = new AmazonKeyManagementServiceConfig();
            kmsConfig.UseHttp = true;
            kmsConfig.ServiceURL = serviceEndPoint;
                //create client, specify Region end point or kms config
                AmazonKeyManagementServiceClient kmsClient = new AmazonKeyManagementServiceClient(awsKeyForKMS, awsSecretKeyForKMS, kmsConfig);
                DecryptRequest decryptRequest = new DecryptRequest();
// use hare above created encrypteddatakey to get plaindatakey
                MemoryStream streamEncryptedDataKey = new MemoryStream(Convert.FromBase64String(encryptedDataKey));//convert to stream object
                decryptRequest.CiphertextBlob = streamEncryptedDataKey;
                DecryptResponse decry`enter code here`ptResp = kmsClient.Decrypt(decryptRequest);
                plainDataKey = Convert.ToBase64String(decryptResp.Plaintext.ToArray());
// your decryption logic
             DecryptTexts("encrypted data", PlainKey)
票数 0
EN

Stack Overflow用户

发布于 2021-06-28 14:11:48

为了解决这个问题,我假设您使用的是带有对称加密的AWS KMS CMK。

当使用对称密钥时,密码文本块的内容确实包括使用哪个KMS密钥对其进行加密。在这里可以看到更多的信息:https://docs.aws.amazon.com/kms/latest/developerguide/programming-encryption.html#decryption,他们仍然注意到您应该指定一个密钥来解密它,但是不需要它,因为它在密码文本块中。

但是,该密钥id的存在并不授予任何权限来使用该密钥解密任何内容。您可以拥有一个用户/实体,该用户/实体允许在不允许使用该密钥解密的情况下对事物进行加密,包括他们刚刚加密的消息。您可以通过两种不同的方式控制谁可以访问解密函数。

第一个是“关键政策”。在评估是否允许访问时,关键策略总是“win”。默认情况下,密钥策略设置为‘允许任何人使用IAM允许的密钥’。(顺便说一句,IAM是获得访问的第二种方式,但前提是密钥策略允许将该密钥委托给它)。键策略仅应用于应用到的键(即使资源字段为“*”)。关键策略可以允许访问特定实体/用户/帐户和/或委托给IAM。您可以在这里阅读更多关于默认密钥策略的内容:https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default

第二个是IAM,您可能更熟悉普通帐户权限。在这里,您还可以授予对kms的访问权限:对策略语句进行解密,并授予希望将其应用于的资源。

然而,回到你最初的问题:

如何授予解密加密密文blob的权限?

通过对kms的访问:解密权限,通过密钥策略或IAM (当在密钥策略中启用对IAM的委托时)。

如果我想解密AWS服务中的值,是否创建一个IAM角色来这样做,并配置KMS密钥以允许该角色解密?

不管是谁创建了密钥,如果数据元素受到KMS密钥的保护,则需要授予该密钥访问kms:解密的权限。(例外:一些AWS服务需要授权,比如EBS,而不是kms:decrypt,原因是技术级别较低,但同样的原则也适用)。确保密钥策略启用了IAM委托,然后可以将策略附加到允许访问kms的IAM角色:对该密钥解密以访问具有该角色的用户/实体的解密操作。当然,您需要允许AWS首先使用该密钥进行加密(这是通过密钥策略实现的,其中主体是AWS服务),但我认为您已经这样做了,因为您的问题是关于解密的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56951588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档