Доступ к значениям хранилища параметров AWS с помощью пользовательского ключа KMS

Я пытаюсь прочитать параметры AWS из хранилища параметров, используя Java, я создал параметры, используя пользовательский ключ шифрования. Я не вижу пример кода в Интернете, где он использует пользовательский ключ KMS, ниже приведен код, который у меня есть в настоящее время, который работает (здесь мы используем ключ KMS по умолчанию).

AWSSimpleSystemsManagement client= AWSSimpleSystemsManagementClientBuilder.defaultClient();
    GetParametersRequest request= new GetParametersRequest();
    request.withNames("test.username","test.password")
           .setWithDecryption(true);

Это даст результаты с ключом KMS по умолчанию. Кто-нибудь знает, как с этим справиться, если у нас есть специальный ключ KMS?

3 ответа

Решение

За GetParameters API, нет никакой разницы между использованием ключа KMS по умолчанию или пользовательского ключа KMS. Он всегда работает как ваш код. Просто убедитесь, что разрешение для учетных данных включает в себя пользовательский ключ.

Разница только в PutParameter API, при использовании ключа KMS по умолчанию его не нужно указывать, при использовании настраиваемого ключа KMS вы устанавливаете его KeyId в качестве настраиваемого ключа. KeyId может быть одним из следующих примеров:

  • Ключ ARN Пример arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012
  • Пример псевдонима ARN - arn:aws:kms:us-east-1:123456789012:alias/MyAliasName
  • Пример идентификатора глобального уникального ключа - 12345678-1234-1234-1234-123456789012
  • Пример псевдонима - alias/MyAliasName

На всякий случай, если кто-то ищет это (с ключом шифрования по умолчанию)

protected Parameter getParameterFromSSMByName(String parameterKey)
  {
    AWSCredentialsProvider credentials = InstanceProfileCredentialsProvider.getInstance();
    AWSSimpleSystemsManagement simpleSystemsManagementClient = (AWSSimpleSystemsManagement)((AWSSimpleSystemsManagementClientBuilder)((AWSSimpleSystemsManagementClientBuilder)AWSSimpleSystemsManagementClientBuilder.standard().withCredentials(credentials)).withRegion("us-east-1")).build();
    GetParameterRequest parameterRequest = new GetParameterRequest();
    parameterRequest.withName(parameterKey).setWithDecryption(Boolean.valueOf(true));
    GetParameterResult parameterResult = simpleSystemsManagementClient.getParameter(parameterRequest);
    return parameterResult.getParameter();
  }

Вот ответ @Extreme в виде класса с импортом и небольшой очисткой:

import com.amazonaws.auth.AWSCredentialsProvider;                                                                   
import com.amazonaws.auth.InstanceProfileCredentialsProvider;
import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement;
import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder;

import com.amazonaws.services.simplesystemsmanagement.model.GetParameterRequest;
import com.amazonaws.services.simplesystemsmanagement.model.GetParameterResult;

public class AWSSsmHelper
{
    private AWSCredentialsProvider credentials = InstanceProfileCredentialsProvider.getInstance();
    private AWSSimpleSystemsManagement simpleSystemsManagementClient =
        AWSSimpleSystemsManagementClientBuilder.standard().withCredentials(credentials)).withRegion("us-east-1")).build();                    

    public String getParameterFromSSMByName(String parameterKey) {
        GetParameterRequest parameterRequest = new GetParameterRequest();
        parameterRequest.withName(parameterKey).setWithDecryption(Boolean.valueOf(true));
        GetParameterResult parameterResult = simpleSystemsManagementClient.getParameter(parameterRequest);
        return parameterResult.getParameter().getValue();
    }
}
Другие вопросы по тегам