8000 Merge pull request #176 from ImFlog/feature/assume_role_support · classmethod/gradle-aws-plugin@04b37fc · GitHub
[go: up one dir, main page]

Skip to content

Commit 04b37fc

Browse files
authored
Merge pull request #176 from ImFlog/feature/assume_role_support
Add assumeRole providers support for AWS SDK
2 parents 6725f6c + 2960f3f commit 04b37fc

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

src/main/java/jp/classmethod/aws/gradle/AwsPluginExtension.java

Lines changed: 30 additions & 18 deletions
< 8000 /tr>
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131
import com.amazonaws.SdkClientException;
3232
import com.amazonaws.auth.AWSCredentialsProvider;
3333
import com.amazonaws.auth.AWSCredentialsProviderChain;
34-
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
3534
import com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper;
3635
import com.amazonaws.auth.EnvironmentVariableCredentialsProvider;
36+
import com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider;
3737
import com.amazonaws.auth.SystemPropertiesCredentialsProvider;
3838
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
3939
import com.amazonaws.regions.Region;
@@ -56,6 +56,10 @@ public class AwsPluginExtension {
5656
@Setter
5757
private String profileName;
5858

59+
@Getter
60+
@Setter
61+
private String roleArn;
62+
5963
@Getter
6064
@Setter
6165
private String region = Regions.US_EAST_1.getName();
@@ -70,29 +74,37 @@ public class AwsPluginExtension {
7074
private AWSCredentialsProvider credentialsProvider;
7175

7276

73-
public AWSCredentialsProvider newCredentialsProvider(String profileName) {
74-
if (credentialsProvider != null) {
75-
return credentialsProvider;
76-
}
77+
public AWSCredentialsProvider newCredentialsProvider(String profileName, String roleArn) {
78+
return credentialsProvider != null ? credentialsProvider : buildCredentialsProvider(profileName, roleArn);
79+
}
80+
81+
private AWSCredentialsProvider buildCredentialsProvider(String profileName, String roleArn) {
82+
List<AWSCredentialsProvider> providers = new ArrayList<>();
83+
providers.add(new EnvironmentVariableCredentialsProvider());
84+
providers.add(new SystemPropertiesCredentialsProvider());
85+
7786
String profileNameToUse = profileName != null ? profileName : this.profileName;
78-
if (Strings.isNullOrEmpty(profileNameToUse) == false) {
79-
List<AWSCredentialsProvider> providers = new ArrayList<AWSCredentialsProvider>();
80-
providers.add(new EnvironmentVariableCredentialsProvider());
81-
providers.add(new SystemPropertiesCredentialsProvider());
87+
if (!Strings.isNullOrEmpty(profileNameToUse)) {
8288
providers.add(new ProfileCredentialsProvider(profileNameToUse));
83-
providers.add(new EC2ContainerCredentialsProviderWrapper());
84-
return new AWSCredentialsProviderChain(providers);
8589
}
86-
return DefaultAWSCredentialsProviderChain.getInstance();
90+
String roleArnToUse = roleArn != null ? roleArn : this.roleArn;
91+
if (!Strings.isNullOrEmpty(roleArnToUse)) {
92+
STSAssumeRoleSessionCredentialsProvider assumeRoleProvider =
93+
new STSAssumeRoleSessionCredentialsProvider.Builder(roleArnToUse, "gradle").build();
94+
providers.add(assumeRoleProvider);
95+
}
96+
providers.add(new EC2ContainerCredentialsProviderWrapper());
97+
return new AWSCredentialsProviderChain(providers);
8798
}
8899

89-
public <T extends AmazonWebServiceClient> T createClient(Class<T> serviceClass, String profileName) {
90-
return createClient(serviceClass, profileName, null);
100+
public <T extends AmazonWebServiceClient> T createClient(Class<T> serviceClass, String profileName,
101+
String roleArn) {
102+
return createClient(serviceClass, profileName, roleArn, null);
91103
}
92104

93-
public <T extends AmazonWebServiceClient> T createClient(Class<T> serviceClass, String profileName,
105+
public <T extends AmazonWebServiceClient> T createClient(Class<T> serviceClass, String profileName, String roleArn,
94106
ClientConfiguration config) {
95-
AWSCredentialsProvider credentialsProvider = newCredentialsProvider(profileName);
107+
AWSCredentialsProvider credentialsProvider = newCredentialsProvider(profileName, roleArn);
96108
ClientConfiguration configToUse = config == null ? new ClientConfiguration() : config;
97109
if (this.proxyHost != null && this.proxyPort > 0) {
98110
configToUse.setProxyHost(this.proxyHost);
@@ -148,7 +160,7 @@ public String getActiveProfileName(String clientProfileName) {
148160

149161
public String getAccountId() {
150162
try {
151-
AWSSecurityTokenService sts = createClient(AWSSecurityTokenServiceClient.class, profileName);
163+
AWSSecurityTokenService sts = createClient(AWSSecurityTokenServiceClient.class, profileName, roleArn);
152164
sts.setRegion(getActiveRegion(region));
153165
return sts.getCallerIdentity(new GetCallerIdentityRequest()).getAccount();
154166
} catch (SdkClientException e) {
@@ -160,7 +172,7 @@ public String getAccountId() {
160172

161173
public String getUserArn() {
162174
try {
163-
AWSSecurityTokenService sts = createClient(AWSSecurityTokenServiceClient.class, profileName);
175+
AWSSecurityTokenService sts = createClient(AWSSecurityTokenServiceClient.class, profileName, roleArn);
164176
sts.setRegion(getActiveRegion(region));
165177
return sts.getCallerIdentity(new GetCallerIdentityRequest()).getArn();
166178
} catch (SdkClientException e) {

src/main/java/jp/classmethod/aws/gradle/common/BasePluginExtension.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public abstract class BasePluginExtension<T extends AmazonWebServiceClient> {
3838
@Setter
3939
private String profileName;
4040

41+
@Getter
42+
@Setter
43+
private String roleArn;
44+
4145
@Getter(lazy = true, onMethod = @__(@SuppressWarnings("unchecked")))
4246
private final T client = initClient();
4347

@@ -49,7 +53,7 @@ public BasePluginExtension(Project project, Class<T> awsClientClass) {
4953

5054
protected T initClient() {
5155
AwsPluginExtension aws = project.getExtensions().getByType(AwsPluginExtension.class);
52-
return aws.createClient(awsClientClass, profileName, buildClientConfiguration());
56+
return aws.createClient(awsClientClass, profileName, roleArn, buildClientConfiguration());
5357
}
5458

5559
/**

0 commit comments

Comments
 (0)
0