Как получить KMS KeyId, используя псевдоним?

Я использую awssdk v2: https://sdk.amazonaws.com/java/api/latest/

Я хочу поместить объекты в S3, используя управляемый клиентом ключ KMS для шифрования в состоянии покоя, я использую sse-c для достижения этой цели. Однако по умолчанию всегда используется управляемый ключ AWS, а не ключ, управляемый клиентом.

Ниже приведен мой код:

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.

Поскольку ключи настроены на вращение, я не могу использовать арн или сам keyId. Я также не могу найти пример того, как этого можно добиться с помощью этого SDK.


person px06    schedule 29.11.2019    source источник


Ответы (2)


Чтобы получить идентификатор ключа KMS из KMS, вам необходимо использовать KmsClient. sseKmsKeyId не примет псевдоним, потому что он не может определить идентификатор ключа, используя псевдоним.

Вы можете сделать что-то вроде следующего:

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--

Если вы укажете предопределенный псевдоним AWS (псевдоним AWS без идентификатора ключа), KMS связывает псевдоним с CMK, управляемым AWS, и возвращает его KeyId и Arn в ответе.

Надеюсь, это поможет.

person sham    schedule 03.12.2019

можно использовать псевдоним с s3 put. смог сделать это с помощью cmk. использовал версию v1 aws sdk

PutObjectRequest putObjectRequest =
    PutObjectRequest.builder()
        .bucket(bucket)
        .key(key)
        .serverSideEncryption(ServerSideEncryption.AWS_KMS)
        .ssekmsKeyId("alias/kms-key-id-alias-name") // use this format and it uploads
        .build();
person vishnu g    schedule 11.02.2020