@@ -20,10 +20,12 @@ import (
2020 "github.com/aws/aws-sdk-go-v2/aws"
2121 "github.com/aws/aws-sdk-go-v2/config"
2222 "github.com/aws/aws-sdk-go-v2/credentials"
23+ "github.com/aws/aws-sdk-go-v2/credentials/stscreds"
2324 r53 "github.com/aws/aws-sdk-go-v2/service/route53"
2425 r53Types "github.com/aws/aws-sdk-go-v2/service/route53/types"
2526 r53d "github.com/aws/aws-sdk-go-v2/service/route53domains"
2627 r53dTypes "github.com/aws/aws-sdk-go-v2/service/route53domains/types"
28+ "github.com/aws/aws-sdk-go-v2/service/sts"
2729)
2830
2931type route53Provider struct {
@@ -50,7 +52,7 @@ func newRoute53(m map[string]string, _ json.RawMessage) (*route53Provider, error
5052 config .WithRegion ("us-east-1" ),
5153 }
5254
53- keyID , secretKey , tokenID := m ["KeyId" ], m ["SecretKey" ], m ["Token" ]
55+ keyID , secretKey , tokenID , roleArn , externalId := m ["KeyId" ], m ["SecretKey" ], m ["Token" ], m [ "RoleArn" ], m [ "ExternalId " ]
5456 // Token is optional and left empty unless required
5557 if keyID != "" || secretKey != "" {
5658 optFns = append (optFns , config .WithCredentialsProvider (credentials .NewStaticCredentialsProvider (keyID , secretKey , tokenID )))
@@ -61,6 +63,20 @@ func newRoute53(m map[string]string, _ json.RawMessage) (*route53Provider, error
6163 return nil , err
6264 }
6365
66+ if roleArn != "" {
67+ stsClient := sts .NewFromConfig (config )
68+ sessionName := fmt .Sprintf ("dnscontrol-route53-%d" , time .Now ().Unix ())
69+
70+ var assumeOpts []func (* stscreds.AssumeRoleOptions )
71+ if externalId != "" {
72+ assumeOpts = append (assumeOpts , func (o * stscreds.AssumeRoleOptions ) { o .ExternalID = aws .String (externalId ) })
73+ }
74+ assumeOpts = append (assumeOpts , func (o * stscreds.AssumeRoleOptions ) { o .RoleSessionName = sessionName })
75+
76+ stsCredsProvider := stscreds .NewAssumeRoleProvider (stsClient , roleArn , assumeOpts ... )
77+ config .Credentials = aws .NewCredentialsCache (stsCredsProvider )
78+ }
79+
6480 var dls * string
6581 if val , ok := m ["DelegationSet" ]; ok {
6682 printer .Printf ("ROUTE53 DelegationSet %s configured\n " , val )
0 commit comments