This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ffb21cb2e8af62a26e4acaeb6ba1a4ef2cc12cb3
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Fri Sep 9 07:14:57 2022 +0200

    CAMEL-18487 - Camel-AWS-Secrets-Manager: Cloudtrail task should support 
environment variables as configuration too
---
 .../vault/CloudTrailReloadTriggerTask.java         | 46 ++++++++++++++++------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
 
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
index f4f8f386769..532b10464f5 100644
--- 
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
+++ 
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.RuntimeCamelException;
 import 
org.apache.camel.component.aws.secretsmanager.SecretsManagerPropertiesFunction;
 import org.apache.camel.spi.ContextReloadStrategy;
 import org.apache.camel.spi.PropertiesComponent;
@@ -34,6 +35,7 @@ import org.apache.camel.spi.annotations.PeriodicTask;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.vault.AwsVaultConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
@@ -48,6 +50,8 @@ import 
software.amazon.awssdk.services.cloudtrail.model.LookupAttributeKey;
 import software.amazon.awssdk.services.cloudtrail.model.LookupEventsRequest;
 import software.amazon.awssdk.services.cloudtrail.model.LookupEventsResponse;
 import software.amazon.awssdk.services.cloudtrail.model.Resource;
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
+import 
software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder;
 
 /**
  * Period task which checks if AWS secrets has been updated and can trigger 
Camel to be reloaded.
@@ -55,7 +59,11 @@ import 
software.amazon.awssdk.services.cloudtrail.model.Resource;
 @PeriodicTask("aws-secret-refresh")
 public class CloudTrailReloadTriggerTask extends ServiceSupport implements 
CamelContextAware, Runnable {
 
-    // TODO: support ENV like SecretsManagerPropertiesFunction
+    private static final String CAMEL_AWS_VAULT_ACCESS_KEY_ENV = 
"CAMEL_VAULT_AWS_ACCESS_KEY";
+    private static final String CAMEL_AWS_VAULT_SECRET_KEY_ENV = 
"CAMEL_VAULT_AWS_SECRET_KEY";
+    private static final String CAMEL_AWS_VAULT_REGION_ENV = 
"CAMEL_VAULT_AWS_REGION";
+    private static final String 
CAMEL_AWS_VAULT_USE_DEFAULT_CREDENTIALS_PROVIDER_ENV
+            = "CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(CloudTrailReloadTriggerTask.class);
     private static final String SECRETSMANAGER_AMAZONAWS_COM = 
"secretsmanager.amazonaws.com";
@@ -132,18 +140,34 @@ public class CloudTrailReloadTriggerTask extends 
ServiceSupport implements Camel
             throw new IllegalArgumentException("Secrets must be configured on 
AWS vault configuration");
         }
 
-        CloudTrailClientBuilder cloudTrailClientBuilder;
-        Region regionValue = 
Region.of(camelContext.getVaultConfiguration().aws().getRegion());
-        if 
(camelContext.getVaultConfiguration().aws().isDefaultCredentialsProvider()) {
-            cloudTrailClientBuilder = CloudTrailClient.builder()
-                    .region(regionValue)
-                    .credentialsProvider(ProfileCredentialsProvider.create());
+        String accessKey = System.getenv(CAMEL_AWS_VAULT_ACCESS_KEY_ENV);
+        String secretKey = System.getenv(CAMEL_AWS_VAULT_SECRET_KEY_ENV);
+        String region = System.getenv(CAMEL_AWS_VAULT_REGION_ENV);
+        boolean useDefaultCredentialsProvider
+                = 
Boolean.parseBoolean(System.getenv(CAMEL_AWS_VAULT_USE_DEFAULT_CREDENTIALS_PROVIDER_ENV));
+        if (ObjectHelper.isEmpty(accessKey) && ObjectHelper.isEmpty(secretKey) 
&& ObjectHelper.isEmpty(region)) {
+            AwsVaultConfiguration awsVaultConfiguration = 
getCamelContext().getVaultConfiguration().aws();
+            if (ObjectHelper.isNotEmpty(awsVaultConfiguration)) {
+                accessKey = awsVaultConfiguration.getAccessKey();
+                secretKey = awsVaultConfiguration.getSecretKey();
+                region = awsVaultConfiguration.getRegion();
+                useDefaultCredentialsProvider = 
awsVaultConfiguration.isDefaultCredentialsProvider();
+            }
+        }
+        if (ObjectHelper.isNotEmpty(accessKey) && 
ObjectHelper.isNotEmpty(secretKey) && ObjectHelper.isNotEmpty(region)) {
+            CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder();
+            AwsBasicCredentials cred = AwsBasicCredentials.create(accessKey, 
secretKey);
+            clientBuilder = 
clientBuilder.credentialsProvider(StaticCredentialsProvider.create(cred));
+            clientBuilder.region(Region.of(region));
+            cloudTrailClient = clientBuilder.build();
+        } else if (useDefaultCredentialsProvider && 
ObjectHelper.isNotEmpty(region)) {
+            CloudTrailClientBuilder clientBuilder = CloudTrailClient.builder();
+            clientBuilder.region(Region.of(region));
+            cloudTrailClient = clientBuilder.build();
         } else {
-            AwsBasicCredentials cred = 
AwsBasicCredentials.create(camelContext.getVaultConfiguration().aws().getAccessKey(),
-                    camelContext.getVaultConfiguration().aws().getSecretKey());
-            cloudTrailClientBuilder = 
CloudTrailClient.builder().credentialsProvider(StaticCredentialsProvider.create(cred));
+            throw new RuntimeCamelException(
+                    "Using the AWS Secrets Refresh Task requires setting AWS 
credentials as application properties or environment variables");
         }
-        cloudTrailClient = cloudTrailClientBuilder.build();
     }
 
     @Override

Reply via email to