def lambda_handler()

in force_user_mfa/ForceUserMFA.py [0:0]


def lambda_handler(event, context):
    """Summary

    Args:
        event (TYPE): Description
        context (TYPE): Description

    Returns:
        TYPE: Description
    """
    logdata = create_log_data(event)
    mfaFail = False

    # Verify if user is approved to create new IAM users
    approved = check_approved(logdata['userName'], logdata['userArn'])
    if approved is False:
        if deleteOnFail is True:
            deleteUser(logdata['newUserName'], logdata['serialNumber'])
            print("IAM user " + logdata['userName'] + " not allowed to create users.\nUser " + logdata['newUserName'] + " deleted.")
            sys.exit()
        print("IAM user " + logdata['userName'] + " not allowed to create users.\nUser " + logdata['newUserName'] + " not deleted.")

    # Create virtual MFA
    mfa = create_virtual_mfa(logdata['newUserName'], logdata['newUserArn'])

    # Verify MFA is created and get seed
    if "SerialNumber" in str(mfa):
        logdata['serialNumber'] = mfa['VirtualMFADevice']['SerialNumber']
        seed = mfa['VirtualMFADevice']['Base32StringSeed']
        enableResult = ""
        i = 1
        while enableResult != "Success":
            enableResult = enable_mfa(logdata['newUserName'], logdata['serialNumber'], seed)
            time.sleep(i)
            i += 1
            if i == 10:
                print("MFA Creation failed, aborting")
                mfaFail = True
                if deleteOnFail is True:
                    deleteUser(logdata['newUserName'], logdata['serialNumber'])
                    print("Token creation failed, aborting.\nUser " + logdata['newUserName'] + " deleted.")
                    sys.exit()
                else:
                    print("Token creation failed, aborting.\nUser " + logdata['newUserName'] + " not deleted.")
                    sys.exit()
        print("Seed created")
    else:
        if deleteOnFail is True:
            deleteUser(logdata['newUserName'], logdata['serialNumber'])
            print("Token creation failed, aborting.\nUser " + logdata['newUserName'] + " deleted.")
            sys.exit()
        else:
            print("Token creation failed, aborting.\nUser " + logdata['newUserName'] + " not deleted.")
            sys.exit()

    # Encrypt the seed using aKMS CMK alias MFAUser.
    encryptedSeed = encrypt_string(mfa['VirtualMFADevice']['Base32StringSeed'])

    # Send seed number to user to allow adding it to tokens, can use QR but easier tracking with text.
    send_seed(encryptedSeed)

    # Add encrypted seed to logdata
    logdata['encryptedSeed'] = str(encryptedSeed)

    # Set randomized password if module is enabled
    if createPassword:
        logdata['encryptedPass'] = generate_password(logData[userName])

    # Store seed in parameter store for user to fetch
    store_mfa(logdata['newUserName'], mfa['VirtualMFADevice']['Base32StringSeed'], logdata['region'], logdata['account'])

    # Logging
    if logActions is True:
        result = log_event(logdata)

    print("MFA Created for user " + logdata['newUserName'] + ". Users can retrieve the seed themselves from Parameter Store using:")
    print("aws ssm get-parameters --names mfa-" + logdata['newUserName'] + " --with-decryption  --region " + logdata['region'])
    return 0