Back to Checks
googleworkspace

All super admin accounts are used only for super admin activities

directory_super_admin_only_admin_roles
Service: directorySeverity: high
OfficialBuilt-inVerified
Categories:identity-access
Resource Type:NotDefined

Super admin accounts do not also hold additional admin roles such as Groups Admin, User Management Admin, etc. Each super administrator has a separate, non-admin account for daily activities, following the principle of least privilege.

Risk

A super admin account that also holds additional admin roles increases the attack surface for phishing and credential theft. Compromising a single dual-role account grants full administrative access, bypassing separation of duties and enabling unauthorized changes to users, billing, and security settings.

Run this check with Prowler

Run in Prowler Cloud
Run
prowler googleworkspace --checks directory_super_admin_only_admin_roles

Recommendation

Apply the principle of separation of duties by maintaining dedicated super admin accounts exclusively for privileged tasks. Daily administrative activities should be performed from separate accounts with only the delegated roles required.

Remediation

Other

1Sign in to the Google **Admin console** at https://admin.google.com
2Navigate to **Directory** > **Users**
3Click on the super admin user who also has additional admin roles
4Click **Admin roles and privileges**
5Remove the additional admin roles from the super admin account
6Create a separate account for daily admin tasks

Check Code

from typing import List

from prowler.lib.check.models import Check, CheckReportGoogleWorkspace
from prowler.providers.googleworkspace.models import GoogleWorkspaceResource
from prowler.providers.googleworkspace.services.directory.directory_client import (
    directory_client,
)


class directory_super_admin_only_admin_roles(Check):
    """Check that super admin accounts are used only for super admin activities

    This check verifies that no super admin user has additional admin roles assigned
    beyond the Super Admin role. Super admins should have separate accounts for daily
    activities to follow least privilege.
    """

    def execute(self) -> List[CheckReportGoogleWorkspace]:
        findings = []

        if directory_client.users:
            for user in directory_client.users.values():
                if user.is_admin:
                    extra_roles = [
                        r.description or r.name
                        for r in user.role_assignments
                        if not r.is_super_admin_role
                    ]
                    if extra_roles:
                        report = CheckReportGoogleWorkspace(
                            metadata=self.metadata(),
                            resource=GoogleWorkspaceResource.from_user(
                                user,
                                directory_client.provider.identity.customer_id,
                            ),
                        )
                        details = ", ".join(extra_roles)
                        report.status = "FAIL"
                        report.status_extended = (
                            f"Super admin account {user.email} also holds additional admin roles: "
                            f"{details}. Super admin accounts should be used only for "
                            f"super admin activities."
                        )
                        findings.append(report)

            if not findings:
                report = CheckReportGoogleWorkspace(
                    metadata=self.metadata(),
                    resource=directory_client.provider.domain_resource,
                    resource_id="directoryUsers",
                    resource_name="Directory Users",
                    customer_id=directory_client.provider.identity.customer_id,
                )
                report.status = "PASS"
                report.status_extended = (
                    f"All super admin accounts in domain {directory_client.provider.identity.domain} "
                    f"are used only for super admin activities."
                )
                findings.append(report)

        return findings