Connect from ResolveAI to Google Cloud to give the agent access to logs, metrics, alerts, and dashboards to be used in investigations.ResolveAI supports three authentication methods for GCP. Pick a tab below and follow it end-to-end.
Add roles/logging.viewer on the projects, folders, or organizations whose logs you want to expose — a single folder- or org-level grant covers all child projects. For metrics, alerts, and dashboards, also add roles/monitoring.viewer on the service account’s project.
Open Integrations for your organization, click GCP, then Add Connection at the top right. Give the integration a name (ex. GCP Prod) and list its environments (ex. production and staging).
These are the log containers to search: projects/PROJECT_ID, folders/FOLDER_ID, organizations/ORG_ID, or a specific log bucket view. A single folder/org entry covers every log project underneath it, including projects created later (log search only — metrics, alerts, and dashboards use the connection’s single Project ID).
Under Authentication, choose Service Account Key and paste the whole private key JSON from step 3 into the Service Account Key JSON field. Click Save, then verify the connection with Check Health.
ResolveAI’s workload (running on AWS) authenticates to your GCP project directly using its AWS identity, so no long-lived private key is stored — nothing is on the ResolveAI side except the federation config JSON and your project ID. Recommended if your security posture discourages static service account keys.
Prerequisites: permissions in Google Cloud to create a Workload Identity Pool, and permissions in ResolveAI to create an integration.
Contact ResolveAI support to get the specific AWS account ID and IAM role ARN that the provider should trust — that’s the identity ResolveAI’s workload uses to authenticate.
3. Create the service account ResolveAI will impersonate
Or choose an existing one. Grant it roles/logging.viewer on the projects, folders, or organizations whose logs you want to expose — a single folder- or org-level grant covers all child projects. For metrics, alerts, and dashboards, also grant roles/monitoring.viewer on your Project ID’s project.
Grant the Workload Identity Pool principal the roles/iam.workloadIdentityUser role on that service account, so the federated AWS identity is allowed to impersonate it.
From the pool’s provider page, click Download config to get the federation credential JSON (it will have "type": "external_account"). Note your GCP Project ID as well — you’ll need both below.
Open Integrations for your organization, click GCP, then Add Connection at the top right. Give the integration a name (ex. GCP Prod) and list its environments (ex. production and staging).
These are the log containers to search: projects/PROJECT_ID, folders/FOLDER_ID, organizations/ORG_ID, or a specific log bucket view. A single folder/org entry covers every log project underneath it, including projects created later (log search only — metrics, alerts, and dashboards use the connection’s single Project ID).
Under Authentication, choose Workload Identity Federation: paste the federation config JSON from step 5 into the Workload Identity Config JSON field, and enter your Project ID. Click Save, then verify the connection with Check Health.
No GCP service account key exists anywhere, no external identity is trusted in your GCP org, and no secret material ever leaves your cluster.
Works with GKE (issuer URLs are publicly reachable, including for private clusters) and any other cluster whose OIDC issuer GCP can reach.
Recommended if your security posture disallows both service account keys and federating third-party identities into your Workload Identity Pool.
Only the credential-config-file method described below is supported; GKE metadata-server auto-discovery (plain ADC with no config JSON) is not.
Prerequisites: permissions in Google Cloud to create a Workload Identity Pool, plus a running Resolve Satellite in a Kubernetes cluster and access to its Helm values.
4. Grant the satellite’s federated principal a role
Grant roles/logging.viewer on the projects, folders, or organizations whose logs you want to expose. A single folder- or org-level grant covers all child projects, including projects created later. For metrics, alerts, and dashboards, also grant roles/monitoring.viewer on the project you’ll set as projectId in step 7. The principal is:
(Alternative: grant the role to a GCP service account instead, and add --service-account=THAT_GSA_EMAIL in step 5 so the federated identity impersonates it.)
Embed the contents of credential-config.json from step 5 in an integrations block. Unlike a service account key, this file contains no secret material (only pool/provider identifiers and the token file path), so it is safe to place in Helm values:
integrations: gcp: type: gcp create: true connection: projectId: YOUR_PROJECT_ID # project used for metrics, alerts, and dashboards API calls resourceNames: # log containers to search. A folder/org entry covers every log project underneath it (log search only) - folders/YOUR_FOLDER_ID # or projects/..., organizations/... # Contents of credential-config.json from step 5. # Contains no secret material. Must be a string — keep the | block scalar. workloadIdentityConfigJson: | { "type": "external_account", "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/providers/resolve-satellite-provider", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "/var/run/secrets/resolve-gcp-wif/token" } }
workloadIdentityConfigJson must reach the satellite as a string — use the | block scalar exactly as shown.Do not deliver it as a raw JSON file inside a Kubernetes Secret: the satellite parses mounted secret files as YAML, a bare JSON file becomes an object instead of a string, and GCP authentication is silently skipped (all calls fail with 401).
The changes from Steps 6 and 7 go in the same values file — apply them together with a single helm upgrade. The connection appears in the ResolveAI Integrations list automatically once the satellite registers it; verify it with Check Health on the GCP integration page.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ResolveAI","colors":{"primary":"#657220","light":"#D9F400","dark":"#657220"},"logo":{"light":"https://mintcdn.com/resolveai-0e94a547/U6tAmGL475_2-tiG/logo/light.png?fit=max\u0026auto=format\u0026n=U6tAmGL475_2-tiG\u0026q=85\u0026s=3a6b69f8a5fe52b26df9c5ca14502a00","dark":"https://mintcdn.com/resolveai-0e94a547/U6tAmGL475_2-tiG/logo/dark.png?fit=max\u0026auto=format\u0026n=U6tAmGL475_2-tiG\u0026q=85\u0026s=91623b682196bbb387c4828837944d67","href":"https://resolve.ai"},"favicon":"https://mintcdn.com/resolveai-0e94a547/abCB0y7htkHnjuZZ/favicon.png?fit=max\u0026auto=format\u0026n=abCB0y7htkHnjuZZ\u0026q=85\u0026s=9222c9e6a4c30699f515e4baccc995bd","appearance":{"default":"light"},"seo":{"metatags":{"og:image":"https://docs.resolve.ai/images/OG-Fallback.png","twitter:image":"https://docs.resolve.ai/images/OG-Fallback.png","twitter:card":"summary_large_image","og:site_name":"ResolveAI Docs"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"resolveai-0e94a547","hasAudioNarration":false,"actualSubdomain":"resolveai-0e94a547","customDomains":["docs.resolve.ai"],"gitSource":{"type":"github","owner":"clouddatalabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae3e3b9f7b9655b07948cab","collectionId":"339a630b-6ebc-400a-9590-bcaf4869813b","liveDeploymentHistoryId":"6ae3e3b9f7b9655b07948cab","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae3e3b9f7b9655b07948cab","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Setup \u0026 Integrations","count":40},{"language":"default","tag":"Integrations","count":30},{"language":"default","tag":"Security \u0026 Administration","count":10},{"language":"default","tag":"Get Started","count":6},{"language":"default","tag":"Guided Tour","count":5},{"language":"default","tag":"Features","count":5},{"language":"default","tag":"Resolve Satellite","count":5},{"language":"default","tag":"Developers","count":4},{"language":"default","tag":"Team and Knowledge","count":4},{"language":"default","tag":"Git","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"help@resolve.ai"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#navigation-items .text-sm{font-size:.9375rem;line-height:1.6}#navigation-items .sidebar-group-header{font-size:.8125rem;letter-spacing:.02em;margin-top:1.75rem;margin-bottom:.625rem}#navigation-items .sidebar-group li>a{padding-top:.4375rem;padding-bottom:.4375rem}#navigation-items .sidebar-group>li+li{margin-top:2px}hr:has(+#pagination){display:none}:has(>#pagination){border-top:none!important}#pagination{margin-top:1rem;margin-bottom:2.5rem;gap:1rem}#pagination a{padding:.75rem 1rem;border:1px solid rgb(0 0 0/.25);border-radius:.75rem;transition:border-color 150ms ease,background-color 150ms ease}#pagination a:hover{border-color:rgb(0 0 0/.6);background:rgb(0 0 0/.03)}.dark #pagination a{border-color:rgb(255 255 255/.25)}.dark #pagination a:hover{border-color:rgb(255 255 255/.6);background:rgb(255 255 255/.04)}#pagination a [data-component-part=pagination-title]{font-weight:600;color:rgb(0 0 0/.9)}.dark #pagination a [data-component-part=pagination-title]{color:rgb(255 255 255/.9)}#pagination a [data-component-part=pagination-label]{font-size:.7rem;font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:rgb(0 0 0/.55)}.dark #pagination a [data-component-part=pagination-label]{color:rgb(255 255 255/.55)}#pagination a [data-component-part=pagination-chevron]{color:rgb(0 0 0/.45)}.dark #pagination a [data-component-part=pagination-chevron]{color:rgb(255 255 255/.45)}.chat-assistant-floating-input,div:has(>.chat-assistant-floating-input){display:none!important}img.nav-logo{height:1.25rem!important}"}],"page":{"pagePath":"gcp","slug":"/gcp","pageMetadata":{"title":"GCP","description":null,"href":"/gcp"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,OptimizedImage,Tab,Tabs,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Connect from ResolveAI to Google Cloud to give the agent access to logs, metrics, alerts, and dashboards to be used in investigations.`}),`\n`,_jsx(_components.p,{children:`ResolveAI supports three authentication methods for GCP. Pick a tab below and follow it end-to-end.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Option 1: SA Key`,id:`option-1%3A-sa-key`,\"data-child-heading-ids\":`[\"service-account-sa-key\",\"in-google-cloud\",\"1-create-a-service-account\",\"2-grant-roles\",\"3-create-a-private-key\",\"in-resolveai\",\"4-add-a-gcp-connection\",\"5-add-resource-names\",\"6-authenticate-and-save\"]`,children:[_jsx(Heading,{level:`2`,id:`service-account-sa-key`,children:`Service Account (SA) Key`}),_jsx(_components.p,{children:`Paste a GCP Service Account (SA) private key JSON into ResolveAI. Simplest to set up.`}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisites:`}),` permissions in Google Cloud to create a service account, and permissions in ResolveAI to create an integration.`]})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-google-cloud`,children:`In Google Cloud`}),_jsx(Heading,{level:`4`,id:`1-create-a-service-account`,children:`1. Create a service account`}),_jsxs(_components.p,{children:[`Open the Service Account page: `,_jsx(_components.a,{href:`https://console.cloud.google.com/iam-admin/serviceaccounts/create`,children:`https://console.cloud.google.com/iam-admin/serviceaccounts/create`})]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`2-grant-roles`,children:`2. Grant roles`}),_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`roles/logging.viewer`}),` on the projects, folders, or organizations whose logs you want to expose — a single folder- or org-level grant covers all child projects. For metrics, alerts, and dashboards, also add `,_jsx(_components.code,{children:`roles/monitoring.viewer`}),` on the service account’s project.`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`3-create-a-private-key`,children:`3. Create a private key`}),_jsxs(_components.p,{children:[`Choose type `,_jsx(_components.strong,{children:`JSON`}),`, and copy it — you’ll paste it into ResolveAI below.`]}),_jsx(OptimizedImage,{src:`https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=f85abe44ef46336eddb7754aaa690953`,width:`70%`,alt:``,\"data-og-width\":`864`,\"data-og-height\":`692`,\"data-path\":`images/external/57ef974720ac.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=280\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=d1c19b873a14c2681474051a5e022a72 280w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=560\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=99668abcc039434b8864ac060ab76629 560w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=840\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=e91a2d4f660d032b008f1930d2b14600 840w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=1100\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=324de9feee2e0164c0f63f0a2c69f69b 1100w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=1650\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=8e033a06f50fc84aab33cb86040b8a4e 1650w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/57ef974720ac.png?w=2500\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=9c292de24c36bbd3555c485d9ac4a06a 2500w`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=28f9f16a7da4c19042b2bbec7a3c8024`,width:`70%`,alt:``,\"data-og-width\":`1266`,\"data-og-height\":`599`,\"data-path\":`images/external/1e83f2355d27.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=280\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=d46cf8833a2da13c6746e26e985de82b 280w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=560\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=29a4f304bc2bf3015657c8624076c9ba 560w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=840\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=e85fdd2a1044a7559fa79b9e7a27bbee 840w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=1100\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=b32378694152a604051f19fa3267114f 1100w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=1650\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=aa381c96eb406ff1f3db984caf8fffb9 1650w, https://mintcdn.com/resolveai-0e94a547/GuuijYwp3RfE7Xrj/images/external/1e83f2355d27.png?w=2500\u0026fit=max\u0026auto=format\u0026n=GuuijYwp3RfE7Xrj\u0026q=85\u0026s=e216a6eeba0ac90fe5f982f9e9d57acf 2500w`}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-resolveai`,children:`In ResolveAI`}),_jsx(Heading,{level:`4`,id:`4-add-a-gcp-connection`,children:`4. Add a GCP connection`}),_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://app0.resolve.ai/integrations`,children:`Integrations`}),` for your organization, click `,_jsx(_components.a,{href:`https://app0.resolve.ai/integrations/gcp/connect`,children:_jsx(_components.strong,{children:`GCP`})}),`, then `,_jsx(_components.strong,{children:`Add Connection`}),` at the top right. Give the integration a name (ex. `,_jsx(_components.code,{children:`GCP Prod`}),`) and list its environments (ex. `,_jsx(_components.code,{children:`production`}),` and `,_jsx(_components.code,{children:`staging`}),`).`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`5-add-resource-names`,children:`5. Add Resource Names`}),_jsxs(_components.p,{children:[`These are the log containers to search: `,_jsx(_components.code,{children:`projects/PROJECT_ID`}),`, `,_jsx(_components.code,{children:`folders/FOLDER_ID`}),`, `,_jsx(_components.code,{children:`organizations/ORG_ID`}),`, or a specific log bucket view. A single folder/org entry covers every log project underneath it, including projects created later (log search only — metrics, alerts, and dashboards use the connection’s single Project ID).`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`6-authenticate-and-save`,children:`6. Authenticate and save`}),_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Authentication`}),`, choose `,_jsx(_components.strong,{children:`Service Account Key`}),` and paste the whole private key JSON from step 3 into the `,_jsx(_components.em,{children:`Service Account Key JSON`}),` field. Click `,_jsx(_components.strong,{children:`Save`}),`, then verify the connection with `,_jsx(_components.strong,{children:`Check Health`}),`.`]})]}),_jsxs(Tab,{title:`Option 2: WIF (AWS)`,id:`option-2%3A-wif-aws`,\"data-child-heading-ids\":`[\"workload-identity-federation-aws-%E2%86%92-gcp\",\"in-google-cloud-2\",\"1-create-a-workload-identity-pool\",\"2-add-an-aws-provider-to-the-pool\",\"3-create-the-service-account-resolveai-will-impersonate\",\"4-allow-impersonation\",\"5-download-the-federation-config\",\"in-resolveai-2\",\"6-add-a-gcp-connection\",\"7-add-resource-names\",\"8-authenticate-and-save\"]`,children:[_jsx(Heading,{level:`2`,id:`workload-identity-federation-aws-→-gcp`,children:`Workload Identity Federation (AWS → GCP)`}),_jsx(_components.p,{children:`ResolveAI’s workload (running on AWS) authenticates to your GCP project directly using its AWS identity, so no long-lived private key is stored — nothing is on the ResolveAI side except the federation config JSON and your project ID. Recommended if your security posture discourages static service account keys.`}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisites:`}),` permissions in Google Cloud to create a Workload Identity Pool, and permissions in ResolveAI to create an integration.`]})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-google-cloud-2`,children:`In Google Cloud`}),_jsx(Heading,{level:`4`,id:`1-create-a-workload-identity-pool`,children:`1. Create a Workload Identity Pool`}),_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`IAM \u0026 Admin → Workload Identity Federation`}),` (`,_jsx(_components.a,{href:`https://console.cloud.google.com/iam-admin/workload-identity-pools`,children:`https://console.cloud.google.com/iam-admin/workload-identity-pools`}),`) and create a pool, or reuse an existing one.`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`2-add-an-aws-provider-to-the-pool`,children:`2. Add an AWS provider to the pool`}),_jsx(_components.p,{children:`Contact ResolveAI support to get the specific AWS account ID and IAM role ARN that the provider should trust — that’s the identity ResolveAI’s workload uses to authenticate.`}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`3-create-the-service-account-resolveai-will-impersonate`,children:`3. Create the service account ResolveAI will impersonate`}),_jsxs(_components.p,{children:[`Or choose an existing one. Grant it `,_jsx(_components.code,{children:`roles/logging.viewer`}),` on the projects, folders, or organizations whose logs you want to expose — a single folder- or org-level grant covers all child projects. For metrics, alerts, and dashboards, also grant `,_jsx(_components.code,{children:`roles/monitoring.viewer`}),` on your Project ID’s project.`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`4-allow-impersonation`,children:`4. Allow impersonation`}),_jsxs(_components.p,{children:[`Grant the Workload Identity Pool principal the `,_jsx(_components.code,{children:`roles/iam.workloadIdentityUser`}),` role on that service account, so the federated AWS identity is allowed to impersonate it.`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`5-download-the-federation-config`,children:`5. Download the federation config`}),_jsxs(_components.p,{children:[`From the pool’s provider page, click `,_jsx(_components.strong,{children:`Download config`}),` to get the federation credential JSON (it will have `,_jsx(_components.code,{children:`\"type\": \"external_account\"`}),`). Note your `,_jsx(_components.strong,{children:`GCP Project ID`}),` as well — you’ll need both below.`]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-resolveai-2`,children:`In ResolveAI`}),_jsx(Heading,{level:`4`,id:`6-add-a-gcp-connection`,children:`6. Add a GCP connection`}),_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://app0.resolve.ai/integrations`,children:`Integrations`}),` for your organization, click `,_jsx(_components.a,{href:`https://app0.resolve.ai/integrations/gcp/connect`,children:_jsx(_components.strong,{children:`GCP`})}),`, then `,_jsx(_components.strong,{children:`Add Connection`}),` at the top right. Give the integration a name (ex. `,_jsx(_components.code,{children:`GCP Prod`}),`) and list its environments (ex. `,_jsx(_components.code,{children:`production`}),` and `,_jsx(_components.code,{children:`staging`}),`).`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`7-add-resource-names`,children:`7. Add Resource Names`}),_jsxs(_components.p,{children:[`These are the log containers to search: `,_jsx(_components.code,{children:`projects/PROJECT_ID`}),`, `,_jsx(_components.code,{children:`folders/FOLDER_ID`}),`, `,_jsx(_components.code,{children:`organizations/ORG_ID`}),`, or a specific log bucket view. A single folder/org entry covers every log project underneath it, including projects created later (log search only — metrics, alerts, and dashboards use the connection’s single Project ID).`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`8-authenticate-and-save`,children:`8. Authenticate and save`}),_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Authentication`}),`, choose `,_jsx(_components.strong,{children:`Workload Identity Federation`}),`: paste the federation config JSON from step 5 into the `,_jsx(_components.em,{children:`Workload Identity Config JSON`}),` field, and enter your `,_jsx(_components.strong,{children:`Project ID`}),`. Click `,_jsx(_components.strong,{children:`Save`}),`, then verify the connection with `,_jsx(_components.strong,{children:`Check Health`}),`.`]})]}),_jsxs(Tab,{title:`Option 3: WIF (Satellite KSA)`,id:`option-3%3A-wif-satellite-ksa`,\"data-child-heading-ids\":`[\"workload-identity-federation-satellite-kubernetes-service-account\",\"in-your-kubernetes-cluster\",\"1-find-the-satellite%E2%80%99s-ksa-name-and-namespace\",\"2-get-the-cluster%E2%80%99s-oidc-issuer-url\",\"in-google-cloud-3\",\"3-create-a-workload-identity-pool-and-an-oidc-provider-for-the-cluster\",\"4-grant-the-satellite%E2%80%99s-federated-principal-a-role\",\"5-generate-the-credential-config-json\",\"in-your-satellite-helm-values\",\"6-mount-a-projected-ksa-token-into-the-satellite-pod-with-top-level-volumes-and-volumemounts\",\"7-add-the-integration\",\"8-deploy-and-verify\"]`,children:[_jsx(Heading,{level:`2`,id:`workload-identity-federation-satellite-kubernetes-service-account`,children:`Workload Identity Federation (Satellite Kubernetes Service Account)`}),_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/resolve-satellite`,children:`Resolve Satellite`}),` pod mints GCP tokens inside your Kubernetes cluster, authenticating as its own Kubernetes Service Account (KSA) via `,_jsx(_components.a,{href:`https://cloud.google.com/iam/docs/workload-identity-federation-with-kubernetes`,children:`Workload Identity Federation with Kubernetes`}),`.`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`No GCP service account key exists anywhere, no external identity is trusted in your GCP org, and no secret material ever leaves your cluster.`}),`\n`,_jsx(_components.li,{children:`Works with GKE (issuer URLs are publicly reachable, including for private clusters) and any other cluster whose OIDC issuer GCP can reach.`}),`\n`,_jsx(_components.li,{children:`Recommended if your security posture disallows both service account keys and federating third-party identities into your Workload Identity Pool.`}),`\n`,_jsx(_components.li,{children:`Only the credential-config-file method described below is supported; GKE metadata-server auto-discovery (plain ADC with no config JSON) is not.`}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisites:`}),` permissions in Google Cloud to create a Workload Identity Pool, plus a running Resolve Satellite in a Kubernetes cluster and access to its Helm values.`]})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-your-kubernetes-cluster`,children:`In your Kubernetes cluster`}),_jsx(Heading,{level:`4`,id:`1-find-the-satellite’s-ksa-name-and-namespace`,children:`1. Find the satellite’s KSA name and namespace`}),_jsx(_components.p,{children:`By default the Helm chart creates a service account named after the release:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` statefulset`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` SATELLITE_NAMESPACE`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -l`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` app.kubernetes.io/name=satellite`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -o`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` jsonpath='{.items[0].spec.template.spec.serviceAccountName}'`})]}),`\n`]})})}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`2-get-the-cluster’s-oidc-issuer-url`,children:`2. Get the cluster’s OIDC issuer URL`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --raw`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /.well-known/openid-configuration`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -r`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .issuer`})]}),`\n`]})})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-google-cloud-3`,children:`In Google Cloud`}),_jsx(Heading,{level:`4`,id:`3-create-a-workload-identity-pool-and-an-oidc-provider-for-the-cluster`,children:`3. Create a Workload Identity Pool and an OIDC provider for the cluster`}),_jsxs(_components.p,{children:[`The pool lives in your active gcloud project; that project’s number is `,_jsx(_components.code,{children:`PROJECT_NUMBER`}),` in the steps below.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` iam`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` workload-identity-pools`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` resolve-satellite-pool`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --location=global`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` iam`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` workload-identity-pools`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` providers`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-oidc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` resolve-satellite-provider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --location=global`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --workload-identity-pool=resolve-satellite-pool`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --issuer-uri=ISSUER_URL_FROM_STEP_2`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --attribute-mapping=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"google.subject=assertion.sub\"`})]}),`\n`]})})}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`4-grant-the-satellite’s-federated-principal-a-role`,children:`4. Grant the satellite’s federated principal a role`}),_jsxs(_components.p,{children:[`Grant `,_jsx(_components.code,{children:`roles/logging.viewer`}),` on the projects, folders, or organizations whose logs you want to expose. A single folder- or org-level grant covers all child projects, including projects created later. For metrics, alerts, and dashboards, also grant `,_jsx(_components.code,{children:`roles/monitoring.viewer`}),` on the project you’ll set as `,_jsx(_components.code,{children:`projectId`}),` in step 7. The principal is:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/subject/system:serviceaccount:SATELLITE_NAMESPACE:SATELLITE_KSA_NAME`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`For example, for a folder-level grant:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` resource-manager`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` folders`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add-iam-policy-binding`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` YOUR_FOLDER_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --role=roles/logging.viewer`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --member=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/subject/system:serviceaccount:SATELLITE_NAMESPACE:SATELLITE_KSA_NAME\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`(Alternative: grant the role to a GCP service account instead, and add `,_jsx(_components.code,{children:`--service-account=THAT_GSA_EMAIL`}),` in step 5 so the federated identity impersonates it.)`]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`5-generate-the-credential-config-json`,children:`5. Generate the credential config JSON`}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--credential-source-file`}),` must match the token path you’ll mount in step 6:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` iam`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` workload-identity-pools`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-cred-config`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/providers/resolve-satellite-provider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --credential-source-file=/var/run/secrets/resolve-gcp-wif/token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --credential-source-type=text`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --output-file=credential-config.json`})}),`\n`]})})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`3`,id:`in-your-satellite-helm-values`,children:`In your satellite Helm values`}),_jsxs(Heading,{level:`4`,id:`6-mount-a-projected-ksa-token-into-the-satellite-pod-with-top-level-volumes-and-volumemounts`,children:[`6. Mount a projected KSA token into the satellite pod with top-level `,_jsx(_components.code,{children:`volumes`}),` and `,_jsx(_components.code,{children:`volumeMounts`})]}),_jsxs(_components.p,{children:[`The token `,_jsx(_components.code,{children:`audience`}),` must be the full resource name of the provider from step 3, prefixed with `,_jsx(_components.code,{children:`https://iam.googleapis.com/`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`volumes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`gcp-wif-token`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` projected`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` sources`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`serviceAccountToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`token`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` expirationSeconds`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3600`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` audience`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/providers/resolve-satellite-provider`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`volumeMounts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`gcp-wif-token`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` mountPath`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/var/run/secrets/resolve-gcp-wif`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` readOnly`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`]})})}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`7-add-the-integration`,children:`7. Add the integration`}),_jsxs(_components.p,{children:[`Embed the contents of `,_jsx(_components.code,{children:`credential-config.json`}),` from step 5 in an `,_jsx(_components.code,{children:`integrations`}),` block. Unlike a service account key, this file contains `,_jsx(_components.strong,{children:`no secret material`}),` (only pool/provider identifiers and the token file path), so it is safe to place in Helm values:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`20`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`integrations`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` gcp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`gcp`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` create`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` connection`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` projectId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`YOUR_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # project used for metrics, alerts, and dashboards API calls`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` resourceNames`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# log containers to search. A folder/org entry covers every log project underneath it (log search only)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`folders/YOUR_FOLDER_ID`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # or projects/..., organizations/...`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Contents of credential-config.json from step 5.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Contains no secret material. Must be a string — keep the | block scalar.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` workloadIdentityConfigJson`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"type\": \"external_account\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"audience\": \"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/resolve-satellite-pool/providers/resolve-satellite-provider\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"subject_token_type\": \"urn:ietf:params:oauth:token-type:jwt\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"token_url\": \"https://sts.googleapis.com/v1/token\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"credential_source\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"file\": \"/var/run/secrets/resolve-gcp-wif/token\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`]})})}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`workloadIdentityConfigJson`}),` must reach the satellite `,_jsx(_components.strong,{children:`as a string`}),` — use the `,_jsx(_components.code,{children:`|`}),` block scalar exactly as shown.`]}),_jsx(_components.p,{children:`Do not deliver it as a raw JSON file inside a Kubernetes Secret: the satellite parses mounted secret files as YAML, a bare JSON file becomes an object instead of a string, and GCP authentication is silently skipped (all calls fail with 401).`})]}),_jsx(`br`,{}),_jsx(Heading,{level:`4`,id:`8-deploy-and-verify`,children:`8. Deploy and verify`}),_jsxs(_components.p,{children:[`The changes from Steps 6 and 7 go in the same values file — apply them together with a single `,_jsx(_components.code,{children:`helm upgrade`}),`. The connection appears in the ResolveAI Integrations list automatically once the satellite registers it; verify it with `,_jsx(_components.strong,{children:`Check Health`}),` on the GCP integration page.`]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"GCP","description":null,"href":"/gcp"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Service Account (SA) Key","slug":"service-account-sa-key","depth":2,"children":[{"title":"In Google Cloud","slug":"in-google-cloud","depth":3,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"1. Create a service account","slug":"1-create-a-service-account","depth":4,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"2. Grant roles","slug":"2-grant-roles","depth":4,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"3. Create a private key","slug":"3-create-a-private-key","depth":4,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"In ResolveAI","slug":"in-resolveai","depth":3,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"4. Add a GCP connection","slug":"4-add-a-gcp-connection","depth":4,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"5. Add Resource Names","slug":"5-add-resource-names","depth":4,"children":[],"tabId":"option-1%3A-sa-key"},{"title":"6. Authenticate and save","slug":"6-authenticate-and-save","depth":4,"children":[],"tabId":"option-1%3A-sa-key"}],"tabId":"option-1%3A-sa-key"},{"title":"Workload Identity Federation (AWS → GCP)","slug":"workload-identity-federation-aws-→-gcp","depth":2,"children":[{"title":"In Google Cloud","slug":"in-google-cloud-2","depth":3,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"1. Create a Workload Identity Pool","slug":"1-create-a-workload-identity-pool","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"2. Add an AWS provider to the pool","slug":"2-add-an-aws-provider-to-the-pool","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"3. Create the service account ResolveAI will impersonate","slug":"3-create-the-service-account-resolveai-will-impersonate","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"4. Allow impersonation","slug":"4-allow-impersonation","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"5. Download the federation config","slug":"5-download-the-federation-config","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"In ResolveAI","slug":"in-resolveai-2","depth":3,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"6. Add a GCP connection","slug":"6-add-a-gcp-connection","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"7. Add Resource Names","slug":"7-add-resource-names","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"},{"title":"8. Authenticate and save","slug":"8-authenticate-and-save","depth":4,"children":[],"tabId":"option-2%3A-wif-aws"}],"tabId":"option-2%3A-wif-aws"},{"title":"Workload Identity Federation (Satellite Kubernetes Service Account)","slug":"workload-identity-federation-satellite-kubernetes-service-account","depth":2,"children":[{"title":"In your Kubernetes cluster","slug":"in-your-kubernetes-cluster","depth":3,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"1. Find the satellite’s KSA name and namespace","slug":"1-find-the-satellite’s-ksa-name-and-namespace","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"2. Get the cluster’s OIDC issuer URL","slug":"2-get-the-cluster’s-oidc-issuer-url","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"In Google Cloud","slug":"in-google-cloud-3","depth":3,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"3. Create a Workload Identity Pool and an OIDC provider for the cluster","slug":"3-create-a-workload-identity-pool-and-an-oidc-provider-for-the-cluster","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"4. Grant the satellite’s federated principal a role","slug":"4-grant-the-satellite’s-federated-principal-a-role","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"5. Generate the credential config JSON","slug":"5-generate-the-credential-config-json","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"In your satellite Helm values","slug":"in-your-satellite-helm-values","depth":3,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"6. Mount a projected KSA token into the satellite pod with top-level volumes and volumeMounts","slug":"6-mount-a-projected-ksa-token-into-the-satellite-pod-with-top-level-volumes-and-volumemounts","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"7. Add the integration","slug":"7-add-the-integration","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"},{"title":"8. Deploy and verify","slug":"8-deploy-and-verify","depth":4,"children":[],"tabId":"option-3%3A-wif-satellite-ksa"}],"tabId":"option-3%3A-wif-satellite-ksa"}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/resolveai-0e94a547/cf934b323de78c7e/logo-newtab.js"],"subdomain":"resolveai-0e94a547","siteName":"ResolveAI","title":"GCP - ResolveAI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T00:24:37.060Z","originalFileLocation":"gcp.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"ResolveAI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"GCP - ResolveAI\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ResolveAI Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.resolve.ai/gcp\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.resolve.ai/images/OG-Fallback.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"GCP - ResolveAI\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.resolve.ai/images/OG-Fallback.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/resolveai-0e94a547/ivZcX1e9pUvVwb5q/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ResolveAI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#657220\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.resolve.ai/gcp\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/gcp.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.resolve.ai/#organization\",\"name\":\"ResolveAI\",\"url\":\"https://docs.resolve.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/resolveai-0e94a547/U6tAmGL475_2-tiG/logo/light.png?fit=max\u0026auto=format\u0026n=U6tAmGL475_2-tiG\u0026q=85\u0026s=3a6b69f8a5fe52b26df9c5ca14502a00\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.resolve.ai#website\",\"name\":\"ResolveAI\",\"url\":\"https://docs.resolve.ai\",\"publisher\":{\"@id\":\"https://docs.resolve.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.resolve.ai/gcp#webpage\",\"url\":\"https://docs.resolve.ai/gcp\",\"name\":\"GCP\",\"dateModified\":\"2026-10-30T00:24:37.060Z\",\"isPartOf\":{\"@id\":\"https://docs.resolve.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.resolve.ai/gcp#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.resolve.ai/gcp#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Setup \u0026 Integrations\",\"item\":\"https://docs.resolve.ai/setup-and-integrations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrations\",\"item\":\"https://docs.resolve.ai/integrations\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GCP\",\"item\":\"https://docs.resolve.ai/gcp\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.resolve.ai/gcp#article\",\"headline\":\"GCP\",\"name\":\"GCP\",\"url\":\"https://docs.resolve.ai/gcp\",\"mainEntityOfPage\":{\"@id\":\"https://docs.resolve.ai/gcp#webpage\"},\"image\":\"https://docs.resolve.ai/images/OG-Fallback.png\",\"dateModified\":\"2026-10-30T00:24:37.060Z\",\"publisher\":{\"@id\":\"https://docs.resolve.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.resolve.ai#website\"}}]}\u003c/script>","siteName":"ResolveAI","nav":{"global":null,"pages":[{"group":"Get Started","root":{"title":"Get Started","href":"/get-started"},"expanded":true,"pages":[{"title":"About ResolveAI","href":"/about-resolve-ai"},{"group":"Guided Tour","root":{"title":"Guided Tour","href":"/guided-tour"},"pages":[{"title":"Resolve Overview","href":"/resolve-overview"},{"title":"Connect an Integration","href":"/connect-an-integration"},{"title":"Team Knowledge","href":"/D5xH-team-knowledge"},{"title":"Auto Investigations","href":"/auto-investigations"},{"title":"Tuning Accuracy","href":"/tuning-accuracy"}]}]},{"group":"Features","root":{"title":"Features","href":"/features"},"expanded":true,"pages":[{"title":"Alert Investigation Modes","href":"/alert-investigation-modes"},{"title":"Chats","href":"/chats"},{"title":"Incident Channels","href":"/incident-channels"},{"title":"Mitigation Actions","href":"/mitigation-actions"},{"title":"Tasks","href":"/tasks"}]},{"group":"Setup \u0026 Integrations","root":{"title":"Setup \u0026 Integrations","href":"/setup-and-integrations"},"expanded":true,"pages":[{"group":"Integrations","root":{"title":"Integrations","href":"/integrations"},"pages":[{"title":"Atlassian","href":"/atlassian"},{"group":"AWS","root":{"title":"AWS","href":"/aws"},"pages":[{"title":"AWS Athena","href":"/aws-athena"}]},{"title":"Azure","href":"/azure"},{"title":"Catchpoint","href":"/catchpoint"},{"title":"Chronosphere","href":"/chronosphere"},{"title":"ClickHouse","href":"/clickhouse"},{"title":"Datadog","href":"/datadog"},{"title":"Dynatrace","href":"/dynatrace"},{"group":"Elasticsearch","root":{"title":"Elasticsearch","href":"/elasticsearch"},"pages":[{"title":"Elasticsearch On-Prem","sidebarTitle":"Elasticsearch On-prem","description":null,"href":"/elasticsearch-on-prem"}]},{"title":"GCP","href":"/gcp"},{"group":"Git","root":{"title":"Git","description":null,"href":"/git"},"pages":[{"title":"Git on Cloud","href":"/git-on-cloud"},{"title":"Git on Satellite","href":"/git-on-satellite"},{"title":"App for GitHub","href":"/app-for-github"}]},{"title":"Glean","href":"/glean"},{"group":"Grafana","root":{"title":"Grafana","href":"/grafana"},"pages":[{"title":"Grafana On-Prem","sidebarTitle":"Grafana On-prem","href":"/grafana-on-prem"},{"title":"AlertManager Webhooks","sidebarTitle":"Alertmanager Webhooks","href":"/alertmanager-webhooks"}]},{"title":"Honeycomb","href":"/honeycomb"},{"title":"Kloudfuse","href":"/kloudfuse"},{"title":"New Relic","href":"/new-relic"},{"title":"OpenSearch","href":"/opensearch"},{"title":"PagerDuty","href":"/pagerduty"},{"title":"Scalyr","href":"/scalyr"},{"title":"Sentry","href":"/sentry"},{"title":"ServiceNow","href":"/servicenow"},{"title":"Snowflake","href":"/snowflake"},{"group":"Splunk","root":{"title":"Splunk","href":"/splunk"},"pages":[{"title":"Splunk Enterprise","href":"/splunk-enterprise"},{"title":"Splunk Observability","href":"/splunk-observability"},{"title":"Splunk On-Call","href":"/splunk-on-call"}]},{"title":"Sumologic","href":"/sumologic"},{"title":"VictoriaLogs","href":"/victorialogs"}]},{"title":"App for Slack","href":"/app-for-slack"},{"group":"App for MS Teams","root":{"title":"App for MS Teams","href":"/app-for-ms-teams"},"pages":[{"title":"App Permissions","href":"/app-permissions"}]},{"group":"Resolve Satellite","root":{"title":"Resolve Satellite","href":"/resolve-satellite"},"pages":[{"title":"Satellite on ECS","href":"/satellite-on-ecs"},{"title":"DNS Tap","href":"/dns-tap"},{"title":"Infer Applications","href":"/infer-applications"},{"title":"Secret Management","href":"/secret-management"},{"title":"Reference Schema","href":"/reference-schema"}]},{"title":"MCP","href":"/mcp-integrations"},{"group":"Workflows \u0026 Extensibility","root":{"title":"Workflows \u0026 Extensibility","href":"/workflows-and-extensibility"},"pages":[{"title":"Alert Webhooks","href":"/alert-webhooks"},{"title":"Temporal","href":"/temporal"}]}]},{"group":"Team and Knowledge","root":{"title":"Team and Knowledge","href":"/team-knowledge"},"expanded":true,"pages":[{"title":"Team Membership","href":"/team-group-mapping"},{"title":"Knowledge Setup Guide","sidebarTitle":"Set Up Team Knowledge","href":"/knowledge-setup-guide"},{"title":"Skills","href":"/skills"},{"title":"Workplace Collaboration Tools for Team Knowledge","sidebarTitle":"Workplace Collaboration Tools","href":"/workplace-collaboration-tools-for-team-knowledge"}]},{"group":"Developers","root":{"title":"Developers","href":"/developers"},"expanded":true,"pages":[{"group":"AI Assistant Plugins","root":{"title":"AI Assistant Plugins","href":"/ai-assistant-plugins"},"pages":[{"title":"Admin Plugin","href":"/admin-plugin"}]},{"group":"Resolve MCP Server","root":{"title":"Resolve MCP Server","href":"/resolve-mcp-server"},"pages":[{"title":"Migrating from the MCP Beta","href":"/migrating-from-the-mcp-beta"}]},{"title":"Resolve REST API","href":"/resolve-rest-api"},{"title":"Teams API","href":"/teams-api"}]},{"group":"Security \u0026 Administration","root":{"title":"Security \u0026 Administration","sidebarTitle":"Security Overview","href":"/security-and-administration"},"expanded":true,"pages":[{"group":"Single Sign-On (SSO)","root":{"title":"Single Sign On (SSO)","sidebarTitle":"Single Sign-On (SSO)","href":"/single-sign-on-sso"},"pages":[{"title":"Google SSO","href":"/google-sso"},{"title":"Okta","href":"/okta"},{"title":"Azure AD","href":"/azure-ad"}]},{"group":"Directory Sync (SCIM)","root":{"title":"Directory Sync (SCIM)","href":"/directory-sync-scim"},"pages":[{"title":"Okta SCIM Provisioning","href":"/okta-scim"},{"title":"Microsoft Entra ID SCIM Provisioning","href":"/entra-scim"},{"title":"Sign-in enforcement","href":"/scim-sign-in-enforcement"}]},{"title":"Sensitive Data Redaction","href":"/sensitive-data-redaction"},{"title":"Audit Logs","sidebarTitle":"Audit Logs API","href":"/audit-logs"},{"title":"Limits","href":"/limits"},{"title":"Billing \u0026 Credit Controls","sidebarTitle":"Billing \u0026 Credit Controls","href":"/billing-and-credit-controls"}]}]},"basePath":"","title":"GCP - ResolveAI","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}