31
31
import com .amazonaws .SdkClientException ;
32
32
import com .amazonaws .auth .AWSCredentialsProvider ;
33
33
import com .amazonaws .auth .AWSCredentialsProviderChain ;
34
- import com .amazonaws .auth .DefaultAWSCredentialsProviderChain ;
35
34
import com .amazonaws .auth .EC2ContainerCredentialsProviderWrapper ;
36
35
import com .amazonaws .auth .EnvironmentVariableCredentialsProvider ;
36
+ import com .amazonaws .auth .STSAssumeRoleSessionCredentialsProvider ;
37
37
import com .amazonaws .auth .SystemPropertiesCredentialsProvider ;
38
38
import com .amazonaws .auth .profile .ProfileCredentialsProvider ;
39
39
import com .amazonaws .regions .Region ;
@@ -56,6 +56,10 @@ public class AwsPluginExtension {
56
56
@ Setter
57
57
private String profileName ;
58
58
59
+ @ Getter
60
+ @ Setter
61
+ private String roleArn ;
62
+
59
63
@ Getter
60
64
@ Setter
61
65
private String region = Regions .US_EAST_1 .getName ();
@@ -70,29 +74,37 @@ public class AwsPluginExtension {
70
74
private AWSCredentialsProvider credentialsProvider ;
71
75
72
76
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 ());
<
8000
/tr>
85
+
77
86
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 )) {
82
88
providers .add (new ProfileCredentialsProvider (profileNameToUse ));
83
- providers .add (new EC2ContainerCredentialsProviderWrapper ());
84
- return new AWSCredentialsProviderChain (providers );
85
89
}
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 );
87
98
}
88
99
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 );
91
103
}
92
104
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 ,
94
106
ClientConfiguration config ) {
95
- AWSCredentialsProvider credentialsProvider = newCredentialsProvider (profileName );
107
+ AWSCredentialsProvider credentialsProvider = newCredentialsProvider (profileName , roleArn );
96
108
ClientConfiguration configToUse = config == null ? new ClientConfiguration () : config ;
97
109
if (this .proxyHost != null && this .proxyPort > 0 ) {
98
110
configToUse .setProxyHost (this .proxyHost );
@@ -148,7 +160,7 @@ public String getActiveProfileName(String clientProfileName) {
148
160
149
161
public String getAccountId () {
150
162
try {
151
- AWSSecurityTokenService sts = createClient (AWSSecurityTokenServiceClient .class , profileName );
163
+ AWSSecurityTokenService sts = createClient (AWSSecurityTokenServiceClient .class , profileName , roleArn );
152
164
sts .setRegion (getActiveRegion (region ));
153
165
return sts .getCallerIdentity (new GetCallerIdentityRequest ()).getAccount ();
154
166
} catch (SdkClientException e ) {
@@ -160,7 +172,7 @@ public String getAccountId() {
160
172
161
173
public String getUserArn () {
162
174
try {
163
- AWSSecurityTokenService sts = createClient (AWSSecurityTokenServiceClient .class , profileName );
175
+ AWSSecurityTokenService sts = createClient (AWSSecurityTokenServiceClient .class , profileName , roleArn );
164
176
sts .setRegion (getActiveRegion (region ));
165
177
return sts .getCallerIdentity (new GetCallerIdentityRequest ()).getArn ();
166
178
} catch (SdkClientException e ) {
0 commit comments