1
16
17 package org.springframework.cloud.aws.autoconfigure.context;
18
19 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
20 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
21 import org.springframework.boot.context.properties.ConfigurationProperties;
22 import org.springframework.cloud.aws.autoconfigure.context.properties.AwsCredentialsProperties;
23 import org.springframework.cloud.aws.context.config.annotation.ContextDefaultConfigurationRegistrar;
24 import org.springframework.cloud.aws.core.credentials.CredentialsProviderFactoryBean;
25 import org.springframework.context.EnvironmentAware;
26 import org.springframework.context.annotation.Bean;
27 import org.springframework.context.annotation.Configuration;
28 import org.springframework.context.annotation.Import;
29 import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
30 import org.springframework.core.env.Environment;
31 import org.springframework.core.type.AnnotationMetadata;
32 import org.springframework.util.StringUtils;
33
34 import static com.amazonaws.auth.profile.internal.AwsProfileNameLoader.DEFAULT_PROFILE_NAME;
35 import static org.springframework.cloud.aws.context.config.support.ContextConfigurationUtils.registerCredentialsProvider;
36 import static org.springframework.cloud.aws.context.config.support.ContextConfigurationUtils.registerDefaultAWSCredentialsProvider;
37
38
41 @Configuration(proxyBeanMethods = false)
42 @Import({ ContextDefaultConfigurationRegistrar.class,
43 ContextCredentialsAutoConfiguration.Registrar.class })
44 @ConditionalOnClass(name = "com.amazonaws.auth.AWSCredentialsProvider")
45 public class ContextCredentialsAutoConfiguration {
46
47
50 public static final String AWS_CREDENTIALS_PROPERTY_PREFIX = "cloud.aws.credentials";
51
52
56 @Bean
57 @ConfigurationProperties(prefix = AWS_CREDENTIALS_PROPERTY_PREFIX)
58 public AwsCredentialsProperties awsCredentialsProperties() {
59 return new AwsCredentialsProperties();
60 }
61
62
65 public static class Registrar
66 implements ImportBeanDefinitionRegistrar, EnvironmentAware {
67
68 private Environment environment;
69
70 @Override
71 public void setEnvironment(Environment environment) {
72 this.environment = environment;
73 }
74
75 @Override
76 public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
77 BeanDefinitionRegistry registry) {
78
79
80 if (registry.containsBeanDefinition(
81 CredentialsProviderFactoryBean.CREDENTIALS_PROVIDER_BEAN_NAME)) {
82 return;
83 }
84
85 Boolean useDefaultCredentialsChain = this.environment
86 .getProperty(
87 AWS_CREDENTIALS_PROPERTY_PREFIX
88 + ".use-default-aws-credentials-chain",
89 Boolean.class, false);
90 String accessKey = this.environment
91 .getProperty(AWS_CREDENTIALS_PROPERTY_PREFIX + ".access-key");
92 String secretKey = this.environment
93 .getProperty(AWS_CREDENTIALS_PROPERTY_PREFIX + ".secret-key");
94 if (useDefaultCredentialsChain && (StringUtils.isEmpty(accessKey)
95 || StringUtils.isEmpty(secretKey))) {
96 registerDefaultAWSCredentialsProvider(registry);
97 }
98 else {
99 registerCredentialsProvider(registry, accessKey, secretKey,
100 this.environment.getProperty(
101 AWS_CREDENTIALS_PROPERTY_PREFIX + ".instance-profile",
102 Boolean.class, true)
103 && !this.environment.containsProperty(
104 AWS_CREDENTIALS_PROPERTY_PREFIX + ".access-key"),
105 this.environment.getProperty(
106 AWS_CREDENTIALS_PROPERTY_PREFIX + ".profile-name",
107 DEFAULT_PROFILE_NAME),
108 this.environment.getProperty(
109 AWS_CREDENTIALS_PROPERTY_PREFIX + ".profile-path"));
110 }
111 }
112
113 }
114
115 }
116