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

# Google Cloud Platform

Oleria provides identity security and access management teams with visibility and intelligence into who has access to what, where they got that access, how they use it, and whether they should even have it. As part of that promise, we deeply integrate your Google Cloud Platform environment into the Oleria platform. This document provides step-by-step guidance for integrating GCP - at either the organization level or project level - with your Oleria workspace.

## Prerequisites

* **GCP Organization Admin** or **Project Owner** role to grant IAM roles to the connector service account
* **Google Workspace Super Admin** role to configure domain-wide delegation

<Note>Use a service account (and not an employee account) with the suggested privileges for the integration to ensure continuity.</Note>

## Integration Approaches

Oleria supports two integration scopes. Follow the one most appropriate for your organization.

* **[Organization (Recommended)](#integrate-gcp-organization)** - Oleria sees all projects, folders, and resources across your entire GCP org, including org-level IAM policies and cross-project bindings. Recommended for full visibility.
* **[Project](#integrate-gcp-project)** - Oleria is scoped to IAM bindings, resources, and storage within a single project only. Use this if you don't have org-level access or only want to connect a specific project.

***

## Integrate GCP Organization

<Steps>
  <Step title="Create a Connector Service Account">
    1. Log in to the [Google Cloud Console](https://console.cloud.google.com) and navigate to **IAM & Admin** → **Service Accounts**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=b7e8a49feac5c8d181d9725e5c8a32c4" alt="Google Cloud Console showing IAM & Admin > Service Accounts navigation" data-og-width="1568" width="1568" data-og-height="192" height="192" data-path="images/integrations/gcp/step-1.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=c6f7b0b649ddae1f3ddee566ccd468a1 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=0c7f02781f0f02d49a5f8f5999b7a00e 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=12b8734ef51d430e7eccb7f07d3d8ec6 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=86333aa0336ba329b4a21f2405e032d8 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=6cb236e3b51189aa98c33bd56f3ef928 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=5f7cdfdab6f6d17d9513d00b653f1d4c 2500w" />

    2. Select **Create Service Account**. Provide a name such as `oleria-connector` and select **Create and Continue**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-2.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=928f84b002acc909ec9ddd7b05c15154" alt="Select Create Service Account. Provide a name such as oleria-connector and click Create and Continue" width="1090" height="1156" data-path="images/integrations/gcp/step-2.png" />

    3. Skip the optional role grant and user access steps. Select **Done**.
  </Step>

  <Step title="Enable Required GCP APIs">
    The connector calls a number of Google Cloud APIs. Each one must be enabled in the **host project** of the connector service account; if any are disabled, authentication or sync will fail.

    **Option A: Using the Google Cloud Console**

    1. In the Google Cloud Console, select the project that owns the connector service account from the resource picker.
    2. Navigate to **APIs & Services** → **Enabled APIs & services** → **Enable APIs and Services**.
    3. Search for and enable each of the following:

       * Cloud Resource Manager API
       * Identity and Access Management (IAM) API
       * Cloud Asset API
       * Cloud Identity API
       * Admin SDK API
       * Cloud Storage API
       * Cloud Logging API
       * Secret Manager API

    **Option B: Using the gcloud CLI**

    ```bash theme={null}
    gcloud services enable \
      cloudresourcemanager.googleapis.com \
      iam.googleapis.com \
      cloudasset.googleapis.com \
      cloudidentity.googleapis.com \
      admin.googleapis.com \
      storage.googleapis.com \
      logging.googleapis.com \
      secretmanager.googleapis.com \
      --project=YOUR_PROJECT_ID
    ```

    <Note>`YOUR_PROJECT_ID` is the project that owns the connector service account. For Cloud Resource Manager, IAM, Cloud Asset, Cloud Identity, Admin SDK, Cloud Storage, and Cloud Logging, enabling the API on this single host project is sufficient - the connector calls these APIs on behalf of resources across the whole organization. Secret Manager is the exception; see below.</Note>

    <Warning>
      **Secret Manager is enabled per-project, not org-wide.** Google checks the project that owns each secret, not the connector's host project - so this API needs a separate step, and only on projects that have billing enabled (Secret Manager is a billable API).

      **Who runs this:** you, using your own Google account - not the connector service account. This is a one-time setup task and grants nothing to the connector itself (that happens in the next Step).

      **Roles you need for this step:**

      | Role                                   | For                         | Granted where           |
      | -------------------------------------- | --------------------------- | ----------------------- |
      | `roles/cloudasset.viewer`              | listing projects in the org | organization level      |
      | `roles/serviceusage.serviceUsageAdmin` | enabling the API            | organization level      |
      | `roles/billing.viewer`                 | listing billed projects     | on each billing account |

      Grant yourself the first two if you don't already have them - Organization Admin from Prerequisites does not include any of these three roles:

      ```bash theme={null}
      gcloud organizations add-iam-policy-binding YOUR_ORG_ID \
        --member="user:YOUR_EMAIL" --role="roles/cloudasset.viewer"

      gcloud organizations add-iam-policy-binding YOUR_ORG_ID \
        --member="user:YOUR_EMAIL" --role="roles/serviceusage.serviceUsageAdmin"
      ```

      The billing role must be granted by whoever already administers the billing account (find `YOUR_BILLING_ACCOUNT_ID` under **Billing** → **Account Management**):

      ```bash theme={null}
      gcloud billing accounts add-iam-policy-binding YOUR_BILLING_ACCOUNT_ID \
        --member="user:YOUR_EMAIL" --role="roles/billing.viewer"
      ```

      **Why the script below builds two lists instead of one:** a billing account isn't owned by an organization - the same billing account can pay for projects in other orgs too. So "every project my billing account pays for" and "every project in my org" are two different questions with two different answers. The script asks both and keeps only the overlap, so it never touches a project outside your org.

      ```bash theme={null}
      ORG_PROJECTS=$(gcloud asset search-all-resources \
        --scope="organizations/YOUR_ORG_ID" \
        --asset-types="cloudresourcemanager.googleapis.com/Project" \
        --format="value(name)" \
      | sed 's#.*/##' | sort -u)

      BILLED_PROJECTS=$(for acct in $(gcloud billing accounts list --format="value(name)"); do
        gcloud billing projects list --billing-account="$acct" \
          --filter="billingEnabled=true" \
          --format="value(projectId)"
      done | sort -u)

      if [ -z "$ORG_PROJECTS" ] || [ -z "$BILLED_PROJECTS" ]; then
        echo "No projects resolved - check that both commands above succeeded." >&2
      fi

      TARGETS=$(comm -12 <(echo "$ORG_PROJECTS") <(echo "$BILLED_PROJECTS"))
      echo "$TARGETS" | wc -l
      echo "$TARGETS"
      ```

      **Review the `$TARGETS` list above before continuing** - enabling a service is a state change with no bulk undo. Once it looks right:

      ```bash theme={null}
      echo "$TARGETS" | while read -r p; do
        [ -n "$p" ] || continue
        if err=$(gcloud services enable secretmanager.googleapis.com --project="$p" 2>&1); then
          echo "$p: ENABLED"
        else
          echo "$p: FAILED - $(echo "$err" | head -1)"
        fi
      done
      ```

      A project left off this list simply isn't checked for secrets - nothing else about its integration is affected. You can run this against a subset of `$TARGETS` if you only want secret visibility in some projects.

      | Placeholder               | Replace with                                         |
      | ------------------------- | ---------------------------------------------------- |
      | `YOUR_ORG_ID`             | numeric org ID, under **IAM & Admin** → **Settings** |
      | `YOUR_EMAIL`              | your own Google account, not the connector's         |
      | `YOUR_BILLING_ACCOUNT_ID` | under **Billing** → **Account Management**           |
    </Warning>
  </Step>

  <Step title="Grant IAM Roles at the Organization Level">
    1. In the Google Cloud Console, click the project selector at the top of the page and select your **Organization** from the resource picker.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-3.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4180b074f2401d232cad2676768f1fbc" alt="Google Cloud Console project selector with Organization highlighted in resource picker" width="1596" height="532" data-path="images/integrations/gcp/step-3.png" />

    2. Navigate to **IAM & Admin** → **IAM** and select **Grant Access**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-4.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=fe3d4492e4a501f5e9c17f57244e82af" alt="Navigate to IAM & Admin →IAM and click Grant Access" width="770" height="244" data-path="images/integrations/gcp/step-4.png" />

    3. Enter the connector service account email and assign the following roles:

    ```
    roles/iam.securityReviewer
    roles/cloudasset.viewer
    roles/resourcemanager.organizationViewer
    roles/resourcemanager.folderViewer
    roles/storage.objectViewer
    roles/logging.viewer
    roles/secretmanager.viewer
    ```

    <Note>
      `roles/cloudasset.viewer` lets the connector use Cloud Asset Inventory to scan IAM policy bindings and service account inventory across the organization in bulk, rather than resource by resource. Sync fails without it. `roles/logging.viewer` is required for activity sync via Cloud Audit Logs. `roles/secretmanager.viewer` grants 11 permissions in total; of those, Oleria's connector relies on three - `secretmanager.secrets.list`, `secretmanager.secrets.getIamPolicy`, and `secretmanager.versions.get`. Oleria never reads secret values, so `roles/secretmanager.secretAccessor` (which grants `secretmanager.versions.access`) is intentionally NOT required.
    </Note>
  </Step>

  <Step title="Enable Security Command Center for Risk Monitoring (Optional)">
    Oleria's GCP risk signals come entirely from Security Command Center (SCC) findings.

    <Warning>
      Skipping this step doesn't break setup - the connection still completes and syncs your IAM data normally - but no GCP risks will appear in Risk Monitoring until all three of the following are done.
    </Warning>

    1. Enable the **Security Command Center API** (`securitycenter.googleapis.com`) in the host project.
    2. Grant the connector service account `roles/securitycenter.findingsViewer` at the organization level.
    3. Confirm SCC itself is activated for your organization. This is separate from enabling the API: go to [Security Command Center](https://console.cloud.google.com/security/command-center/overview) in the Cloud Console and select your organization. If a findings dashboard loads, SCC is active. If you see an activation prompt instead, an **Organization Administrator** or **Security Center Admin** needs to activate a tier (Standard is free) before Oleria can surface findings.
  </Step>

  <Step title="Generate a Service Account Key">
    1. In **IAM & Admin** → **Service Accounts**, select the service account you created in the first step.

    2. Navigate to the **Keys** tab and select **Add Key** → **Create new key**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=8b324e9bf2012713678529d76817bfd1" alt="Service account Keys tab with Add Key > Create new key option" data-og-width="316" width="316" data-og-height="238" height="238" data-path="images/integrations/gcp/step-5.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=60731de4f89ba892a74c43b45f66c35e 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4b36b350facc51b49eb38bf418f354ad 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=1264fb309ac1a6118c9835e0dca8915e 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4c8760cfe838749533b80fdeb1d8c3f3 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=813d2214b05942171665180401ac1fd7 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=706defdc670cdafddc9d5033e5f8cd7e 2500w" />

    3. Select **JSON** format and select **Create**. The key file will be downloaded to your machine. Keep this file secure - you will provide it to Oleria in the final step.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4940d5a5701334b76eb7dfd3656b6a07" alt="Service account key creation dialog with JSON format selected" width="1126" height="668" data-path="images/integrations/gcp/step-6.png" />
  </Step>

  <Step title="Configure Domain-Wide Delegation in Google Workspace">
    Domain-wide delegation allows the connector service account to enumerate Google Workspace users and groups on behalf of a delegated admin.

    1. Log in to the [Google Workspace Admin Console](https://admin.google.com) and navigate to **Security** → **Access and data control** → **API controls**. Under **Domain-wide delegation**, select **Manage Domain Wide Delegation**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=89b79459eb583aa1bc08529563849b74" alt="Google Workspace Admin Console Security > API Controls > Domain-wide Delegation" data-og-width="2116" width="2116" data-og-height="328" height="328" data-path="images/integrations/gcp/step-7.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=69be620735f16a794242964f1440ae28 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=e24c78b09c40c5f9d89456d5d7488f74 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=f2c1cac00638cfed5754368f58905c47 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=601dbf98c04a4c799aec1cdd0685b2ed 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=ddde95f5c9c8e7e9113bba62817d02f4 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=330c8ca3b4411dbb71131aa513ca7a9a 2500w" />

    2. Select **Add new**.

    3. Provide the **Client ID** of the service account (found under **IAM & Admin** → **Service Accounts** → select the SA → **Details** tab → **Unique ID**) and add the following OAuth scopes:

    ```
    https://www.googleapis.com/auth/admin.directory.user.readonly
    https://www.googleapis.com/auth/cloud-identity.groups.readonly
    ```

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-8.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=59f9aac94bbd121bcf7ab546ac4988a5" alt="Domain-wide delegation dialog with Client ID and OAuth scopes fields completed" width="928" height="824" data-path="images/integrations/gcp/step-8.png" />

    4. Select **Authorize**.

    <Note>The Google Workspace admin email provided as the Workspace Delegate Email in the final step must have at least read access to user and group directories.</Note>
  </Step>

  <Step title="Set Up Audit Log Export for Activity Sync">
    This step enables Oleria to ingest Cloud Audit Logs for user activity insights.

    <Note>Choose a globally unique name for your audit log bucket - you'll use it as `YOUR_AUDIT_BUCKET` throughout this step.</Note>

    **Option A: Using the Google Cloud Console**

    1. In the Cloud Console, confirm your **Organization** is selected in the resource picker at the top of the page.

    2. Navigate to **Cloud Storage** → **Buckets** and select **Create**. Provide a globally unique bucket name (this will be your `YOUR_AUDIT_BUCKET`), choose a location, and accept the defaults for the remaining settings. Select **Create**.

    3. Navigate to **Logging** → **Log Router**. The fastest way is to type `log router` in the GCP search bar at the top of the page and select **Log Router** (listed as **Product page - Logging**) from the results.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-log-router-search.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=3e139a4a825742e210817570baf27e5e" alt="GCP search bar showing log router search result" width="1198" height="276" data-path="images/integrations/gcp/step-6-log-router-search.png" />

    4. On the **Log Router Sinks** page, confirm the resource scope shows your **Organization**, then select **Create Sink** at the top of the page.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-log-router-create-sink.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=2bf7863372849a3b0593f403a927a2ab" alt="Log Router Sinks page with Create Sink button highlighted" width="820" height="252" data-path="images/integrations/gcp/step-6-log-router-create-sink.png" />

    5. The **Create logs routing sink** wizard opens with four steps. Complete them as follows:

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-sink-wizard-overview.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=1c50b5ffd16dbe825309868716b6c762" alt="Create logs routing sink wizard showing all four steps" width="1144" height="1378" data-path="images/integrations/gcp/step-6-sink-wizard-overview.png" />

    **Sink details:** Enter `audit-log-sink` as the **Sink name**. Optionally add a description. Select **Next**.

    **Sink destination:** From the **Select sink service** dropdown, choose **Cloud Storage bucket** and select your bucket. GCP will automatically switch the service type to **Other resource** and populate the **Sink destination** field with `storage.googleapis.com/YOUR_AUDIT_BUCKET` - this is expected behavior at the organization level. Select **Next**.

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-sink-destination-other-resource.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=b9499dc13caf7b0bb52e9f147105f869" alt="Sink destination step showing Other resource selected with storage.googleapis.com URI" width="1058" height="502" data-path="images/integrations/gcp/step-6-sink-destination-other-resource.png" />

    **Choose logs to include in sink:** Select **Include logs ingested by this organization and all child resources**. This ensures audit logs from all projects and folders across your organization are captured. Then, in the **Build inclusion filter** field, enter the following and select **Next**:

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-include-children.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=036e1387c048ce48bdbcf82fe4111e46" alt="Choose logs to include showing Include logs ingested by this organization and all child resources selected" width="1064" height="418" data-path="images/integrations/gcp/step-6-include-children.png" />

    ```
    logName=~"cloudaudit.googleapis.com"
    ```

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-inclusion-filter.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=9928cb605429af03795cfd1120860c5c" alt="Build inclusion filter field with logName cloudaudit.googleapis.com filter entered" width="966" height="514" data-path="images/integrations/gcp/step-6-inclusion-filter.png" />

    <Note>GCP may show a caution that a large number of log entries could be routed. This is expected - the inclusion filter above limits export to audit logs only.</Note>

    **Choose logs to filter out of sink (optional):** No exclusion filters are needed. Select **Create Sink**.

    6. After the sink is created, open it from the **Log Router Sinks** list and copy the **Writer Identity** service account email (e.g. `serviceAccount:p123456789-xxxxxx@gcp-sa-logging.iam.gserviceaccount.com`). You will use this address in the next step.

    7. Navigate to **Cloud Storage** → **Buckets**, select your audit log bucket, open the **Permissions** tab, and select **Grant Access**. Add the following two principals, then select **Save**:

       * **Sink writer:** In the **New principals** field, paste the Writer Identity email you copied. In the **Role** dropdown, search for and select **Storage Object Creator**.
       * **Oleria connector:** In the **New principals** field, enter `oleria-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com`. In the **Role** dropdown, search for and select **Storage Object Viewer**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-bucket-permissions.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=f089679d2b6f06606500280cf9dea25b" alt="Bucket permissions Grant Access dialog showing role search for Storage Object Viewer" width="1002" height="1756" data-path="images/integrations/gcp/step-6-bucket-permissions.png" />

    **Option B: Using the gcloud CLI**

    1. Create a GCS bucket to receive audit logs:

    ```bash theme={null}
    gsutil mb -p YOUR_PROJECT_ID gs://YOUR_AUDIT_BUCKET
    ```

    2. Create a Log Sink that exports organization-wide audit logs to the bucket:

    ```bash theme={null}
    gcloud logging sinks create audit-log-sink \
      storage.googleapis.com/YOUR_AUDIT_BUCKET \
      --log-filter='logName=~"cloudaudit.googleapis.com"' \
      --include-children \
      --organization=YOUR_ORG_ID
    ```

    3. Grant the sink's writer service account write access to the bucket:

    ```bash theme={null}
    SINK_SA=$(gcloud logging sinks describe audit-log-sink \
      --organization=YOUR_ORG_ID --format='value(writerIdentity)')

    gsutil iam ch ${SINK_SA}:objectCreator gs://YOUR_AUDIT_BUCKET
    ```

    4. Grant the connector service account read access to the bucket:

    ```bash theme={null}
    gsutil iam ch serviceAccount:oleria-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com:objectViewer \
      gs://YOUR_AUDIT_BUCKET
    ```

    <Note>Oleria automatically discovers the audit log bucket by inspecting Log Sinks - no additional configuration is needed in the Oleria workspace.</Note>

    **Optional: enable Data Access audit logs for Secret Manager events**

    To capture secret metadata and access events, enable **Admin Read** and/or **Data Read** audit logs for the Secret Manager API. In the Cloud Console, go to **IAM & Admin** → **Audit Logs**, find **Secret Manager API**, and check the categories you want. The audit log sink configured above picks up these events automatically once they are enabled.

    | Category       | Examples                                                                                                          | Requires enablement         |
    | :------------- | :---------------------------------------------------------------------------------------------------------------- | :-------------------------- |
    | Admin Activity | `CreateSecret`, `UpdateSecret`, `DeleteSecret`, `AddSecretVersion`, `EnableSecretVersion`, `DisableSecretVersion` | No - always on              |
    | Admin Read     | `GetSecret`, `GetSecretVersion`, `ListSecrets`, `ListSecretVersions`, `GetIamPolicy` (on a secret)                | **Yes - enable Admin Read** |
    | Data Read      | `AccessSecretVersion`                                                                                             | **Yes - enable Data Read**  |

    Without Data Access logging, Oleria surfaces Admin Activity events only. Data Read events (who accessed a secret value, and when) are the primary signal for identifying unused or over-permissioned secrets.
  </Step>

  <Step title="Connect GCP Organization to Oleria">
    1. Log in to your Oleria workspace, select **Integrations** → select **Google Cloud Platform**. A side panel opens. Select **Organization (Recommended)** from the **Connector Scope** dropdown.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-9.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=a1d20b1a9434d25c97c5ff9e94cf3243" alt="Oleria workspace GCP integration panel with Organization scope selected" width="886" height="326" data-path="images/integrations/gcp/step-9.png" />

    2. Provide the following and select **Authenticate**:

    * **Organization ID** - your numeric GCP Organization ID (e.g. `123456789012`). Found under **IAM & Admin** → **Settings** in the Cloud Console.
    * **Workspace Delegate Email** - email address of the Google Workspace admin whose permissions will be used to enumerate users and groups
    * **Service Account Credentials** - paste the full contents of the JSON key file downloaded above

    3. Find the newly integrated GCP Organization in your Oleria workspace connected integrations.
  </Step>
</Steps>

***

## Integrate GCP Project

<Steps>
  <Step title="Create a Connector Service Account">
    1. Log in to the [Google Cloud Console](https://console.cloud.google.com), select the target project, and navigate to **IAM & Admin** → **Service Accounts**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=b7e8a49feac5c8d181d9725e5c8a32c4" alt="Google Cloud Console showing IAM & Admin > Service Accounts for the target project" data-og-width="1568" width="1568" data-og-height="192" height="192" data-path="images/integrations/gcp/step-1.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=c6f7b0b649ddae1f3ddee566ccd468a1 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=0c7f02781f0f02d49a5f8f5999b7a00e 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=12b8734ef51d430e7eccb7f07d3d8ec6 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=86333aa0336ba329b4a21f2405e032d8 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=6cb236e3b51189aa98c33bd56f3ef928 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-1.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=5f7cdfdab6f6d17d9513d00b653f1d4c 2500w" />

    2. Select **Create Service Account**. Provide a name such as `oleria-connector` and select **Create and Continue**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-2.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=928f84b002acc909ec9ddd7b05c15154" alt="Select Create Service Account. Provide a name such as oleria-connector and click Create and Continue" width="1090" height="1156" data-path="images/integrations/gcp/step-2.png" />

    3. Skip the optional role grant and user access steps. Select **Done**.
  </Step>

  <Step title="Enable Required GCP APIs">
    The connector calls a number of Google Cloud APIs. Each one must be enabled in the **host project** of the connector service account; if any are disabled, authentication or sync will fail.

    **Option A: Using the Google Cloud Console**

    1. In the Google Cloud Console, select the project that owns the connector service account from the resource picker.
    2. Navigate to **APIs & Services** → **Enabled APIs & services** → **Enable APIs and Services**.
    3. Search for and enable each of the following:

       * Cloud Resource Manager API
       * Identity and Access Management (IAM) API
       * Cloud Asset API
       * Cloud Identity API
       * Admin SDK API
       * Cloud Storage API
       * Cloud Logging API
       * Secret Manager API

    **Option B: Using the gcloud CLI**

    ```bash theme={null}
    gcloud services enable \
      cloudresourcemanager.googleapis.com \
      iam.googleapis.com \
      cloudasset.googleapis.com \
      cloudidentity.googleapis.com \
      admin.googleapis.com \
      storage.googleapis.com \
      logging.googleapis.com \
      secretmanager.googleapis.com \
      --project=YOUR_PROJECT_ID
    ```

    <Note>`YOUR_PROJECT_ID` is the project that owns the connector service account, which is also the target project for this integration.</Note>
  </Step>

  <Step title="Grant IAM Roles at the Project Level">
    1. In the Google Cloud Console, navigate to **IAM & Admin** → **IAM** for the target project and select **Grant Access**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-4.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=fe3d4492e4a501f5e9c17f57244e82af" alt="Google Cloud Console project IAM page with Grant Access button highlighted" width="770" height="244" data-path="images/integrations/gcp/step-4.png" />

    2. Enter the connector service account email and assign the following roles:

    ```
    roles/iam.securityReviewer
    roles/cloudasset.viewer
    roles/storage.objectViewer
    roles/logging.viewer
    roles/secretmanager.viewer
    ```

    <Note>
      `roles/cloudasset.viewer` lets the connector use Cloud Asset Inventory to scan IAM policy bindings and service account inventory across the project in bulk, rather than resource by resource. Sync fails without it. `roles/logging.viewer` is required for activity sync via Cloud Audit Logs. `roles/secretmanager.viewer` grants 11 permissions in total; of those, Oleria's connector relies on three - `secretmanager.secrets.list`, `secretmanager.secrets.getIamPolicy`, and `secretmanager.versions.get`. Oleria never reads secret values, so `roles/secretmanager.secretAccessor` (which grants `secretmanager.versions.access`) is intentionally NOT required.
    </Note>
  </Step>

  <Step title="Enable Security Command Center for Risk Monitoring (Optional)">
    Oleria's GCP risk signals come entirely from Security Command Center (SCC) findings.

    <Warning>
      Skipping this step doesn't break setup - the connection still completes and syncs your IAM data normally - but no GCP risks will appear in Risk Monitoring until all three of the following are done.
    </Warning>

    1. Enable the **Security Command Center API** (`securitycenter.googleapis.com`) in the host project.
    2. Grant the connector service account `roles/securitycenter.findingsViewer` at the project level.
    3. Confirm SCC itself is activated for this project. This is separate from enabling the API: go to [Security Command Center](https://console.cloud.google.com/security/command-center/overview) in the Cloud Console and select the project. If a findings dashboard loads, SCC is active. If you see an activation prompt instead, a **Security Center Admin** needs to activate a tier (Standard is free) for the project before Oleria can surface findings.
  </Step>

  <Step title="Generate a Service Account Key">
    1. In **IAM & Admin** → **Service Accounts**, select the service account you created in the first step.

    2. Navigate to the **Keys** tab and select **Add Key** → **Create new key**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=8b324e9bf2012713678529d76817bfd1" alt="Service account Keys tab with Add Key > Create new key option" data-og-width="316" width="316" data-og-height="238" height="238" data-path="images/integrations/gcp/step-5.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=60731de4f89ba892a74c43b45f66c35e 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4b36b350facc51b49eb38bf418f354ad 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=1264fb309ac1a6118c9835e0dca8915e 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4c8760cfe838749533b80fdeb1d8c3f3 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=813d2214b05942171665180401ac1fd7 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-5.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=706defdc670cdafddc9d5033e5f8cd7e 2500w" />

    3. Select **JSON** format and select **Create**. The key file will be downloaded to your machine. Keep this file secure - you will provide it to Oleria in the final step.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=4940d5a5701334b76eb7dfd3656b6a07" alt="Service account key creation dialog with JSON format selected" width="1126" height="668" data-path="images/integrations/gcp/step-6.png" />
  </Step>

  <Step title="Configure Domain-Wide Delegation in Google Workspace">
    Domain-wide delegation allows the connector service account to enumerate Google Workspace users and groups on behalf of a delegated admin.

    1. Log in to the [Google Workspace Admin Console](https://admin.google.com) and navigate to **Security** → **Access and data control** → **API controls**. Under **Domain-wide delegation**, select **Manage Domain Wide Delegation**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=89b79459eb583aa1bc08529563849b74" alt="Google Workspace Admin Console Security > API Controls > Domain-wide Delegation" data-og-width="2116" width="2116" data-og-height="328" height="328" data-path="images/integrations/gcp/step-7.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=280&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=69be620735f16a794242964f1440ae28 280w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=560&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=e24c78b09c40c5f9d89456d5d7488f74 560w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=840&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=f2c1cac00638cfed5754368f58905c47 840w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=1100&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=601dbf98c04a4c799aec1cdd0685b2ed 1100w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=1650&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=ddde95f5c9c8e7e9113bba62817d02f4 1650w, https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-7.png?w=2500&fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=330c8ca3b4411dbb71131aa513ca7a9a 2500w" />

    2. Select **Add new**.

    3. Provide the **Client ID** of the service account (found under **IAM & Admin** → **Service Accounts** → select the SA → **Details** tab → **Unique ID**) and add the following OAuth scopes:

    ```
    https://www.googleapis.com/auth/admin.directory.user.readonly
    https://www.googleapis.com/auth/cloud-identity.groups.readonly
    ```

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-8.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=59f9aac94bbd121bcf7ab546ac4988a5" alt="Domain-wide delegation dialog with Client ID and OAuth scopes fields completed" width="928" height="824" data-path="images/integrations/gcp/step-8.png" />

    4. Select **Authorize**.

    <Note>The Google Workspace admin email provided as the Workspace Delegate Email in the final step must have at least read access to user and group directories.</Note>
  </Step>

  <Step title="Set Up Audit Log Export for Activity Sync">
    This step enables Oleria to ingest Cloud Audit Logs for user activity insights.

    <Note>Choose a globally unique name for your audit log bucket - you'll use it as `YOUR_AUDIT_BUCKET` throughout this step.</Note>

    **Option A: Using the Google Cloud Console**

    1. In the Cloud Console, confirm the target **Project** is selected in the resource picker at the top of the page.

    2. Navigate to **Cloud Storage** → **Buckets** and select **Create**. Provide a globally unique bucket name (this will be your `YOUR_AUDIT_BUCKET`), choose a location, and accept the defaults for the remaining settings. Select **Create**.

    3. Navigate to **Logging** → **Log Router**. The fastest way is to type `log router` in the GCP search bar at the top of the page and select **Log Router** (listed as **Product page - Logging**) from the results.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-log-router-search.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=3e139a4a825742e210817570baf27e5e" alt="GCP search bar showing log router search result" width="1198" height="276" data-path="images/integrations/gcp/step-6-log-router-search.png" />

    4. On the **Log Router Sinks** page, confirm the resource scope shows your target **Project**, then select **Create Sink** at the top of the page.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-log-router-create-sink.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=2bf7863372849a3b0593f403a927a2ab" alt="Log Router Sinks page with Create Sink button highlighted" width="820" height="252" data-path="images/integrations/gcp/step-6-log-router-create-sink.png" />

    5. The **Create logs routing sink** wizard opens with four steps. Complete them as follows:

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-sink-wizard-overview.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=1c50b5ffd16dbe825309868716b6c762" alt="Create logs routing sink wizard showing all four steps" width="1144" height="1378" data-path="images/integrations/gcp/step-6-sink-wizard-overview.png" />

    **Sink details:** Enter `audit-log-sink` as the **Sink name**. Optionally add a description. Select **Next**.

    **Sink destination:** From the **Select sink service** dropdown, choose **Cloud Storage bucket**. Select your bucket from the browser, or type the destination directly as `storage.googleapis.com/YOUR_AUDIT_BUCKET`. Select **Next**.

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-sink-destination-project.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=42cf4743410dbaa32d14f3314d0ed7ed" alt="Full sink creation wizard at project level showing Cloud Storage bucket destination" width="3456" height="2234" data-path="images/integrations/gcp/step-6-sink-destination-project.png" />

    **Choose logs to include in sink:** In the **Build inclusion filter** field, enter the following and select **Next**:

    ```
    logName=~"cloudaudit.googleapis.com"
    ```

    <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-inclusion-filter.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=9928cb605429af03795cfd1120860c5c" alt="Build inclusion filter field with logName cloudaudit.googleapis.com filter entered" width="966" height="514" data-path="images/integrations/gcp/step-6-inclusion-filter.png" />

    **Choose logs to filter out of sink (optional):** No exclusion filters are needed. Select **Create Sink**.

    6. After the sink is created, open it from the **Log Router Sinks** list and copy the **Writer Identity** service account email (e.g. `serviceAccount:p123456789-xxxxxx@gcp-sa-logging.iam.gserviceaccount.com`). You will use this address in the next step.

    7. Navigate to **Cloud Storage** → **Buckets**, select your audit log bucket, open the **Permissions** tab, and select **Grant Access**. Add the following two principals, then select **Save**:

       * **Sink writer:** In the **New principals** field, paste the Writer Identity email you copied. In the **Role** dropdown, search for and select **Storage Object Creator**.
       * **Oleria connector:** In the **New principals** field, enter `oleria-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com`. In the **Role** dropdown, search for and select **Storage Object Viewer**.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-6-bucket-permissions.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=f089679d2b6f06606500280cf9dea25b" alt="Bucket permissions Grant Access dialog showing role search for Storage Object Viewer" width="1002" height="1756" data-path="images/integrations/gcp/step-6-bucket-permissions.png" />

    **Option B: Using the gcloud CLI**

    1. Create a GCS bucket to receive audit logs:

    ```bash theme={null}
    gsutil mb -p YOUR_PROJECT_ID gs://YOUR_AUDIT_BUCKET
    ```

    2. Create a Log Sink that exports project-level audit logs to the bucket:

    ```bash theme={null}
    gcloud logging sinks create audit-log-sink \
      storage.googleapis.com/YOUR_AUDIT_BUCKET \
      --log-filter='logName=~"cloudaudit.googleapis.com"' \
      --project=YOUR_PROJECT_ID
    ```

    3. Grant the sink's writer service account write access to the bucket:

    ```bash theme={null}
    SINK_SA=$(gcloud logging sinks describe audit-log-sink \
      --project=YOUR_PROJECT_ID --format='value(writerIdentity)')

    gsutil iam ch ${SINK_SA}:objectCreator gs://YOUR_AUDIT_BUCKET
    ```

    4. Grant the connector service account read access to the bucket:

    ```bash theme={null}
    gsutil iam ch serviceAccount:oleria-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com:objectViewer \
      gs://YOUR_AUDIT_BUCKET
    ```

    <Note>Oleria automatically discovers the audit log bucket by inspecting Log Sinks - no additional configuration is needed in the Oleria workspace.</Note>

    **Optional: enable Data Access audit logs for Secret Manager events**

    To capture secret metadata and access events, enable **Admin Read** and/or **Data Read** audit logs for the Secret Manager API. In the Cloud Console, go to **IAM & Admin** → **Audit Logs**, find **Secret Manager API**, and check the categories you want. The audit log sink configured above picks up these events automatically once they are enabled.

    | Category       | Examples                                                                                                          | Requires enablement         |
    | :------------- | :---------------------------------------------------------------------------------------------------------------- | :-------------------------- |
    | Admin Activity | `CreateSecret`, `UpdateSecret`, `DeleteSecret`, `AddSecretVersion`, `EnableSecretVersion`, `DisableSecretVersion` | No - always on              |
    | Admin Read     | `GetSecret`, `GetSecretVersion`, `ListSecrets`, `ListSecretVersions`, `GetIamPolicy` (on a secret)                | **Yes - enable Admin Read** |
    | Data Read      | `AccessSecretVersion`                                                                                             | **Yes - enable Data Read**  |

    Without Data Access logging, Oleria surfaces Admin Activity events only. Data Read events (who accessed a secret value, and when) are the primary signal for identifying unused or over-permissioned secrets.
  </Step>

  <Step title="Connect GCP Project to Oleria">
    1. Log in to your Oleria workspace, select **Integrations** → select **Google Cloud Platform**. A side panel opens. Select **Project** from the **Connector Scope** dropdown.

           <img src="https://mintcdn.com/dev-oleria/qpj7wui8I7Jh_PL8/images/integrations/gcp/step-10.png?fit=max&auto=format&n=qpj7wui8I7Jh_PL8&q=85&s=9edfbe85f84149b2ce93627d6c5ee9ae" alt="Oleria workspace GCP integration panel with Project scope selected" width="858" height="322" data-path="images/integrations/gcp/step-10.png" />

    2. Provide the following and select **Authenticate**:

    * **Project ID** - your GCP Project ID (e.g. `my-project`). Found in the Cloud Console project selector at the top of the page.
    * **Workspace Delegate Email** - email address of the Google Workspace admin whose permissions will be used to enumerate users and groups
    * **Service Account Credentials** - paste the full contents of the JSON key file downloaded above

    3. Find the newly integrated GCP Project in your Oleria workspace connected integrations.
  </Step>
</Steps>

***

## Enable Remediations (Optional)

Remediations allow Oleria to take automated or one-click corrective actions - such as revoking an IAM binding, removing a group member, or disabling a service account - directly from the Oleria workspace.

To allow Oleria to take remediation actions in your GCP environment, grant the connector service account the following additional roles:

* To **revoke an IAM binding at the project level**, grant `roles/resourcemanager.projectIamAdmin` on the project.
* To **revoke an IAM binding at the organization level**, grant `roles/resourcemanager.organizationIamAdmin` on the organization.
* To **remove a member from a Cloud Identity group**, grant `roles/cloudidentity.groups.editor`.
* To **disable a service account**, grant `roles/iam.serviceAccountAdmin` on the project that owns the service account.

<Note>Secret Manager secrets are discovery-only in this integration. The **revoke IAM binding** remediations above apply to project, folder, organization, GCS bucket, and service account bindings, but not to Secret Manager secret bindings.</Note>

## Contact us

For questions about this integration, contact us at [support@oleria.com](mailto:support@oleria.com).
