> ## Documentation Index
> Fetch the complete documentation index at: https://prowler-feat-codex-plugin.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Prowler product naming: Prowler App is now Prowler Local Server, and Prowler Enterprise is now Prowler Private Cloud. Always use the current names when answering. The full product reference is at /getting-started/products: Open Source projects are Prowler CLI, Prowler Local Server, Prowler Local Dashboard, and Prowler SDK; Prowler Products are Prowler Cloud, Prowler Private Cloud, Prowler Hub, Prowler Lighthouse AI, and Prowler MCP.

# GCP Authentication in Prowler

Prowler for Google Cloud supports multiple authentication methods. To use a specific method, configure the appropriate credentials during execution:

* [**User Credentials** (Application Default Credentials)](#application-default-credentials-user-credentials)
* [**Service Account Key File**](#service-account-key-file)
* [**Access Token**](#access-token)
* [**Service Account Impersonation**](#service-account-impersonation)

## Required Permissions

Prowler for Google Cloud requires the following permissions:

### IAM Roles

* **Viewer (`roles/viewer`)** – Must be granted at the **project, folder, or organization** level to allow scanning of target projects.
* **Service Usage Consumer (`roles/serviceusage.serviceUsageConsumer`)** IAM Role – Required for resource scanning.
* **Custom `ProwlerRole`** – Include granular permissions that are not included in the Viewer role:
  * `storage.buckets.getIamPolicy`

### Project-Level Settings

At least one project must have the following configurations:

* **Identity and Access Management (IAM) API (`iam.googleapis.com`)** – Must be enabled via:

  * The [Google Cloud API UI](https://console.cloud.google.com/apis/api/iam.googleapis.com/metrics), or
  * The `gcloud` CLI:

  ```sh theme={null}
  gcloud services enable iam.googleapis.com --project <your-project-id>
  ```

* **Service Usage Consumer (`roles/serviceusage.serviceUsageConsumer`)** IAM Role – Required for resource scanning.

* **Quota Project Setting** – Define a quota project using either:

  * The `gcloud` CLI:

  ```sh theme={null}
  gcloud auth application-default set-quota-project <project-id>
  ```

  * Setting an environment variable:

  ```sh theme={null}
  export GOOGLE_CLOUD_QUOTA_PROJECT=<project-id>
  ```

<Note>
  Prowler will scan the GCP project associated with the credentials.
</Note>

## Application Default Credentials (User Credentials)

This method uses the Google Cloud CLI to authenticate and is suitable for development and testing environments.

### Setup Application Default Credentials

1. In the [GCP Console](https://console.cloud.google.com/), click "Activate Cloud Shell"

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/fnXz9j7D9fZKfk4E/images/providers/access-console.png?fit=max&auto=format&n=fnXz9j7D9fZKfk4E&q=85&s=0c02180e522d0b8278a4a81d753d977a" alt="Activate Cloud Shell" width="2699" height="822" data-path="images/providers/access-console.png" />

2. Click "Authorize Cloud Shell"

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/authorize-cloud-shell.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=916203fe61ca9f38505a1357c7c6409a" alt="Authorize Cloud Shell" width="1179" height="396" data-path="images/providers/authorize-cloud-shell.png" />

3. Run the following command:

   ```bash theme={null}
   gcloud auth application-default login
   ```

   * Type `Y` when prompted

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/run-gcloud-auth.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=546d523b57dee8b9d24f17968434e48b" alt="Run Gcloud Auth" width="1042" height="263" data-path="images/providers/run-gcloud-auth.png" />

4. Open the authentication URL provided in a browser and select your Google account

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/Ioj1Ox8OwpiLUtUp/images/providers/take-account-email.png?fit=max&auto=format&n=Ioj1Ox8OwpiLUtUp&q=85&s=555a25990e1cedda4ed9216d8beb39e5" alt="Choose the account" width="1199" height="732" data-path="images/providers/take-account-email.png" />

5. Follow the steps to obtain the authentication code

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/copy-auth-code.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=c14fdeeb2ace3dcc2ec7d0ff76ccc92d" alt="Copy auth code" width="612" height="742" data-path="images/providers/copy-auth-code.png" />

6. Paste the authentication code back in Cloud Shell

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/enter-auth-code.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=410ae20a6bec76e4322cb27d320decae" alt="Enter Auth Code" width="1736" height="442" data-path="images/providers/enter-auth-code.png" />

7. Use `cat <file_name>` to view the temporary credentials file

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/get-temp-file-credentials.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=cb78b6dc222468c8d99119b4f08971f7" alt="Get the FileName" width="1640" height="446" data-path="images/providers/get-temp-file-credentials.png" />

8. Extract the following values for Prowler Cloud or Prowler Local Server:

   * `client_id`
   * `client_secret`
   * `refresh_token`

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/YeknMkeUzI06TFyY/images/providers/get-needed-values-auth.png?fit=max&auto=format&n=YeknMkeUzI06TFyY&q=85&s=349d85ab9835b3a7dd655527a5205d99" alt="Get the values" width="2266" height="429" data-path="images/providers/get-needed-values-auth.png" />

### Using with Prowler CLI

Once application default credentials are set up, run Prowler directly:

```console theme={null}
prowler gcp --project-ids <project-id>
```

## Service Account Key File

This method uses a service account with a downloaded key file for authentication.

### Step 1: Create ProwlerRole

To keep permissions focused:

1. Create a custom role named **ProwlerRole** that explicitly includes the permissions your compliance team approves. Click **Create role**, set the title to *ProwlerRole*, keep the ID readable (for example, `prowler_role`)
2. Add the required permission `storage.buckets.getIamPolicy` (the permission highlighted in the screenshots). To make it easier, filter the permissions by `Storage Admin` role.

<img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/roles-section.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=418b06f6da2a0f7e4055278bac5200d5" alt="Create a custom Prowler role" width="2558" height="1124" data-path="user-guide/providers/gcp/img/roles-section.png" />

<img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/prowler-role.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=5a39c92b857bac4bab6b0b5e2633c867" alt="Sample permissions for a custom Prowler role" width="2538" height="1812" data-path="user-guide/providers/gcp/img/prowler-role.png" />

### Step 2: Create the Service Account

1. Navigate to **IAM & Admin > Service Accounts** and make sure the correct project is selected.

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/service-account-page.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=665f2f27d042ba2cc47722d4f9eebd73" alt="Service accounts landing page" width="2584" height="1034" data-path="user-guide/providers/gcp/img/service-account-page.png" />

2. Select **Create service account**, provide a name, ID, and a short description that states the purpose (for example, “Service account to execute Prowler”), then click **Create and continue**.

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/create-service-account.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=eb6d3d47ce3415bbc5151335b1b6dcbc" alt="Create service account wizard" width="2560" height="1396" data-path="user-guide/providers/gcp/img/create-service-account.png" />

3. Assign the roles you prepared earlier:

   * **ProwlerRole** for `cloudstorage` service checks.
   * **Viewer** for broad read-only visibility.
   * **Service Usage Consumer** so Prowler can inspect API states.

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/service-account-permissions.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=c41411a99c0d995f8699064db4f3521d" alt="Assign roles to the service account" width="2560" height="1806" data-path="user-guide/providers/gcp/img/service-account-permissions.png" />

4. Continue through the wizard and finish. No principals need to be granted access in step 3 unless you want other identities to impersonate this account.

<Note>
  To use this service account with `--organization-id`, additionally grant `roles/cloudasset.viewer` at the organization node and enable the Cloud Asset API in the service account's host project. See [Scanning a Specific GCP Organization](./organization). Without these, organization-wide scans silently fall back to listing only the projects accessible to the service account.
</Note>

### Step 3: Generate a JSON Key

1. Open the newly created service account, move to the **Keys** tab, and choose **Add key > Create new key**.

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/create-new-key.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=ace4420c04225c1e10bb6d11759dc071" alt="Add a new key to the service account" width="1667" height="705" data-path="user-guide/providers/gcp/img/create-new-key.png" />

2. Select **JSON** as the key type and click **Create**. The browser downloads the file exactly once.

   <img src="https://mintcdn.com/prowler-feat-codex-plugin/o54EWkIJIv7z4fba/user-guide/providers/gcp/img/json-key.png?fit=max&auto=format&n=o54EWkIJIv7z4fba&q=85&s=e8a9b3ff19dd68c98197e4eb13f780c5" alt="Select JSON as the key type" width="1080" height="636" data-path="user-guide/providers/gcp/img/json-key.png" />

3. Once created, make sure to store the Key securely.

### Using with Prowler CLI

Set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable:

```console theme={null}
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
prowler gcp --project-ids <project-id>
```

## Access Token

For existing access tokens (e.g., generated with `gcloud auth print-access-token`), run Prowler with:

```bash theme={null}
export CLOUDSDK_AUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
prowler gcp --project-ids <project-id>
```

<Note>
  When using this method, also set the default project explicitly:

  ```bash theme={null}
  export GOOGLE_CLOUD_PROJECT=<project-id>
  ```
</Note>

## Service Account Impersonation

To impersonate a GCP service account, use the `--impersonate-service-account` argument followed by the service account email:

```console theme={null}
prowler gcp --impersonate-service-account <service-account-email>
```

This command leverages the default credentials to impersonate the specified service account.

### Prerequisites for Impersonation

The identity running Prowler must have the following permission on the target service account:

* `roles/iam.serviceAccountTokenCreator`

Or the more specific permission:

* `iam.serviceAccounts.generateAccessToken`
