func()

in internal/resources/providers/awslib/iam/root_account.go [62:110]


func (p Provider) listRootMFADevice(ctx context.Context, userAccount *CredentialReport) ([]AuthDevice, error) {
	if !userAccount.MfaActive {
		p.log.Debug("mfa is not enabled for the root account")
		return nil, nil
	}

	input := &iamsdk.ListVirtualMFADevicesInput{
		// We only want MFA devices associated with a user.
		AssignmentStatus: types.AssignmentStatusTypeAssigned,
	}

	// fetch all virtual mfa devices and find if one is assigned to the root account user.
	var virtualDevices []types.VirtualMFADevice
	for {
		output, err := p.client.ListVirtualMFADevices(ctx, input)
		if err != nil {
			return nil, err
		}
		virtualDevices = append(virtualDevices, output.VirtualMFADevices...)
		if !output.IsTruncated {
			break
		}
		input.Marker = output.Marker
	}

	var devices []AuthDevice
	var rootMFADevice AuthDevice
	for _, device := range virtualDevices {
		if strings.HasSuffix(*device.SerialNumber, "root-account-mfa-device") {
			rootMFADevice = AuthDevice{
				IsVirtual: true,
				MFADevice: types.MFADevice{
					EnableDate:   device.EnableDate,
					SerialNumber: device.SerialNumber,
					UserName:     device.User.UserName,
				},
			}
			return append(devices, rootMFADevice), nil
		}
	}

	// represent a hardware mfa device assigned to the root account user
	rootMFADevice = AuthDevice{
		IsVirtual: false,
		MFADevice: types.MFADevice{},
	}

	return append(devices, rootMFADevice), nil
}