@@ -338,41 +338,68 @@ func (o *iamUserResourceType) Delete(ctx context.Context, resourceId *v2.Resourc
338338
339339 // Delete all access keys
340340 // Permission needed: iam:ListAccessKeys, iam:DeleteAccessKey
341- keys , err := iamClient .ListAccessKeys (ctx , & iam.ListAccessKeysInput {UserName : awsStringUserName })
342- if err != nil {
343- return nil , fmt .Errorf ("aws-connector: failed to list access keys: %w" , err )
341+ listKeysInput := & iam.ListAccessKeysInput {UserName : awsStringUserName }
342+ accessKeyMetadata := make ([]iamTypes.AccessKeyMetadata , 0 )
343+ for {
344+ keys , err := iamClient .ListAccessKeys (ctx , listKeysInput )
345+ if err != nil {
346+ return nil , fmt .Errorf ("aws-connector: failed to list access keys: %w" , err )
347+ }
348+ accessKeyMetadata = append (accessKeyMetadata , keys .AccessKeyMetadata ... )
349+ if keys .Marker == nil || len (* keys .Marker ) == 0 {
350+ break
351+ }
352+ listKeysInput .Marker = keys .Marker
344353 }
345354
346- for _ , key := range keys . AccessKeyMetadata {
347- _ , err = iamClient .DeleteAccessKey (ctx , & iam.DeleteAccessKeyInput {UserName : awsStringUserName , AccessKeyId : awsSdk . String ( awsSdk . ToString ( key .AccessKeyId )) })
355+ for _ , key := range accessKeyMetadata {
356+ _ , err = iamClient .DeleteAccessKey (ctx , & iam.DeleteAccessKeyInput {UserName : awsStringUserName , AccessKeyId : key .AccessKeyId })
348357 if err != nil {
349358 return nil , fmt .Errorf ("aws-connector: failed to delete access key: %w" , err )
350359 }
351360 }
352361
353362 // Delete all signing certificates
354363 // Permission needed: iam:ListSigningCertificates, iam:DeleteSigningCertificate
355- certificates , err := iamClient .ListSigningCertificates (ctx , & iam.ListSigningCertificatesInput {UserName : awsStringUserName })
356- if err != nil {
357- return nil , fmt .Errorf ("aws-connector: failed to list signing certificates: %w" , err )
364+ listCertificatesInput := & iam.ListSigningCertificatesInput {UserName : awsStringUserName }
365+ certificates := make ([]iamTypes.SigningCertificate , 0 )
366+ for {
367+ certs , err := iamClient .ListSigningCertificates (ctx , listCertificatesInput )
368+ if err != nil {
369+ return nil , fmt .Errorf ("aws-connector: failed to list signing certificates: %w" , err )
370+ }
371+ certificates = append (certificates , certs .Certificates ... )
372+ if certs .Marker == nil || len (* certs .Marker ) == 0 {
373+ break
374+ }
375+ listCertificatesInput .Marker = certs .Marker
358376 }
359377
360- for _ , certificate := range certificates . Certificates {
361- _ , err = iamClient .DeleteSigningCertificate (ctx , & iam.DeleteSigningCertificateInput {UserName : awsStringUserName , CertificateId : awsSdk . String ( awsSdk . ToString ( certificate .CertificateId )) })
378+ for _ , certificate := range certificates {
379+ _ , err = iamClient .DeleteSigningCertificate (ctx , & iam.DeleteSigningCertificateInput {UserName : awsStringUserName , CertificateId : certificate .CertificateId })
362380 if err != nil {
363381 return nil , fmt .Errorf ("aws-connector: failed to delete signing certificate: %w" , err )
364382 }
365383 }
366384
367385 // Delete all SSH public keys
368386 // Permission needed: iam:ListSSHPublicKeys, iam:DeleteSSHPublicKey
369- sshKeys , err := iamClient .ListSSHPublicKeys (ctx , & iam.ListSSHPublicKeysInput {UserName : awsStringUserName })
370- if err != nil {
371- return nil , fmt .Errorf ("aws-connector: failed to list SSH public keys: %w" , err )
387+ listSSHKeysInput := & iam.ListSSHPublicKeysInput {UserName : awsStringUserName }
388+ sshKeys := make ([]iamTypes.SSHPublicKeyMetadata , 0 )
389+ for {
390+ keys , err := iamClient .ListSSHPublicKeys (ctx , listSSHKeysInput )
391+ if err != nil {
392+ return nil , fmt .Errorf ("aws-connector: failed to list SSH public keys: %w" , err )
393+ }
394+ sshKeys = append (sshKeys , keys .SSHPublicKeys ... )
395+ if keys .Marker == nil || len (* keys .Marker ) == 0 {
396+ break
397+ }
398+ listSSHKeysInput .Marker = keys .Marker
372399 }
373400
374- for _ , key := range sshKeys . SSHPublicKeys {
375- _ , err = iamClient .DeleteSSHPublicKey (ctx , & iam.DeleteSSHPublicKeyInput {UserName : awsStringUserName , SSHPublicKeyId : awsSdk . String ( awsSdk . ToString ( key .SSHPublicKeyId )) })
401+ for _ , key := range sshKeys {
402+ _ , err = iamClient .DeleteSSHPublicKey (ctx , & iam.DeleteSSHPublicKeyInput {UserName : awsStringUserName , SSHPublicKeyId : key .SSHPublicKeyId })
376403 if err != nil {
377404 return nil , fmt .Errorf ("aws-connector: failed to delete SSH public key: %w" , err )
378405 }
@@ -390,7 +417,7 @@ func (o *iamUserResourceType) Delete(ctx context.Context, resourceId *v2.Resourc
390417 ctx ,
391418 & iam.DeleteServiceSpecificCredentialInput {
392419 UserName : awsStringUserName ,
393- ServiceSpecificCredentialId : awsSdk . String ( awsSdk . ToString ( credential .ServiceSpecificCredentialId )) ,
420+ ServiceSpecificCredentialId : credential .ServiceSpecificCredentialId ,
394421 },
395422 )
396423 if err != nil {
@@ -400,26 +427,44 @@ func (o *iamUserResourceType) Delete(ctx context.Context, resourceId *v2.Resourc
400427
401428 // If user has MFA, deactivate them
402429 // Permission needed: iam:ListMFADevices, iam:DeactivateMFADevice
403- mfaDevices , err := iamClient .ListMFADevices (ctx , & iam.ListMFADevicesInput {UserName : awsStringUserName })
404- if err != nil {
405- return nil , fmt .Errorf ("aws-connector: failed to list MFA devices: %w" , err )
430+ listMFADevicesInput := & iam.ListMFADevicesInput {UserName : awsStringUserName }
431+ mfaDevices := make ([]iamTypes.MFADevice , 0 )
432+ for {
433+ devices , err := iamClient .ListMFADevices (ctx , listMFADevicesInput )
434+ if err != nil {
435+ return nil , fmt .Errorf ("aws-connector: failed to list MFA devices: %w" , err )
436+ }
437+ mfaDevices = append (mfaDevices , devices .MFADevices ... )
438+ if devices .Marker == nil || len (* devices .Marker ) == 0 {
439+ break
440+ }
441+ listMFADevicesInput .Marker = devices .Marker
406442 }
407443
408- for _ , device := range mfaDevices . MFADevices {
409- _ , err = iamClient .DeactivateMFADevice (ctx , & iam.DeactivateMFADeviceInput {UserName : awsStringUserName , SerialNumber : awsSdk . String ( awsSdk . ToString ( device .SerialNumber )) })
444+ for _ , device := range mfaDevices {
445+ _ , err = iamClient .DeactivateMFADevice (ctx , & iam.DeactivateMFADeviceInput {UserName : awsStringUserName , SerialNumber : device .SerialNumber })
410446 if err != nil {
411447 return nil , fmt .Errorf ("aws-connector: failed to deactivate MFA device: %w" , err )
412448 }
413449 }
414450
415451 // Delete users inline policies
416452 // Permission needed: iam:ListUserPolicies, iam:DeleteUserPolicy
417- userPolicies , err := iamClient .ListUserPolicies (ctx , & iam.ListUserPoliciesInput {UserName : awsStringUserName })
418- if err != nil {
419- return nil , fmt .Errorf ("aws-connector: failed to list user policies: %w" , err )
453+ listUserPoliciesInput := & iam.ListUserPoliciesInput {UserName : awsStringUserName }
454+ userPolicies := make ([]string , 0 )
455+ for {
456+ policies , err := iamClient .ListUserPolicies (ctx , listUserPoliciesInput )
457+ if err != nil {
458+ return nil , fmt .Errorf ("aws-connector: failed to list user policies: %w" , err )
459+ }
460+ userPolicies = append (userPolicies , policies .PolicyNames ... )
461+ if policies .Marker == nil || len (* policies .Marker ) == 0 {
462+ break
463+ }
464+ listUserPoliciesInput .Marker = policies .Marker
420465 }
421466
422- for _ , policy := range userPolicies . PolicyNames {
467+ for _ , policy := range userPolicies {
423468 _ , err = iamClient .DeleteUserPolicy (ctx , & iam.DeleteUserPolicyInput {UserName : awsStringUserName , PolicyName : awsSdk .String (policy )})
424469 if err != nil {
425470 return nil , fmt .Errorf ("aws-connector: failed to delete user policy: %w" , err )
@@ -428,27 +473,45 @@ func (o *iamUserResourceType) Delete(ctx context.Context, resourceId *v2.Resourc
428473
429474 // List and detach all attached policies
430475 // Permission needed: iam:ListAttachedUserPolicies, iam:DetachUserPolicy
431- attachedPolicies , err := iamClient .ListAttachedUserPolicies (ctx , & iam.ListAttachedUserPoliciesInput {UserName : awsStringUserName })
432- if err != nil {
433- return nil , fmt .Errorf ("aws-connector: failed to list attached user policies: %w" , err )
476+ listAttachedPoliciesInput := & iam.ListAttachedUserPoliciesInput {UserName : awsStringUserName }
477+ attachedPolicies := make ([]iamTypes.AttachedPolicy , 0 )
478+ for {
479+ policies , err := iamClient .ListAttachedUserPolicies (ctx , listAttachedPoliciesInput )
480+ if err != nil {
481+ return nil , fmt .Errorf ("aws-connector: failed to list attached user policies: %w" , err )
482+ }
483+ attachedPolicies = append (attachedPolicies , policies .AttachedPolicies ... )
484+ if policies .Marker == nil || len (* policies .Marker ) == 0 {
485+ break
486+ }
487+ listAttachedPoliciesInput .Marker = policies .Marker
434488 }
435489
436- for _ , policy := range attachedPolicies . AttachedPolicies {
437- _ , err = iamClient .DetachUserPolicy (ctx , & iam.DetachUserPolicyInput {UserName : awsStringUserName , PolicyArn : awsSdk . String ( awsSdk . ToString ( policy .PolicyArn )) })
490+ for _ , policy := range attachedPolicies {
491+ _ , err = iamClient .DetachUserPolicy (ctx , & iam.DetachUserPolicyInput {UserName : awsStringUserName , PolicyArn : policy .PolicyArn })
438492 if err != nil {
439493 return nil , fmt .Errorf ("aws-connector: failed to detach user policy: %w" , err )
440494 }
441495 }
442496
443497 // Remove the user from any IAM groups
444498 // Permission needed: iam:ListGroupsForUser, iam:RemoveUserFromGroup
445- userGroups , err := iamClient .ListGroupsForUser (ctx , & iam.ListGroupsForUserInput {UserName : awsStringUserName })
446- if err != nil {
447- return nil , fmt .Errorf ("aws-connector: failed to list groups for user: %w" , err )
499+ listUserGroupsInput := & iam.ListGroupsForUserInput {UserName : awsStringUserName }
500+ userGroups := make ([]iamTypes.Group , 0 )
501+ for {
502+ groups , err := iamClient .ListGroupsForUser (ctx , listUserGroupsInput )
503+ if err != nil {
504+ return nil , fmt .Errorf ("aws-connector: failed to list groups for user: %w" , err )
505+ }
506+ userGroups = append (userGroups , groups .Groups ... )
507+ if groups .Marker == nil || len (* groups .Marker ) == 0 {
508+ break
509+ }
510+ listUserGroupsInput .Marker = groups .Marker
448511 }
449512
450- for _ , group := range userGroups . Groups {
451- _ , err = iamClient .RemoveUserFromGroup (ctx , & iam.RemoveUserFromGroupInput {UserName : awsStringUserName , GroupName : awsSdk . String ( awsSdk . ToString ( group .GroupName )) })
513+ for _ , group := range userGroups {
514+ _ , err = iamClient .RemoveUserFromGroup (ctx , & iam.RemoveUserFromGroupInput {UserName : awsStringUserName , GroupName : group .GroupName })
452515 if err != nil {
453516 return nil , fmt .Errorf ("aws-connector: failed to remove user from group: %w" , err )
454517 }
0 commit comments