Skip to content

Commit fd9148c

Browse files
authored
Merge pull request #311 from wlami/assume-role-source-identity
Support STS AssumeRole SourceIdentity value
2 parents 8c8bf84 + f504650 commit fd9148c

File tree

5 files changed

+45
-1
lines changed

5 files changed

+45
-1
lines changed

aws_config_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,25 @@ func TestGetAwsConfig(t *testing.T) {
208208
servicemocks.MockStsGetCallerIdentityValidEndpoint,
209209
},
210210
},
211+
{
212+
Config: &Config{
213+
AccessKey: servicemocks.MockStaticAccessKey,
214+
AssumeRole: &AssumeRole{
215+
RoleARN: servicemocks.MockStsAssumeRoleArn,
216+
SessionName: servicemocks.MockStsAssumeRoleSessionName,
217+
SourceIdentity: servicemocks.MockStsAssumeRoleSourceIdentity,
218+
},
219+
Region: "us-east-1",
220+
SecretKey: servicemocks.MockStaticSecretKey,
221+
},
222+
Description: "config AssumeRoleSourceIdentity",
223+
ExpectedCredentialsValue: mockdata.MockStsAssumeRoleCredentials,
224+
ExpectedRegion: "us-east-1",
225+
MockStsEndpoints: []*servicemocks.MockEndpoint{
226+
servicemocks.MockStsAssumeRoleValidEndpointWithOptions(map[string]string{"SourceIdentity": servicemocks.MockStsAssumeRoleSourceIdentity}),
227+
servicemocks.MockStsGetCallerIdentityValidEndpoint,
228+
},
229+
},
211230
{
212231
Config: &Config{
213232
Profile: "SharedCredentialsProfile",

credentials.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func assumeRoleCredentialsProvider(ctx context.Context, awsConfig aws.Config, c
202202
}
203203

204204
// When assuming a role, we need to first authenticate the base credentials above, then assume the desired role
205-
log.Printf("[INFO] Assuming IAM Role %q (SessionName: %q, ExternalId: %q)", ar.RoleARN, ar.SessionName, ar.ExternalID)
205+
log.Printf("[INFO] Assuming IAM Role %q (SessionName: %q, ExternalId: %q, SourceIdentity: %q)", ar.RoleARN, ar.SessionName, ar.ExternalID, ar.SourceIdentity)
206206

207207
client := stsClient(awsConfig, c)
208208

@@ -238,6 +238,10 @@ func assumeRoleCredentialsProvider(ctx context.Context, awsConfig aws.Config, c
238238
if len(ar.TransitiveTagKeys) > 0 {
239239
opts.TransitiveTagKeys = ar.TransitiveTagKeys
240240
}
241+
242+
if ar.SourceIdentity != "" {
243+
opts.SourceIdentity = aws.String(ar.SourceIdentity)
244+
}
241245
})
242246
_, err := appCreds.Retrieve(ctx)
243247
if err != nil {

internal/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type AssumeRole struct {
4848
Policy string
4949
PolicyARNs []string
5050
SessionName string
51+
SourceIdentity string
5152
Tags map[string]string
5253
TransitiveTagKeys []string
5354
}

servicemocks/mock.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const (
5151
MockStsAssumeRoleSecretKey = `AssumeRoleSecretKey`
5252
MockStsAssumeRoleSessionName = `AssumeRoleSessionName`
5353
MockStsAssumeRoleSessionToken = `AssumeRoleSessionToken`
54+
MockStsAssumeRoleSourceIdentity = `AssumeRoleSourceIdentity`
5455
MockStsAssumeRoleTagKey = `AssumeRoleTagKey`
5556
MockStsAssumeRoleTagValue = `AssumeRoleTagValue`
5657
MockStsAssumeRoleTransitiveTagKey = `AssumeRoleTagKey`

v2/awsv1shim/session_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,25 @@ func TestGetSession(t *testing.T) {
254254
servicemocks.MockStsGetCallerIdentityValidEndpoint,
255255
},
256256
},
257+
{
258+
Config: &awsbase.Config{
259+
AccessKey: servicemocks.MockStaticAccessKey,
260+
AssumeRole: &awsbase.AssumeRole{
261+
RoleARN: servicemocks.MockStsAssumeRoleArn,
262+
SessionName: servicemocks.MockStsAssumeRoleSessionName,
263+
SourceIdentity: servicemocks.MockStsAssumeRoleSourceIdentity,
264+
},
265+
Region: "us-east-1",
266+
SecretKey: servicemocks.MockStaticSecretKey,
267+
},
268+
Description: "config AssumeRoleSourceIdentity",
269+
ExpectedCredentialsValue: mockdata.MockStsAssumeRoleCredentials,
270+
ExpectedRegion: "us-east-1",
271+
MockStsEndpoints: []*servicemocks.MockEndpoint{
272+
servicemocks.MockStsAssumeRoleValidEndpointWithOptions(map[string]string{"SourceIdentity": servicemocks.MockStsAssumeRoleSourceIdentity}),
273+
servicemocks.MockStsGetCallerIdentityValidEndpoint,
274+
},
275+
},
257276
{
258277
Config: &awsbase.Config{
259278
Profile: "SharedCredentialsProfile",

0 commit comments

Comments
 (0)