Required OAuth Scopes
Prowler requests the following read-only OAuth 2.0 scopes from the Google Workspace Admin SDK:| Scope | Description |
|---|---|
https://www.googleapis.com/auth/admin.directory.user.readonly | Read access to user accounts and their admin status |
https://www.googleapis.com/auth/admin.directory.domain.readonly | Read access to domain information |
https://www.googleapis.com/auth/admin.directory.customer.readonly | Read access to customer information (Customer ID) |
Setup Steps
Step 1: Create a GCP Project (if needed)
If you don’t have a GCP project, create one at https://console.cloud.google.com. The project is only used to host the Service Account — it does not need to have any Google Workspace data in it.Step 2: Enable the Admin SDK API
- Go to the Google Cloud Console
- Select your project
- Navigate to APIs & Services → Library
- Search for Admin SDK API
- Click Enable
Step 3: Create a Service Account
- In the Google Cloud Console, navigate to IAM & Admin → Service Accounts
- Click Create Service Account
- Give it a descriptive name (e.g.,
prowler-googleworkspace-reader) - Click Create and Continue
- Skip the optional role and user access steps — click Done
The Service Account does not need any GCP IAM roles. Its access to Google Workspace is granted entirely through Domain-Wide Delegation in the next steps.
Step 4: Generate a JSON Key
- Click on the Service Account you just created
- Go to the Keys tab
- Click Add Key → Create new key
- Select JSON format
- Click Create — the key file will download automatically
- Store it securely (e.g.,
~/.config/prowler/googleworkspace-sa.json)
Step 5: Configure Domain-Wide Delegation in Google Workspace
- Go to the Google Workspace Admin Console
- Navigate to Security → Access and data control → API controls
- Click Manage Domain Wide Delegation
- Click Add new
- Enter the Client ID of the Service Account (found in the JSON key as
client_id, or on the Service Account details page) - In the OAuth scopes field, enter the following scopes as a comma-separated list:
- Click Authorize
Domain-Wide Delegation must be configured by a Google Workspace super administrator. It may take a few minutes to propagate after saving.
Step 6: Store Credentials Securely
Set your credentials as environment variables:Credential Lookup Order
Prowler resolves credentials in the following order:GOOGLEWORKSPACE_CREDENTIALS_FILEenvironment variableGOOGLEWORKSPACE_CREDENTIALS_CONTENTenvironment variable
GOOGLEWORKSPACE_DELEGATED_USER environment variable.
Best Practices
- Use environment variables — Never hardcode credentials in scripts or commands
- Use a dedicated Service Account — Create one specifically for Prowler, separate from other integrations
- Use read-only scopes — Prowler only requires the three read-only scopes listed above
- Restrict key access — Set file permissions to
600on the JSON key file - Rotate keys regularly — Delete and regenerate the JSON key periodically
- Use a least-privilege super admin — Consider using a dedicated super admin account for Prowler’s delegated user rather than a personal admin account
Troubleshooting
GoogleWorkspaceMissingDelegatedUserError
The delegated user email was not provided. Set it via environment variable:
GoogleWorkspaceNoCredentialsError
No credentials were found. Ensure either GOOGLEWORKSPACE_CREDENTIALS_FILE or GOOGLEWORKSPACE_CREDENTIALS_CONTENT is set.
GoogleWorkspaceInvalidCredentialsError
The JSON key file is malformed or cannot be parsed. Verify the file was downloaded correctly and is valid JSON:
GoogleWorkspaceImpersonationError
The Service Account cannot impersonate the delegated user. This usually means Domain-Wide Delegation has not been configured, or the OAuth scopes are incorrect. Verify:
- The Service Account Client ID is correctly entered in the Admin Console
- All three required OAuth scopes are included
- The delegated user is a super administrator
Permission Denied on Admin SDK calls
If Prowler connects but returns empty results or permission errors for specific API calls:- Confirm Domain-Wide Delegation is fully propagated (wait a few minutes after setup)
- Verify all three scopes are authorized in the Admin Console
- Ensure the delegated user is an active super administrator

