in src/main/java/com/awslabs/aws/greengrass/provisioner/implementations/helpers/BasicFunctionHelper.java [553:609]
private List<String> setLocalSecretsManagerResources(ImmutableFunctionConf.Builder functionConfBuilder, Config config) {
List<String> secretNames = new ArrayList<>();
List<String> idList = config.getStringList("conf.localSecretsManagerResources");
String functionNameString = functionConfBuilder.build().getFunctionName().getName();
if (idList.size() == 0) {
log.debug(String.join("", "No local secrets manager resources specified for [", functionNameString, "] function"));
return secretNames;
}
for (String id : idList) {
String arn = id;
if (!id.contains(":")) {
// No colons specified, check to see if this is reference to the name
arn = secretsManagerHelper.getSecretArnFromName(id);
}
String[] arnComponents = arn.split(":");
// Validate the ARN. Example ARN: arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3
// Example ARN from https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html
if (arnComponents.length != 7) {
throw new RuntimeException(String.join("", "Secrets manager ARN looks malformed [", arn, "]"));
}
if (!arnComponents[2].equals("secretsmanager")) {
throw new RuntimeException(String.join("", "Secrets manager ARN does not look like a secrets manager ARN [", arn, "], third component is not 'secretsmanager'"));
}
if (!arnComponents[5].equals("secret")) {
throw new RuntimeException(String.join("", "Secrets manager ARN does not look like a secrets manager ARN [", arn, "], second to last component is not 'secret'"));
}
String resourceName = arnComponents[6];
String secretName = secretsManagerHelper.getSecretNameFromArn(arn);
secretNames.add(secretName);
LocalSecretsManagerResource localSecretsManagerResource = ImmutableLocalSecretsManagerResource.builder()
.arn(arn)
.secretName(secretName)
.resourceName(resourceName)
.build();
log.info(String.join("", "Adding secret resource [", resourceName, "] with name [", secretName, "] to function [", functionNameString, "]"));
functionConfBuilder.addLocalSecretsManagerResources(localSecretsManagerResource);
}
return secretNames;
}