private List setLocalSecretsManagerResources()

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