gpt4 book ai didi

java - 如何使用别名获取KMS KeyId?

转载 作者:行者123 更新时间:2023-11-30 05:23:31 31 4
gpt4 key购买 nike

我正在使用 awssdk v2:https://sdk.amazonaws.com/java/api/latest/

我想使用客户管理的 KMS key 将对象放入 S3 中进行静态加密,我使用 sse-c 来实现此目的。然而,它似乎总是默认使用 AWS 托管 key ,而不是客户托管 key 。

以下是我的代码:

PutObjectRequest putObjectRequest =
PutObjectRequest.builder()
.bucket(bucket)
.key(key)
.serverSideEncryption(ServerSideEncryption.AWS_KMS)
.ssekmsKeyId(this.s3KmsKeyId) // my key alias
.build();

s3Client.putObject(putObjectRequest, RequestBody.fromString(data)); // data = some string value

我正在使用PutObjectRequest配置我的请求和 S3Client将其发送到 S3。

由于 key 设置为旋转,我无法使用 arn 或 keyId 本身。我似乎也找不到如何使用此 sdk 实现此目的的示例。

最佳答案

为了能够从 KMS 检索 KMS key ID,您需要使用 KmsClientsseKmsKeyId 不会接受别名,因为它无法使用别名计算出 key ID。

您可以执行以下操作:

KmsClient kmsClient = KmsClient.builder().build();
DescribeKeyRequest req = DescribeKeyRequest.builder().keyId("alias/your_kms_alias").build();
DescribeKeyResponse res = kmsClient.describeKey(req);

// See https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html
// For the response you will get back from DescribeKey

// Then create the request to S3

PutObjectRequest putObjectRequest =
PutObjectRequest.builder()
.bucket(bucket)
.key(key)
.serverSideEncryption(ServerSideEncryption.AWS_KMS)
.ssekmsKeyId(res.keyMetadata().keyId()) // the actual keyId from KMS CMK
.build();

s3Client.putObject(putObjectRequest, RequestBody.fromString(data));

另请参阅:https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kms/model/DescribeKeyRequest.html#keyId--

If you specify a predefined AWS alias (an AWS alias with no key ID), KMS associates the alias with an AWS managed CMK and returns its KeyId and Arn in the response.

希望有帮助。

关于java - 如何使用别名获取KMS KeyId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106620/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com