Control: 5.2.2.1 Ensure multifactor authentication is enabled for all users in administrative roles
Description
Multifactor authentication is a process that requires an additional form of identification during the sign-in process, such as a code from a mobile device or a fingerprint scan, to enhance security.
Ensure users in administrator roles have MFA capabilities enabled.
Multifactor authentication requires an individual to present a minimum of two separate forms of authentication before access is granted. Multifactor authentication provides additional assurance that the individual attempting to gain access is who they claim to be. With multifactor authentication, an attacker would need to compromise at least two different authentication mechanisms, increasing the difficulty of compromise and thus reducing the risk.
Remediation
To remediate using the UI:
- Navigate to the 
Microsoft Entra admin centerhttps://entra.microsoft.com. - Click expand 
Protection>Conditional AccessselectPolicies. - Click 
New policy. 
- Under 
UsersincludeSelect users and groupsand checkDirectory roles. - At a minimum, include the directory roles listed below in this section of the document.
 - Under 
Target resourcesincludeAll cloud appsand do not create any exclusions. - Under 
GrantselectGrant Accessand checkRequire multifactor authentication. - Click 
Selectat the bottom of the pane. 
- Under 
Enable policyset it toReport Onlyuntil the organization is ready to enable it. - Click 
Create. 
At minimum these directory roles should be included for MFA:
- Application administrator
 - Authentication administrator
 - Billing administrator
 - Cloud application administrator
 - Conditional Access administrator
 - Exchange administrator
 - Global administrator
 - Global reader
 - Helpdesk administrator
 - Password administrator
 - Privileged authentication administrator
 - Privileged role administrator
 - Security administrator
 - SharePoint administrator
 - User administrator
 
Note: Report-only is an acceptable first stage when introducing any CA policy. The control, however, is not complete until the policy is on.
Usage
Run the control in your terminal:
powerpipe control run microsoft365_compliance.control.cis_v400_5_2_2_1Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run microsoft365_compliance.control.cis_v400_5_2_2_1 --shareSQL
This control uses a named query:
with users_having_admin_roles as (  select    array_agg(role_template_id) as rid  from    azuread_directory_role  where    display_name like '%Administrator'),policy_with_mfa as (  select    tenant_id,    count(p.*)  from    azuread_conditional_access_policy as p,    users_having_admin_roles as a  where    p.built_in_controls ?& array['mfa']    and (p.users -> 'includeRoles')::jsonb ?| (a.rid)    and jsonb_array_length(p.users -> 'excludeUsers') < 1  group by    tenant_id),tenant_list as (  select    distinct on (tenant_id) tenant_id,    _ctx  from    azuread_user)select  t.tenant_id as resource,  case    when (select count from policy_with_mfa where tenant_id = t.tenant_id) > 0 then 'ok'    else 'alarm'  end as status,  case    when (select count from policy_with_mfa where tenant_id = t.tenant_id) > 0 then t.tenant_id || ' has MFA enabled for all users in administrative roles.'    else t.tenant_id || ' has MFA disabled for all users in administrative roles.'  end as reason  , t.tenant_id as tenant_idfrom  tenant_list as t;