Read IAM session credentials from file
@@ -4,14 +4,20 @@ package com.yahoo.jdisc.cloud.aws;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.PropertiesCredentials;
-
+import com.amazonaws.auth.AWSSessionCredentials;
+import com.amazonaws.auth.BasicSessionCredentials;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Slime;
+import com.yahoo.slime.SlimeUtils;
+
+import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.concurrent.atomic.AtomicReference;
public class VespaAwsCredentialsProvider implements AWSCredentialsProvider {
- private static final String DEFAULT_CREDENTIALS_PATH = "/opt/vespa/var/container-data/opt/vespa/conf/credentials.properties";
+ private static final String DEFAULT_CREDENTIALS_PATH = "/opt/vespa/var/container-data/opt/vespa/conf/vespa/credentials.json";
private final AtomicReference<AWSCredentials> credentials = new AtomicReference<>();
private final Path credentialsPath;
@@ -29,11 +35,22 @@ public class VespaAwsCredentialsProvider implements AWSCredentialsProvider {
@Override
public void refresh() {
try {
- // TODO : implement reading from json file
- PropertiesCredentials propertiesCredentials = new PropertiesCredentials(this.credentialsPath.toFile());
- credentials.set(propertiesCredentials);
+ credentials.set(readCredentials());
} catch (Exception e) {
throw new RuntimeException("Unable to get credentials in " + credentialsPath.toString(), e);
}
}
+
+ private AWSSessionCredentials readCredentials() {
+ try {
+ Slime slime = SlimeUtils.jsonToSlime(Files.readAllBytes(credentialsPath));
+ Cursor cursor = slime.get();
+ String accessKey = cursor.field("awsAccessKey").asString();
+ String secretKey = cursor.field("awsSecretKey").asString();
+ String sessionToken = cursor.field("sessionToken").asString();
+ return new BasicSessionCredentials(accessKey, secretKey, sessionToken);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
