@@ -100,7 +100,7 @@ AWS Error: %w`, err)
100100 return nil , "" , diags .Append (c .NewNoValidCredentialSourcesError (err ))
101101 }
102102
103- if c .AssumeRole == nil {
103+ if len ( c .AssumeRole ) == 0 {
104104 return cfg .Credentials , creds .Source , diags
105105 }
106106
@@ -157,67 +157,73 @@ func assumeRoleCredentialsProvider(ctx context.Context, awsConfig aws.Config, c
157157
158158 logger := logging .RetrieveLogger (ctx )
159159
160- ar := c . AssumeRole
160+ var creds aws. CredentialsProvider
161161
162- if ar .RoleARN == "" {
163- return nil , diags .AddError (
164- "Cannot assume IAM Role" ,
165- "IAM Role ARN not set" ,
166- )
167- }
162+ total := len (c .AssumeRole )
163+ for i , ar := range c .AssumeRole {
164+ if ar .RoleARN == "" {
165+ return nil , diags .AddError (
166+ "Cannot assume IAM Role" ,
167+ fmt .Sprintf ("IAM Role ARN not set in assume role %d of %d" , i + 1 , total ),
168+ )
169+ }
168170
169- logger .Info (ctx , "Assuming IAM Role" , map [string ]any {
170- "tf_aws.assume_role.role_arn" : ar .RoleARN ,
171- "tf_aws.assume_role.session_name" : ar .SessionName ,
172- "tf_aws.assume_role.external_id" : ar .ExternalID ,
173- "tf_aws.assume_role.source_identity" : ar .SourceIdentity ,
174- })
171+ logger .Info (ctx , "Assuming IAM Role" , map [string ]any {
172+ "tf_aws.assume_role.index" : i ,
173+ "tf_aws.assume_role.role_arn" : ar .RoleARN ,
174+ "tf_aws.assume_role.session_name" : ar .SessionName ,
175+ "tf_aws.assume_role.external_id" : ar .ExternalID ,
176+ "tf_aws.assume_role.source_identity" : ar .SourceIdentity ,
177+ })
175178
176- // When assuming a role, we need to first authenticate the base credentials above, then assume the desired role
177- client := stsClient (ctx , awsConfig , c )
179+ // When assuming a role, we need to first authenticate the base credentials above, then assume the desired role
180+ client := stsClient (ctx , awsConfig , c )
178181
179- appCreds := stscreds .NewAssumeRoleProvider (client , ar .RoleARN , func (opts * stscreds.AssumeRoleOptions ) {
180- opts .RoleSessionName = ar .SessionName
181- opts .Duration = ar .Duration
182+ appCreds := stscreds .NewAssumeRoleProvider (client , ar .RoleARN , func (opts * stscreds.AssumeRoleOptions ) {
183+ opts .RoleSessionName = ar .SessionName
184+ opts .Duration = ar .Duration
182185
183- if ar .ExternalID != "" {
184- opts .ExternalID = aws .String (ar .ExternalID )
185- }
186+ if ar .ExternalID != "" {
187+ opts .ExternalID = aws .String (ar .ExternalID )
188+ }
186189
187- if ar .Policy != "" {
188- opts .Policy = aws .String (ar .Policy )
189- }
190+ if ar .Policy != "" {
191+ opts .Policy = aws .String (ar .Policy )
192+ }
190193
191- if len (ar .PolicyARNs ) > 0 {
192- opts .PolicyARNs = getPolicyDescriptorTypes (ar .PolicyARNs )
193- }
194+ if len (ar .PolicyARNs ) > 0 {
195+ opts .PolicyARNs = getPolicyDescriptorTypes (ar .PolicyARNs )
196+ }
194197
195- if len (ar .Tags ) > 0 {
196- var tags []types.Tag
197- for k , v := range ar .Tags {
198- tag := types.Tag {
199- Key : aws .String (k ),
200- Value : aws .String (v ),
198+ if len (ar .Tags ) > 0 {
199+ var tags []types.Tag
200+ for k , v := range ar .Tags {
201+ tag := types.Tag {
202+ Key : aws .String (k ),
203+ Value : aws .String (v ),
204+ }
205+ tags = append (tags , tag )
201206 }
202- tags = append (tags , tag )
203- }
204207
205- opts .Tags = tags
206- }
208+ opts .Tags = tags
209+ }
207210
208- if len (ar .TransitiveTagKeys ) > 0 {
209- opts .TransitiveTagKeys = ar .TransitiveTagKeys
210- }
211+ if len (ar .TransitiveTagKeys ) > 0 {
212+ opts .TransitiveTagKeys = ar .TransitiveTagKeys
213+ }
211214
212- if ar .SourceIdentity != "" {
213- opts .SourceIdentity = aws .String (ar .SourceIdentity )
215+ if ar .SourceIdentity != "" {
216+ opts .SourceIdentity = aws .String (ar .SourceIdentity )
217+ }
218+ })
219+ _ , err := appCreds .Retrieve (ctx )
220+ if err != nil {
221+ return nil , diags .Append (newCannotAssumeRoleError (ar , err ))
214222 }
215- })
216- _ , err := appCreds .Retrieve (ctx )
217- if err != nil {
218- return nil , diags .Append (c .NewCannotAssumeRoleError (err ))
223+ creds = aws .NewCredentialsCache (appCreds )
224+ awsConfig .Credentials = creds
219225 }
220- return aws . NewCredentialsCache ( appCreds ) , nil
226+ return creds , nil
221227}
222228
223229func getPolicyDescriptorTypes (policyARNs []string ) []types.PolicyDescriptorType {
0 commit comments