Control: 1.23 Ensure That No Custom Subscription Owner Roles Are Created
Description
Subscription ownership should not include permission to create custom owner roles. The principle of least privilege should be followed and only necessary privileges should be assigned instead of allowing full administrative access.
Classic subscription admin roles offer basic access management and include Account Administrator, Service Administrator, and Co-Administrators. It is recommended the least necessary permissions be given initially. Permissions can be added as needed by the account holder. This ensures the account holder cannot perform actions which were not intended.
Remediation
From Azure Portal
- From Azure Home select the Portal Menu
 - Select 
SubscriptionsunderNavigate - Select in the left column 
Access control (IAM) - In the row select of filters 
Role:,then the# Displayed - In the list of checkmarks deselect 'Show all' to display no roles.
 - Search for 
Owneror select it if it already displayed to show only users with the Owner role - To remove this permission from a user, select the checkbox under the Owner
 - In the top row, select 
Remove X - Select Yes
 
From Azure CLI
az role definition list
Check for entries with assignableScope of / or a subscription, and an action of * Verify the usage and impact of removing the role identified
az role definition delete --name "rolename"
Default Value
By default, no custom owner roles are created.
Usage
Run the control in your terminal:
powerpipe control run azure_compliance.control.cis_v150_1_23Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run azure_compliance.control.cis_v150_1_23 --shareSQL
This control uses a named query:
with owner_custom_roles as (  select    role_name,    role_type,    title,    action,    _ctx,    subscription_id  from    azure_role_definition,    jsonb_array_elements(permissions) as s,    jsonb_array_elements_text(s -> 'actions') as action  where    role_type = 'CustomRole'    and action in ('*', '*:*'))select  cr.subscription_id as resource,  case    when count(*) > 0 then 'alarm'    else 'ok'  end as status,  case    when count(*) = 1 then 'There is one custom owner role.'    when count(*) > 1 then 'There are ' || count(*) || ' custom owner roles.'    else 'There are no custom owner roles.'  end as reason    , sub.display_name as subscriptionfrom  owner_custom_roles cr,  azure_subscription subwhere  sub.subscription_id = cr.subscription_idgroup by  cr.subscription_id,  cr._ctx,  sub.display_name;