diff --git a/fidelius-sdk/pom.xml b/fidelius-sdk/pom.xml
index 594a636..0534744 100644
--- a/fidelius-sdk/pom.xml
+++ b/fidelius-sdk/pom.xml
@@ -78,44 +78,60 @@
- 1.11.767
+ 2.16.60
+
+
+
+ software.amazon.awssdk
+ bom
+ ${aws.version}
+ pom
+ import
+
+
+
+
- aws-java-sdk-core
- com.amazonaws
- ${aws.version}
+ software.amazon.awssdk
+ apache-client
+
+
+
+ software.amazon.awssdk
+ auth
+
+
+
+ software.amazon.awssdk
+ dynamodb
- com.amazonaws
- aws-java-sdk-dynamodb
- ${aws.version}
+ software.amazon.awssdk
+ ec2
- com.amazonaws
- aws-java-sdk-kms
- ${aws.version}
+ software.amazon.awssdk
+ kms
- com.amazonaws
- aws-java-sdk-ec2
- ${aws.version}
+ software.amazon.awssdk
+ lambda
- com.amazonaws
- aws-java-sdk-sts
- ${aws.version}
+ software.amazon.awssdk
+ rds
- com.amazonaws
- aws-java-sdk-lambda
- ${aws.version}
+ software.amazon.awssdk
+ sts
@@ -182,7 +198,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.6.1
+ 3.10.1
diff --git a/fidelius-sdk/src/main/java/org/finra/fidelius/CredModelMapper.java b/fidelius-sdk/src/main/java/org/finra/fidelius/CredModelMapper.java
index aa306e3..c93b453 100644
--- a/fidelius-sdk/src/main/java/org/finra/fidelius/CredModelMapper.java
+++ b/fidelius-sdk/src/main/java/org/finra/fidelius/CredModelMapper.java
@@ -17,7 +17,7 @@
package org.finra.fidelius;
-import com.amazonaws.services.dynamodbv2.model.AttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import java.util.HashMap;
import java.util.Map;
@@ -31,28 +31,28 @@ private enum DynamoAttributes{
public static Map toDynamo(EncryptedCredential encryptedCredential){
HashMap dynamoRow = new HashMap<>();
- dynamoRow.put(DynamoAttributes.name.name(), new AttributeValue(encryptedCredential.getFullName()));
- dynamoRow.put(DynamoAttributes.version.name(), new AttributeValue(encryptedCredential.getVersion()));
- dynamoRow.put(DynamoAttributes.key.name(), new AttributeValue(encryptedCredential.getDatakey()));
- dynamoRow.put(DynamoAttributes.contents.name(), new AttributeValue(encryptedCredential.getCredential()));
- dynamoRow.put(DynamoAttributes.hmac.name(), new AttributeValue(encryptedCredential.getHmac()));
+ dynamoRow.put(DynamoAttributes.name.name(), AttributeValue.builder().s(encryptedCredential.getFullName()).build());
+ dynamoRow.put(DynamoAttributes.version.name(), AttributeValue.builder().s(encryptedCredential.getVersion()).build());
+ dynamoRow.put(DynamoAttributes.key.name(), AttributeValue.builder().s(encryptedCredential.getDatakey()).build());
+ dynamoRow.put(DynamoAttributes.contents.name(), AttributeValue.builder().s(encryptedCredential.getCredential()).build());
+ dynamoRow.put(DynamoAttributes.hmac.name(), AttributeValue.builder().s(encryptedCredential.getHmac()).build());
if(encryptedCredential.getUpdateBy()!=null)
- dynamoRow.put(DynamoAttributes.updatedBy.name(), new AttributeValue(encryptedCredential.getUpdateBy()));
+ dynamoRow.put(DynamoAttributes.updatedBy.name(), AttributeValue.builder().s(encryptedCredential.getUpdateBy()).build());
if(encryptedCredential.getUpdateOn()!=null)
- dynamoRow.put(DynamoAttributes.updatedOn.name(), new AttributeValue(encryptedCredential.getUpdateOn()));
+ dynamoRow.put(DynamoAttributes.updatedOn.name(), AttributeValue.builder().s(encryptedCredential.getUpdateOn()).build());
if(encryptedCredential.getSdlc()!=null)
- dynamoRow.put(DynamoAttributes.sdlc.name(), new AttributeValue(encryptedCredential.getSdlc()));
+ dynamoRow.put(DynamoAttributes.sdlc.name(), AttributeValue.builder().s(encryptedCredential.getSdlc()).build());
if(encryptedCredential.getComponent()!= null)
- dynamoRow.put(DynamoAttributes.component.name(), new AttributeValue(encryptedCredential.getComponent()));
+ dynamoRow.put(DynamoAttributes.component.name(), AttributeValue.builder().s(encryptedCredential.getComponent()).build());
return dynamoRow;
}
- public static EncryptedCredential fromDynamo(Map dynamoCred){
+ public static EncryptedCredential fromDynamo(Map dynamoCred){
return new EncryptedCredential()
.setFullName(getAttributeValue(DynamoAttributes.name.name(), dynamoCred))
.setCredential(getAttributeValue(DynamoAttributes.contents.name(),dynamoCred))
@@ -68,7 +68,7 @@ public static EncryptedCredential fromDynamo(Map dynamoCr
private static String getAttributeValue(String name, Map dynamoCred){
AttributeValue attributeValue = dynamoCred.get(name);
if(attributeValue!=null){
- return attributeValue.getS();
+ return attributeValue.s();
}
return null;
}
diff --git a/fidelius-sdk/src/main/java/org/finra/fidelius/FideliusClient.java b/fidelius-sdk/src/main/java/org/finra/fidelius/FideliusClient.java
index 279ee06..ef47a40 100755
--- a/fidelius-sdk/src/main/java/org/finra/fidelius/FideliusClient.java
+++ b/fidelius-sdk/src/main/java/org/finra/fidelius/FideliusClient.java
@@ -17,34 +17,41 @@
package org.finra.fidelius;
-import java.util.Collections;
+import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import com.amazonaws.ClientConfiguration;
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
-import com.amazonaws.regions.*;
-import com.amazonaws.retry.PredefinedRetryPolicies;
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
-import com.amazonaws.services.ec2.AmazonEC2;
-import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
-import com.amazonaws.services.ec2.model.*;
-import com.amazonaws.services.lambda.AWSLambda;
-import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
-import com.amazonaws.services.lambda.model.*;
-import com.amazonaws.services.kms.AWSKMS;
-import com.amazonaws.services.kms.AWSKMSClientBuilder;
-import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
-import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
-import com.amazonaws.services.securitytoken.model.GetCallerIdentityRequest;
-import com.amazonaws.util.EC2MetadataUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
+import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
+import software.amazon.awssdk.awscore.retry.AwsRetryPolicy;
+import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
+import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
+import software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder;
+import software.amazon.awssdk.http.SdkHttpClient;
+import software.amazon.awssdk.http.apache.ApacheHttpClient;
+import software.amazon.awssdk.http.apache.ProxyConfiguration;
+import software.amazon.awssdk.http.apache.internal.impl.ApacheSdkHttpClient;
+import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder;
+import software.amazon.awssdk.services.ec2.Ec2Client;
+import software.amazon.awssdk.services.ec2.Ec2ClientBuilder;
+import software.amazon.awssdk.services.ec2.model.*;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.KmsClientBuilder;
+import software.amazon.awssdk.services.lambda.LambdaClient;
+import software.amazon.awssdk.services.lambda.LambdaClientBuilder;
+import software.amazon.awssdk.services.sts.StsClient;
+import software.amazon.awssdk.services.sts.StsClientBuilder;
+import software.amazon.awssdk.services.sts.model.GetCallerIdentityRequest;
+
+import javax.swing.plaf.synth.Region;
public class FideliusClient {
@@ -52,79 +59,86 @@ public class FideliusClient {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
protected EnvConfig envConfig;
+ protected ProxyConfiguration proxyConfig;
protected JCredStash jCredStash;
- protected AWSSecurityTokenService awsSecurityTokenService;
+ protected StsClient stsClient;
- private final AmazonEC2 client;
- private final AWSLambda lambda;
+ private final Ec2Client ec2Client;
+ private final LambdaClient lambdaClient;
public FideliusClient() {
- this(null, new DefaultAWSCredentialsProviderChain());
+ this(null, AwsCredentialsProviderChain.builder().addCredentialsProvider(DefaultCredentialsProvider.create()).build());
}
public FideliusClient(String region) {
- this(null, new DefaultAWSCredentialsProviderChain(), region);
+ this(null, AwsCredentialsProviderChain.builder().addCredentialsProvider(DefaultCredentialsProvider.create()).build(), region);
}
- public FideliusClient(ClientConfiguration clientConf, AWSCredentialsProvider provider) {
+ public FideliusClient(ClientOverrideConfiguration clientConf, AwsCredentialsProvider provider) {
this(clientConf, provider, null);
}
- public FideliusClient(ClientConfiguration clientConf, AWSCredentialsProvider provider, String region) {
+ public FideliusClient(ClientOverrideConfiguration clientConf, AwsCredentialsProvider provider, String region) {
envConfig = new EnvConfig();
- ClientConfiguration kmsEc2ClientConfiguration = clientConf;
+ ClientOverrideConfiguration kmsEc2ClientConfiguration = clientConf;
if(clientConf==null){
clientConf = defaultClientConfiguration(envConfig);
- clientConf.setRetryPolicy(PredefinedRetryPolicies.DYNAMODB_DEFAULT);
kmsEc2ClientConfiguration = defaultClientConfiguration(envConfig);
- kmsEc2ClientConfiguration.setRetryPolicy(PredefinedRetryPolicies.getDefaultRetryPolicyWithCustomMaxRetries(5));
}
- AmazonDynamoDBClientBuilder ddbBuilder = AmazonDynamoDBClientBuilder.standard()
- .withCredentials(provider)
- .withClientConfiguration(clientConf);
+ DynamoDbClientBuilder dynamoDbBuilder = DynamoDbClient.builder()
+ .credentialsProvider(provider)
+ .overrideConfiguration(clientConf);
- AWSKMSClientBuilder kmsBuilder = AWSKMSClientBuilder.standard()
- .withCredentials(provider)
- .withClientConfiguration(kmsEc2ClientConfiguration);
+ KmsClientBuilder kmsBuilder = KmsClient.builder()
+ .credentialsProvider(provider)
+ .overrideConfiguration(kmsEc2ClientConfiguration);
- AWSSecurityTokenServiceClientBuilder stsBuilder = AWSSecurityTokenServiceClientBuilder.standard()
- .withClientConfiguration(clientConf)
- .withCredentials(provider);
+ StsClientBuilder stsBuilder = StsClient.builder()
+ .overrideConfiguration(clientConf)
+ .credentialsProvider(provider);
- AmazonEC2ClientBuilder clientBuilder = AmazonEC2ClientBuilder.standard()
- .withCredentials(provider)
- .withClientConfiguration(kmsEc2ClientConfiguration);
+ Ec2ClientBuilder clientBuilder = Ec2Client.builder()
+ .credentialsProvider(provider)
+ .overrideConfiguration(kmsEc2ClientConfiguration);
- AWSLambdaClientBuilder lambdaClientBuilder = AWSLambdaClientBuilder.standard()
- .withClientConfiguration(clientConf)
- .withCredentials(provider);
+ LambdaClientBuilder lambdaClientBuilder = LambdaClient.builder()
+ .credentialsProvider(provider)
+ .overrideConfiguration(clientConf);
if(region != null){
- Regions regionEnum = Regions.fromName(region);
- ddbBuilder.withRegion(regionEnum);
- kmsBuilder.withRegion(regionEnum);
- stsBuilder.withRegion(regionEnum);
- clientBuilder.withRegion(regionEnum);
- lambdaClientBuilder.withRegion(regionEnum);
+ software.amazon.awssdk.regions.Region awsRegion = software.amazon.awssdk.regions.Region.of(region);
+ dynamoDbBuilder = dynamoDbBuilder.region(awsRegion);
+ kmsBuilder = kmsBuilder.region(awsRegion);
+ stsBuilder = stsBuilder.region(awsRegion);
+ clientBuilder = clientBuilder.region(awsRegion);
+ lambdaClientBuilder = lambdaClientBuilder.region(awsRegion);
}
- lambda = lambdaClientBuilder.build();
- client = clientBuilder.build();
- awsSecurityTokenService = stsBuilder.build();
- jCredStash = new JCredStash(ddbBuilder.build(), kmsBuilder.build(), awsSecurityTokenService);
+ if(envConfig.hasProxyEnv()) {
+ SdkHttpClient sdkHttpClient = ApacheHttpClient.builder()
+ .proxyConfiguration(proxyConfig).build();
+ dynamoDbBuilder = dynamoDbBuilder.httpClient(sdkHttpClient);
+ kmsBuilder = kmsBuilder.httpClient(sdkHttpClient);
+ stsBuilder = stsBuilder.httpClient(sdkHttpClient);
+ clientBuilder = clientBuilder.httpClient(sdkHttpClient);
+ lambdaClientBuilder = lambdaClientBuilder.httpClient(sdkHttpClient);
+ }
+ lambdaClient = lambdaClientBuilder.build();
+ ec2Client = clientBuilder.build();
+ stsClient = stsBuilder.build();
+ jCredStash = new JCredStash(dynamoDbBuilder.build(), kmsBuilder.build(), stsClient);
}
- protected void setFideliusClient(AmazonDynamoDB ddb, AWSKMS kms) {
- jCredStash = new JCredStash(ddb, kms, awsSecurityTokenService);
+ protected void setFideliusClient(DynamoDbClient ddb, KmsClient kms) {
+ jCredStash = new JCredStash(ddb, kms, stsClient);
}
- protected ClientConfiguration defaultClientConfiguration(EnvConfig envConfig){
- ClientConfiguration clientConfiguration = new ClientConfiguration();
+ protected ClientOverrideConfiguration defaultClientConfiguration(EnvConfig envConfig){
+ ClientOverrideConfiguration clientConfiguration = ClientOverrideConfiguration.builder().retryPolicy(AwsRetryPolicy.defaultRetryPolicy()).build();
if(envConfig.hasProxyEnv()) {
- clientConfiguration.setProxyHost(envConfig.getProxy());
- clientConfiguration.setProxyPort(Integer.parseInt(envConfig.getPort()));
+ proxyConfig = ProxyConfiguration.builder().endpoint(URI.create(envConfig.getProxy() + ":" + envConfig.getPort())).build();
}
return clientConfiguration;
}
@@ -161,23 +175,23 @@ protected HashMap getEC2Tags() {
String instanceID = EC2MetadataUtils.getInstanceId();
- DescribeInstancesRequest instancesRequest = new DescribeInstancesRequest().withInstanceIds(instanceID);
- DescribeInstancesResult instancesResult = client.describeInstances(instancesRequest);
+ DescribeInstancesRequest instancesRequest = DescribeInstancesRequest.builder().instanceIds(instanceID).build();
+ DescribeInstancesResponse instancesResult = ec2Client.describeInstances(instancesRequest);
// There should only be one Instance with identical instanceID
- List reservations = instancesResult.getReservations();
+ List reservations = instancesResult.reservations();
if (reservations.size() > 1) {
return null;
}
Reservation reservation = reservations.get(0);
- Instance instance = reservation.getInstances().get(0);
- List tagList = instance.getTags();
+ Instance instance = reservation.instances().get(0);
+ List tagList = instance.tags();
HashMap tagMap = new HashMap();
for (Tag t : tagList) {
- if (t.getKey().equals(Constants.FID_CONTEXT_APPLICATION) || t.getKey().equals(Constants.FID_CONTEXT_SDLC) || t.getKey().equals(Constants.FID_CONTEXT_COMPONENT))
- tagMap.put(t.getKey(), t.getValue());
+ if (t.key().equals(Constants.FID_CONTEXT_APPLICATION) || t.key().equals(Constants.FID_CONTEXT_SDLC) || t.key().equals(Constants.FID_CONTEXT_COMPONENT))
+ tagMap.put(t.key(), t.value());
}
return tagMap;
}
@@ -245,7 +259,7 @@ protected String getUser() throws Exception {
}
protected String getUserIdentity() throws Exception {
- return awsSecurityTokenService.getCallerIdentity(new GetCallerIdentityRequest()).getArn();
+ return stsClient.getCallerIdentity(GetCallerIdentityRequest.builder().build()).arn();
}
/**
@@ -507,6 +521,9 @@ protected void deleteCredential(String name, String application, String sdlc,
logger.info("User "+ user + " deleted credential " + prefixedName);
} catch (RuntimeException e) { // Credential not found
logger.info("Credential " + prefixedName + " not found. [" + e.toString() + "] ");
+ for(StackTraceElement ste : e.getStackTrace()) {
+ logger.error(ste.toString());
+ }
throw new RuntimeException(e);
}
}
diff --git a/fidelius-sdk/src/main/java/org/finra/fidelius/JCredStash.java b/fidelius-sdk/src/main/java/org/finra/fidelius/JCredStash.java
index 5c3dea1..ac693ff 100644
--- a/fidelius-sdk/src/main/java/org/finra/fidelius/JCredStash.java
+++ b/fidelius-sdk/src/main/java/org/finra/fidelius/JCredStash.java
@@ -17,30 +17,19 @@
package org.finra.fidelius;
-import com.amazonaws.ClientConfiguration;
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
-
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
-import com.amazonaws.services.dynamodbv2.document.*;
-import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
-import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
-import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
-import com.amazonaws.services.dynamodbv2.model.*;
-import com.amazonaws.services.kms.AWSKMS;
-import com.amazonaws.services.kms.AWSKMSClientBuilder;
-import com.amazonaws.services.kms.model.DecryptRequest;
-import com.amazonaws.services.kms.model.DecryptResult;
-import com.amazonaws.services.kms.model.GenerateDataKeyRequest;
-import com.amazonaws.services.kms.model.GenerateDataKeyResult;
-import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
-import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
-import com.amazonaws.services.securitytoken.model.GetCallerIdentityRequest;
import org.apache.commons.codec.binary.Base64;
-import com.amazonaws.services.dynamodbv2.document.BatchWriteItemOutcome;
-import com.amazonaws.services.dynamodbv2.document.DynamoDB;
-import com.amazonaws.services.dynamodbv2.document.Item;
-import com.amazonaws.services.dynamodbv2.document.TableWriteItems;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+import software.amazon.awssdk.services.dynamodb.model.*;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.DecryptRequest;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+import software.amazon.awssdk.services.kms.model.GenerateDataKeyRequest;
+import software.amazon.awssdk.services.kms.model.GenerateDataKeyResponse;
+import software.amazon.awssdk.services.sts.StsClient;
+import software.amazon.awssdk.services.sts.model.GetCallerIdentityRequest;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
@@ -49,87 +38,108 @@
import java.util.*;
public class JCredStash {
- protected AmazonDynamoDB amazonDynamoDBClient;
- protected AWSKMS awskmsClient;
+ protected DynamoDbClient dynamoDbClient;
+ protected KmsClient kmsClient;
protected CredStashCrypto cryptoImpl;
- protected AWSSecurityTokenService awsSecurityTokenService;
- protected DynamoDB dynamoDB;
+ protected StsClient stsClient;
protected JCredStash() {
- this.amazonDynamoDBClient = AmazonDynamoDBClientBuilder.defaultClient();
- this.awskmsClient = AWSKMSClientBuilder.defaultClient();
+ this.dynamoDbClient = DynamoDbClient.builder().build();
+ this.kmsClient = KmsClient.builder().build();
this.cryptoImpl = new CredStashBouncyCastleCrypto();
- this.awsSecurityTokenService = AWSSecurityTokenServiceClient.builder().withClientConfiguration(new ClientConfiguration()).build();
- this.dynamoDB = new DynamoDB(amazonDynamoDBClient);
+ this.stsClient = StsClient.builder().overrideConfiguration(ClientOverrideConfiguration.builder().build()).build();
}
- protected JCredStash(AWSCredentialsProvider awsCredentialsProvider) {
- this.amazonDynamoDBClient = AmazonDynamoDBClientBuilder.standard()
- .withCredentials(awsCredentialsProvider)
+ protected JCredStash(AwsCredentialsProvider awsCredentialsProvider) {
+ this.dynamoDbClient = DynamoDbClient.builder()
+ .credentialsProvider(awsCredentialsProvider)
.build();
- this.awskmsClient = AWSKMSClientBuilder.standard()
- .withCredentials(awsCredentialsProvider)
+ this.kmsClient = KmsClient.builder()
+ .credentialsProvider(awsCredentialsProvider)
.build();
this.cryptoImpl = new CredStashBouncyCastleCrypto();
- this.awsSecurityTokenService = AWSSecurityTokenServiceClient.builder().withClientConfiguration(new ClientConfiguration()).build();
- this.dynamoDB = new DynamoDB(amazonDynamoDBClient);
+ this.stsClient = StsClient.builder().overrideConfiguration(ClientOverrideConfiguration.builder().build()).build();
}
- protected JCredStash(AmazonDynamoDB amazonDynamoDBClient, AWSKMS awskmsClient) {
- this.amazonDynamoDBClient = amazonDynamoDBClient;
- this.awskmsClient = awskmsClient;
+ protected JCredStash(DynamoDbClient amazonDynamoDBClient, KmsClient awskmsClient) {
+ this.dynamoDbClient = amazonDynamoDBClient;
+ this.kmsClient = awskmsClient;
this.cryptoImpl = new CredStashBouncyCastleCrypto();
- this.awsSecurityTokenService = AWSSecurityTokenServiceClient.builder().withClientConfiguration(new ClientConfiguration()).build();
- this.dynamoDB = new DynamoDB(amazonDynamoDBClient);
+ this.stsClient = StsClient.builder().overrideConfiguration(ClientOverrideConfiguration.builder().build()).build();
}
- protected JCredStash(AmazonDynamoDB amazonDynamoDBClient, AWSKMS awskmsClient, AWSSecurityTokenService awsSecurityTokenService) {
- this.amazonDynamoDBClient = amazonDynamoDBClient;
- this.awskmsClient = awskmsClient;
+ protected JCredStash(DynamoDbClient dynamoDbClient, KmsClient kmsClient, StsClient stsClient) {
+ this.dynamoDbClient = dynamoDbClient;
+ this.kmsClient = kmsClient;
this.cryptoImpl = new CredStashBouncyCastleCrypto();
- this.awsSecurityTokenService = awsSecurityTokenService;
- this.dynamoDB = new DynamoDB(amazonDynamoDBClient);
+ this.stsClient = stsClient;
}
protected Map readDynamoItem(String tableName, String secret) {
// TODO: allow multiple secrets to be fetched by pattern or list
// TODO: allow specific version to be fetched
- QueryResult queryResult = amazonDynamoDBClient.query(new QueryRequest(tableName)
- .withLimit(1)
- .withScanIndexForward(false)
- .withConsistentRead(true)
- .addKeyConditionsEntry("name", new Condition()
- .withComparisonOperator(ComparisonOperator.EQ)
- .withAttributeValueList(new AttributeValue(secret)))
+ Map keyConditions = new HashMap<>();
+ keyConditions.put("name", Condition.builder()
+ .attributeValueList(
+ AttributeValue.builder().s(secret).build()
+ )
+ .comparisonOperator(ComparisonOperator.EQ)
+ .build());
+ keyConditions.put("version", Condition.builder()
+ .attributeValueList(
+ AttributeValue.builder().s("0").build()
+ )
+ .comparisonOperator(ComparisonOperator.BEGINS_WITH)
+ .build());
+ QueryResponse queryResponse = dynamoDbClient.query(QueryRequest.builder()
+ .tableName(tableName)
+ .limit(1)
+ .scanIndexForward(false)
+ .consistentRead(true)
+ .keyConditions(keyConditions)
+ .build()
);
- if(queryResult.getCount() == 0) {
+ if(queryResponse.count() == 0) {
throw new RuntimeException("Secret " + secret + " could not be found");
}
- Map item = queryResult.getItems().get(0);
+ Map item = queryResponse.items().get(0);
return item;
}
- protected QueryResult getCredentials(String tableName, String secret) {
- QueryRequest queryRequest = new QueryRequest(tableName)
- .withScanIndexForward(false)
- .withConsistentRead(true)
- .addKeyConditionsEntry("name", new Condition()
- .withComparisonOperator(ComparisonOperator.EQ)
- .withAttributeValueList(new AttributeValue(secret)));
+ protected QueryResponse getCredentials(String tableName, String secret) {
+ Map keyConditions = new HashMap<>();
+ keyConditions.put("name", Condition.builder()
+ .attributeValueList(
+ AttributeValue.builder().s(secret).build()
+ )
+ .comparisonOperator(ComparisonOperator.EQ)
+ .build());
+ keyConditions.put("version", Condition.builder()
+ .attributeValueList(
+ AttributeValue.builder().s("0").build()
+ )
+ .comparisonOperator(ComparisonOperator.BEGINS_WITH)
+ .build());
+ QueryRequest queryRequest = QueryRequest.builder()
+ .tableName(tableName)
+ .scanIndexForward(false)
+ .consistentRead(true)
+ .keyConditions(keyConditions)
+ .build();
- QueryResult queryResult = amazonDynamoDBClient.query(queryRequest);
+ QueryResponse queryResponse = dynamoDbClient.query(queryRequest);
- if(queryResult.getCount() == 0) {
+ if(queryResponse.count() == 0) {
throw new RuntimeException("Secret " + secret + " could not be found");
}
- return queryResult;
+ return queryResponse;
}
protected String getUpdatedBy() throws Exception {
try {
- return awsSecurityTokenService.getCallerIdentity(new GetCallerIdentityRequest()).getArn();
+ return stsClient.getCallerIdentity(GetCallerIdentityRequest.builder().build()).arn();
} catch(Exception e){
throw new RuntimeException("Error getting user");
}
@@ -138,37 +148,33 @@ protected String getUpdatedBy() throws Exception {
private ByteBuffer decryptKeyWithKMS(byte[] encryptedKeyBytes, Map context) {
ByteBuffer blob = ByteBuffer.wrap(encryptedKeyBytes);
- DecryptResult decryptResult = awskmsClient.decrypt(new DecryptRequest().withCiphertextBlob(blob).withEncryptionContext(context));
+ DecryptResponse decryptResponse = kmsClient.decrypt(DecryptRequest.builder().ciphertextBlob(SdkBytes.fromByteBuffer(blob)).encryptionContext(context).build());
- return decryptResult.getPlaintext();
+ return decryptResponse.plaintext().asByteBuffer();
}
protected int getHighestVersion(String name, String tableName) {
+ HashMap attributeName = new HashMap();
+ HashMap attributeValue = new HashMap();
+ attributeName.put("#n", "name");
+ attributeValue.put(":v_name", AttributeValue.builder().s(name).build());
+ QueryRequest spec = QueryRequest.builder()
+ .tableName(tableName)
+ .scanIndexForward(false)
+ .consistentRead(true)
+ .keyConditionExpression("#n = :v_name")
+ .expressionAttributeValues(attributeValue)
+ .expressionAttributeNames(attributeName)
+ .projectionExpression("version")
+ .build();
- DynamoDB dynamoDB = new DynamoDB(amazonDynamoDBClient);
- Table table = dynamoDB.getTable(tableName);
-
- QuerySpec spec = new QuerySpec()
- .withScanIndexForward(false)
- .withConsistentRead(true)
- .withKeyConditionExpression("#n = :v_name")
- .withValueMap(new ValueMap()
- .withString(":v_name", name)
- )
- .withNameMap(new NameMap()
- .with("#n", "name")
- )
- .withProjectionExpression("version");
-
- ItemCollection items = table.query(spec);
+ List