> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prowler.com/llms.txt
> Use this file to discover all available pages before exploring further.

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.prowler.com/feedback

```json
{
  "path": "/user-guide/providers/gcp/authentication",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# 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 on "Activate Cloud Shell"

   <img src="https://mintcdn.com/prowler/VEKBBm2VL7R8-xYV/images/providers/access-console.png?fit=max&auto=format&n=VEKBBm2VL7R8-xYV&q=85&s=96b905aa355ba3bbe33d8fc47562c58b" 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/VEKBBm2VL7R8-xYV/images/providers/authorize-cloud-shell.png?fit=max&auto=format&n=VEKBBm2VL7R8-xYV&q=85&s=5d099746aaa1179d8c6e7e80d3eb9ff7" 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/cmPhg0PQUNFwgauQ/images/providers/run-gcloud-auth.png?fit=max&auto=format&n=cmPhg0PQUNFwgauQ&q=85&s=ee345c02976cfba0f2777fddc09977f3" 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/cmPhg0PQUNFwgauQ/images/providers/take-account-email.png?fit=max&auto=format&n=cmPhg0PQUNFwgauQ&q=85&s=51f26697b050e45ed109d7de49540b3d" 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/VEKBBm2VL7R8-xYV/images/providers/copy-auth-code.png?fit=max&auto=format&n=VEKBBm2VL7R8-xYV&q=85&s=7dc5ffe2d519351d009ead0198a3091f" 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/3MeTQEK7UW2A9QiV/images/providers/enter-auth-code.png?fit=max&auto=format&n=3MeTQEK7UW2A9QiV&q=85&s=bb6a39f186d02de52c493c12b9ddb9bc" 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/3MeTQEK7UW2A9QiV/images/providers/get-temp-file-credentials.png?fit=max&auto=format&n=3MeTQEK7UW2A9QiV&q=85&s=6ce807441c7a100639b7de0ab9fb3719" 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/App:

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

   <img src="https://mintcdn.com/prowler/3MeTQEK7UW2A9QiV/images/providers/get-needed-values-auth.png?fit=max&auto=format&n=3MeTQEK7UW2A9QiV&q=85&s=710bc8e49b678b80c2f3d41fbbede99d" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/roles-section.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=08cb05c799de17320974f83ff422cd48" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/prowler-role.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=e90127867d19b5032691adf76ca03de1" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/service-account-page.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=4c1836e3b6d4574d46960d7f7d5f4f0c" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/create-service-account.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=e9780e84c1276b11f398b0e4678f3a03" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/service-account-permissions.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=a5f3ea4bb08236020cb54d59d52322c0" 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.

### 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/create-new-key.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=188edf94362e7beca95bc773ccf0def5" 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/R3TgzvrQGHAsWrK1/user-guide/providers/gcp/img/json-key.png?fit=max&auto=format&n=R3TgzvrQGHAsWrK1&q=85&s=7535e9b7a850419939fc079c2670906a" 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`
