@@ -88,6 +88,7 @@ func setupUserCheckConfig(v *viper.Viper) error {
88
88
89
89
// User holds information for the AWS user being configured by this script
90
90
type User struct {
91
+ Logger * log.Logger
91
92
Name string
92
93
BaseProfile * vault.Profile
93
94
RoleProfile * vault.Profile
@@ -102,47 +103,47 @@ type User struct {
102
103
103
104
// Setup orchestrates the tasks to create the user's MFA and rotate access
104
105
// keys.
105
- func (u * User ) Setup (logger * log. Logger ) {
106
+ func (u * User ) Setup () {
106
107
err := u .PromptAccessCredentials ()
107
108
if err != nil {
108
- logger .Fatal (err )
109
+ u . Logger .Fatal (err )
109
110
}
110
111
111
- err = u .AddVaultProfile (logger )
112
+ err = u .AddVaultProfile ()
112
113
if err != nil {
113
- logger .Fatal (err )
114
+ u . Logger .Fatal (err )
114
115
}
115
116
116
117
if u .NoMFA {
117
- err = u .GetMFADevice (logger )
118
+ err = u .GetMFADevice ()
118
119
if err != nil {
119
- logger .Fatal (err )
120
+ u . Logger .Fatal (err )
120
121
}
121
122
} else {
122
- err = u .CreateVirtualMFADevice (logger )
123
+ err = u .CreateVirtualMFADevice ()
123
124
if err != nil {
124
- logger .Fatal (err )
125
+ u . Logger .Fatal (err )
125
126
}
126
127
127
- err = u .EnableVirtualMFADevice (logger )
128
+ err = u .EnableVirtualMFADevice ()
128
129
if err != nil {
129
- logger .Fatal (err )
130
+ u . Logger .Fatal (err )
130
131
}
131
132
}
132
133
133
- err = u .UpdateAWSConfigFile (logger )
134
+ err = u .UpdateAWSConfigFile ()
134
135
if err != nil {
135
- logger .Fatal (err )
136
+ u . Logger .Fatal (err )
136
137
}
137
138
138
- err = u .RemoveVaultSession (logger )
139
+ err = u .RemoveVaultSession ()
139
140
if err != nil {
140
- logger .Fatal (err )
141
+ u . Logger .Fatal (err )
141
142
}
142
143
143
- err = u .RotateAccessKeys (logger )
144
+ err = u .RotateAccessKeys ()
144
145
if err != nil {
145
- logger .Fatal (err )
146
+ u . Logger .Fatal (err )
146
147
}
147
148
148
149
}
@@ -182,8 +183,8 @@ func (u *User) newSession() (*session.Session, error) {
182
183
return sess , nil
183
184
}
184
185
185
- func (u * User ) newMFASession (logger * log. Logger ) (* session.Session , error ) {
186
- mfaToken := promptMFAtoken ("Third " , logger )
186
+ func (u * User ) newMFASession () (* session.Session , error ) {
187
+ mfaToken := promptMFAtoken ("Third " , u . Logger )
187
188
basicSession , err := u .newSession ()
188
189
if err != nil {
189
190
return nil , fmt .Errorf ("unable to create new session: %w" , err )
@@ -194,7 +195,7 @@ func (u *User) newMFASession(logger *log.Logger) (*session.Session, error) {
194
195
TokenCode : aws .String (mfaToken ),
195
196
})
196
197
if err != nil {
197
- logger .Fatalf ("unable to get session token: %v" , err )
198
+ u . Logger .Fatalf ("unable to get session token: %v" , err )
198
199
}
199
200
mfaSession , err := session .NewSessionWithOptions (session.Options {
200
201
Config : aws.Config {
@@ -214,8 +215,8 @@ func (u *User) newMFASession(logger *log.Logger) (*session.Session, error) {
214
215
215
216
// GetMFADevice gets the user's existing virtual MFA device and updates the
216
217
// MFA serial in the profile field.
217
- func (u * User ) GetMFADevice (logger * log. Logger ) error {
218
- logger .Println ("Getting the existing MFA device..." )
218
+ func (u * User ) GetMFADevice () error {
219
+ u . Logger .Println ("Getting the existing MFA device..." )
219
220
220
221
sess , err := u .newSession ()
221
222
if err != nil {
@@ -248,8 +249,8 @@ func (u *User) GetMFADevice(logger *log.Logger) error {
248
249
249
250
// CreateVirtualMFADevice creates the user's virtual MFA device and updates the
250
251
// MFA serial in the profile field.
251
- func (u * User ) CreateVirtualMFADevice (logger * log. Logger ) error {
252
- logger .Println ("Creating the virtual MFA device..." )
252
+ func (u * User ) CreateVirtualMFADevice () error {
253
+ u . Logger .Println ("Creating the virtual MFA device..." )
253
254
254
255
sess , err := u .newSession ()
255
256
if err != nil {
@@ -330,13 +331,13 @@ func getMFATokenPair(logger *log.Logger) MFATokenPair {
330
331
}
331
332
332
333
// EnableVirtualMFADevice enables the user's MFA device
333
- func (u * User ) EnableVirtualMFADevice (logger * log. Logger ) error {
334
- logger .Println ("Enabling the virtual MFA device" )
334
+ func (u * User ) EnableVirtualMFADevice () error {
335
+ u . Logger .Println ("Enabling the virtual MFA device" )
335
336
if u .BaseProfile .MFASerial == "" {
336
337
return fmt .Errorf ("profile MFA serial must be set" )
337
338
}
338
339
339
- mfaTokenPair := getMFATokenPair (logger )
340
+ mfaTokenPair := getMFATokenPair (u . Logger )
340
341
341
342
sess , err := u .newSession ()
342
343
if err != nil {
@@ -360,11 +361,11 @@ func (u *User) EnableVirtualMFADevice(logger *log.Logger) error {
360
361
}
361
362
362
363
// RotateAccessKeys rotates the user's AWS access key.
363
- func (u * User ) RotateAccessKeys (logger * log. Logger ) error {
364
- logger .Println ("Rotating AWS access keys" )
364
+ func (u * User ) RotateAccessKeys () error {
365
+ u . Logger .Println ("Rotating AWS access keys" )
365
366
366
- logger .Println ("A new unique MFA token is needed to rotate the AWS access keys" )
367
- sess , err := u .newMFASession (logger )
367
+ u . Logger .Println ("A new unique MFA token is needed to rotate the AWS access keys" )
368
+ sess , err := u .newMFASession ()
368
369
if err != nil {
369
370
return fmt .Errorf ("unable to get mfa session: %w" , err )
370
371
}
@@ -382,7 +383,7 @@ func (u *User) RotateAccessKeys(logger *log.Logger) error {
382
383
383
384
oldAccessKeyID := listAccessKeysOutput .AccessKeyMetadata [0 ].AccessKeyId
384
385
385
- logger .Println ("Creating new access key" )
386
+ u . Logger .Println ("Creating new access key" )
386
387
newAccessKey , err := iamClient .CreateAccessKey (& iam.CreateAccessKeyInput {
387
388
UserName : aws .String (u .Name ),
388
389
})
@@ -393,12 +394,12 @@ func (u *User) RotateAccessKeys(logger *log.Logger) error {
393
394
u .AccessKeyID = * newAccessKey .AccessKey .AccessKeyId
394
395
u .SecretAccessKey = * newAccessKey .AccessKey .SecretAccessKey
395
396
396
- err = u .AddVaultProfile (logger )
397
+ err = u .AddVaultProfile ()
397
398
if err != nil {
398
399
return fmt .Errorf ("unable to add new credentials to aws-vault profile: %w" , err )
399
400
}
400
401
401
- logger .Println ("Deleting old access key" )
402
+ u . Logger .Println ("Deleting old access key" )
402
403
_ , err = iamClient .DeleteAccessKey (& iam.DeleteAccessKeyInput {
403
404
AccessKeyId : oldAccessKeyID ,
404
405
UserName : aws .String (u .Name ),
@@ -413,7 +414,7 @@ func (u *User) RotateAccessKeys(logger *log.Logger) error {
413
414
414
415
// AddVaultProfile uses aws-vault to store AWS credentials for the user's
415
416
// profile.
416
- func (u * User ) AddVaultProfile (logger * log. Logger ) error {
417
+ func (u * User ) AddVaultProfile () error {
417
418
creds := credentials.Value {AccessKeyID : u .AccessKeyID , SecretAccessKey : u .SecretAccessKey }
418
419
provider := & vault.KeyringProvider {Keyring : * u .Keyring , Profile : u .BaseProfile .Name }
419
420
@@ -422,9 +423,9 @@ func (u *User) AddVaultProfile(logger *log.Logger) error {
422
423
return fmt .Errorf ("unable to store credentials: %w" , err )
423
424
}
424
425
425
- logger .Printf ("Added credentials to profile %q in vault" , u .BaseProfile .Name )
426
+ u . Logger .Printf ("Added credentials to profile %q in vault" , u .BaseProfile .Name )
426
427
427
- err = deleteSession (u .BaseProfile .Name , u .Config , u .Keyring , logger )
428
+ err = deleteSession (u .BaseProfile .Name , u .Config , u .Keyring , u . Logger )
428
429
if err != nil {
429
430
return fmt .Errorf ("unable to delete session: %w" , err )
430
431
}
@@ -433,8 +434,8 @@ func (u *User) AddVaultProfile(logger *log.Logger) error {
433
434
}
434
435
435
436
// UpdateAWSConfigFile adds the user's AWS profile to the AWS config file
436
- func (u * User ) UpdateAWSConfigFile (logger * log. Logger ) error {
437
- logger .Printf ("Updating the AWS config file: %s" , u .Config .Path )
437
+ func (u * User ) UpdateAWSConfigFile () error {
438
+ u . Logger .Printf ("Updating the AWS config file: %s" , u .Config .Path )
438
439
// load the ini file
439
440
iniFile , err := ini .Load (u .Config .Path )
440
441
if err != nil {
@@ -477,9 +478,9 @@ func (u *User) UpdateAWSConfigFile(logger *log.Logger) error {
477
478
}
478
479
479
480
// RemoveVaultSession removes the aws-vault session for the profile.
480
- func (u * User ) RemoveVaultSession (logger * log. Logger ) error {
481
- logger .Printf ("Removing aws-vault session" )
482
- err := deleteSession (u .BaseProfile .Name , u .Config , u .Keyring , logger )
481
+ func (u * User ) RemoveVaultSession () error {
482
+ u . Logger .Printf ("Removing aws-vault session" )
483
+ err := deleteSession (u .BaseProfile .Name , u .Config , u .Keyring , u . Logger )
483
484
if err != nil {
484
485
return fmt .Errorf ("unable to delete session: %w" , err )
485
486
}
@@ -668,6 +669,7 @@ func setupUserFunction(cmd *cobra.Command, args []string) error {
668
669
logger .Fatal (err )
669
670
}
670
671
user := User {
672
+ Logger : logger ,
671
673
Name : iamUser ,
672
674
BaseProfile : & baseProfile ,
673
675
RoleProfile : & roleProfile ,
@@ -685,7 +687,7 @@ func setupUserFunction(cmd *cobra.Command, args []string) error {
685
687
if err != nil {
686
688
logger .Fatal (err )
687
689
}
688
- user .Setup (logger )
690
+ user .Setup ()
689
691
690
692
// If we got this far, we win
691
693
logger .Println ("Victory!" )
0 commit comments