A connection represents LocalOps’s access to the target cloud account. All operations performed by LocalOps on a target
cloud account, are done through its corresponding connection.
A new Google Cloud project to connect. We recommend creating a brand new project for LocalOps to keep it isolated
from your other resources.
You’ll need Owner access to the target Google Cloud project. If you are connecting your client/customer’s Google
Cloud project, the point of contact in your customer’s end must have Owner access to the project.
Sign in to LocalOps, click on “Connections” from the navigation pane on the left side and click on
“Add a new connection”.
2
Pick Google Cloud
Pick Google Cloud as the cloud provider, give the connection a name and click “Connect GCP account”.
3
A new Cloud Shell window opens
A new Google Cloud Shell window opens in a separate browser tab. When you open the Cloud Shell tab for the first
time, a few popups will show up. Just authorize and accept all the popups to continue to Cloud Shell.
Trust the repo and click Confirm
Click Authorize to let Cloud Shell make Google Cloud API calls
4
Run the setup command
Go back to the previous LocalOps tab and follow the instructions shown to copy and paste the setup command into the
Cloud Shell.Here is a sample of the setup command you will see in the LocalOps console. The values shown below are placeholders —
use the exact command displayed in your LocalOps console, as it contains the credentials specific to your connection.
When the command asks you to pick a Google Cloud project to connect, pick one and proceed.
6
Terraform provisions access
The command runs a Terraform script that creates a new service account with the Owner role. This is the service
account LocalOps uses to access the project and manage resources henceforth.
Once the setup command completes, come back to the LocalOps Connections page to see the connection becoming Active.
When you open the Cloud Shell tab for the first time, a few popups will appear (trust the repo, authorize Cloud
Shell). Just authorize and accept all of them to continue.
To connect to the target Google Cloud project, the setup command runs a Terraform script inside Google Cloud Shell that
creates a new service account with the Owner role. LocalOps uses this service account to access the project and manage
resources on your behalf whenever you trigger an operation (say a new deployment) from the LocalOps console.The Terraform script that runs in your Cloud Shell to set up the connection is open source and available here:
github.com/localopsco/gcp-connect.
Your connection works through a keyless OIDC protocol. LocalOps does not store or keep any permanent credentials at
its end to access your Google Cloud project.Instead of long-lived keys, access is authenticated on demand through OIDC. Whenever LocalOps needs to access your
project, it obtains short-lived credentials just for that operation — there are no static keys sitting around that could
be leaked or misused. This makes the connection safe and secure by design.
If you have any questions during this process, chat with us from the chat bar on the bottom-right side, or write to us
at support@localops.co.
Was this page helpful?
⌘I
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"LocalOps Documentation","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/localops/JRMe5AvRiyD5FHvi/logo/light.svg?fit=max\u0026auto=format\u0026n=JRMe5AvRiyD5FHvi\u0026q=85\u0026s=19102ad522bdd446edbbce90d070c548","dark":"https://mintcdn.com/localops/JRMe5AvRiyD5FHvi/logo/dark.svg?fit=max\u0026auto=format\u0026n=JRMe5AvRiyD5FHvi\u0026q=85\u0026s=25626943a6ff4d7975611041f009cc05"},"favicon":"https://mintcdn.com/localops/JRMe5AvRiyD5FHvi/favicon.svg?fit=max\u0026auto=format\u0026n=JRMe5AvRiyD5FHvi\u0026q=85\u0026s=7a62c6f75b53d403484ee016109a09d2","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript","go"],"prefill":true}},"navbar":{"links":[{"href":"https://console.localops.co","label":"Console"},{"href":"https://go.localops.co/tour","label":"Schedule demo"}],"primary":{"type":"button","label":"Get started for free","href":"https://console.localops.co/signup"}},"footer":{"socials":{"x":"https://x.com/localopsco","github":"https://github.com/localopsco","linkedin":"https://linkedin.com/company/localops-inc"}},"integrations":{"gtm":{"tagId":"GTM-PWH8VTN6"},"posthog":{"apiKey":"phc_T54pQDyo3sFjCz7a3fm2XCCoDAt7iA0l2KM9qBKauF3","apiHost":"https://watermelon.localops.co"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"newspaper","href":"/changelogs/2026"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"localops","hasAudioNarration":false,"actualSubdomain":"localops","customDomains":["docs.localops.co"],"gitSource":{"type":"github","owner":"localopsco","repo":"developer-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ada1a60ea294acc11380c70","collectionId":"850a0c11-b0e1-4fa2-9307-d65181f7549b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ada1a60ea294acc11380c70"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6adb48e6dc817acd47c1a746","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Documentation","count":107},{"language":"default","tag":"Services","count":30},{"language":"default","tag":"API Reference","count":25},{"language":"default","tag":"Endpoints","count":22},{"language":"default","tag":"Bring your helm charts (soon)","count":15},{"language":"default","tag":"Environments","count":15},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"AWS services","count":8},{"language":"default","tag":"Team","count":7},{"language":"default","tag":"Instrument services","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"accounts/gcp","slug":"/accounts/gcp","pageMetadata":{"title":"Google Cloud Platform (GCP)","description":"Connect your Google Cloud account with LocalOps","href":"/accounts/gcp"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect your Google Cloud account with LocalOps\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`To connect your `,_jsx(_components.strong,{children:`Google Cloud Platform (GCP)`}),` account with your LocalOps account, you must create a Connection in\nLocalOps.`]}),`\n`,_jsx(Heading,{level:`2`,id:`connections`,children:`Connections`}),`\n`,_jsx(_components.p,{children:`A connection represents LocalOps’s access to the target cloud account. All operations performed by LocalOps on a target\ncloud account, are done through its corresponding connection.`}),`\n`,_jsx(Heading,{level:`2`,id:`pre-requisites`,children:`Pre-requisites`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`A Google Cloud account.`}),`\n`,_jsx(_components.li,{children:`A new Google Cloud project to connect. We recommend creating a brand new project for LocalOps to keep it isolated\nfrom your other resources.`}),`\n`,_jsxs(_components.li,{children:[`You’ll need `,_jsx(_components.code,{children:`Owner`}),` access to the target Google Cloud project. If you are connecting your client/customer’s Google\nCloud project, the point of contact in your customer’s end must have `,_jsx(_components.code,{children:`Owner`}),` access to the project.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-new-connection`,children:`Create a new connection`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add a new connection`,children:_jsxs(_components.p,{children:[`Sign in to LocalOps, click on `,_jsx(_components.strong,{children:`“Connections”`}),` from the navigation pane on the left side and click on\n`,_jsx(_components.strong,{children:`“Add a new connection”`}),`.`]})}),_jsx(Step,{title:`Pick Google Cloud`,children:_jsxs(_components.p,{children:[`Pick `,_jsx(_components.strong,{children:`Google Cloud`}),` as the cloud provider, give the connection a name and click `,_jsx(_components.strong,{children:`“Connect GCP account”`}),`.`]})}),_jsxs(Step,{title:`A new Cloud Shell window opens`,children:[_jsxs(_components.p,{children:[`A new Google Cloud Shell window opens in a separate browser tab. When you open the Cloud Shell tab for the first\ntime, a few popups will show up. `,_jsx(_components.strong,{children:`Just authorize and accept all the popups`}),` to continue to Cloud Shell.`]}),_jsx(Frame,{caption:`Trust the repo and click Confirm`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=90fc8764c15fa160b1115395b0add186`,alt:`Open in Cloud Shell — check Trust repo and click Confirm`,\"data-og-width\":`1454`,width:`1454`,\"data-og-height\":`864`,height:`864`,\"data-path\":`images/gcp-cloud-shell-trust-repo.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=280\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=55f85484c6b5adacc0dcaef9fa9dc568 280w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=560\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=1ecc50f9d105f362a954e983aed1abc6 560w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=840\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=a37866a774ad6faa90f8ede3b5ad615a 840w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=1100\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=0da27fa1f17dab2e03df49256206ff3c 1100w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=1650\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=122bcb762dc0a8bfbbe28090d86d5eb3 1650w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-cloud-shell-trust-repo.png?w=2500\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=de6ab9f3085b9c207376f7370bc88cc6 2500w`})}),_jsx(Frame,{caption:`Click Authorize to let Cloud Shell make Google Cloud API calls`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=34b343a8bace89d1ed65666dd47144f6`,alt:`Authorize Cloud Shell dialog`,\"data-og-width\":`1546`,width:`1546`,\"data-og-height\":`1350`,height:`1350`,\"data-path\":`images/gcp-authorize-cloud-shell.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=280\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=c17c3e2ffabb1ca890c331f3efa1b2ba 280w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=560\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=2643ba6b5ca12f8d467c5525270328ca 560w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=840\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=867aea53474312a36aef9dff219121ed 840w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=1100\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=baeef9a524b486ae8acbba994eebc0b5 1100w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=1650\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=2488deb77ace827034d8b44a5e1076a4 1650w, https://mintcdn.com/localops/cKuh7SSJ4WHCOy0q/images/gcp-authorize-cloud-shell.png?w=2500\u0026fit=max\u0026auto=format\u0026n=cKuh7SSJ4WHCOy0q\u0026q=85\u0026s=55d47417da9de3e2aab1927ad0d766da 2500w`})})]}),_jsxs(Step,{title:`Run the setup command`,children:[_jsx(_components.p,{children:`Go back to the previous LocalOps tab and follow the instructions shown to copy and paste the setup command into the\nCloud Shell.`}),_jsx(_components.p,{children:`Here is a sample of the setup command you will see in the LocalOps console. The values shown below are placeholders —\nuse the exact command displayed in your LocalOps console, as it contains the credentials specific to your connection.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,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:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` OPS_API_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://console.localops.co\"`}),_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\":`#9CDCFE`},children:` OPS_CONNECTION_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"xxxxxxxxxxxxxxxxxxxxx\"`}),_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\":`#9CDCFE`},children:` OPS_VERIFICATION_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./setup.sh`})}),`\n`]})})})]}),_jsx(Step,{title:`Pick a Google Cloud project`,children:_jsx(_components.p,{children:`When the command asks you to pick a Google Cloud project to connect, pick one and proceed.`})}),_jsx(Step,{title:`Terraform provisions access`,children:_jsxs(_components.p,{children:[`The command runs a Terraform script that creates a new service account with the `,_jsx(_components.code,{children:`Owner`}),` role. This is the service\naccount LocalOps uses to access the project and manage resources henceforth.`]})})]}),`\n`,_jsx(_components.p,{children:`Once the setup command completes, come back to the LocalOps Connections page to see the connection becoming Active.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`When you open the Cloud Shell tab for the first time, a few popups will appear (trust the repo, authorize Cloud\nShell). Just authorize and accept all of them to continue.`})}),`\n`,_jsx(Heading,{level:`2`,id:`how-does-this-access-work`,children:`How does this access work?`}),`\n`,_jsxs(_components.p,{children:[`To connect to the target Google Cloud project, the setup command runs a Terraform script inside Google Cloud Shell that\ncreates a new service account with the `,_jsx(_components.code,{children:`Owner`}),` role. LocalOps uses this service account to access the project and manage\nresources on your behalf whenever you trigger an operation (say a new deployment) from the LocalOps console.`]}),`\n`,_jsxs(_components.p,{children:[`The Terraform script that runs in your Cloud Shell to set up the connection is open source and available here:\n`,_jsx(_components.a,{href:`https://github.com/localopsco/gcp-connect/`,children:`github.com/localopsco/gcp-connect`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`safe-and-secure`,children:`Safe and secure`}),`\n`,_jsxs(_components.p,{children:[`Your connection works through a `,_jsx(_components.em,{children:`keyless OIDC protocol`}),`. LocalOps does not store or keep any permanent credentials at\nits end to access your Google Cloud project.`]}),`\n`,_jsx(_components.p,{children:`Instead of long-lived keys, access is authenticated on demand through OIDC. Whenever LocalOps needs to access your\nproject, it obtains short-lived credentials just for that operation — there are no static keys sitting around that could\nbe leaked or misused. This makes the connection safe and secure by design.`}),`\n`,_jsx(Heading,{level:`2`,id:`need-help`,children:`Need help?`}),`\n`,_jsxs(_components.p,{children:[`If you have any questions during this process, chat with us from the chat bar on the bottom-right side, or write to us\nat `,_jsx(_components.a,{href:`mailto:support@localops.co`,children:`support@localops.co`}),`.`]})]})}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":"Google Cloud Platform (GCP)","description":"Connect your Google Cloud account with LocalOps","href":"/accounts/gcp"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Connections","slug":"connections","depth":2,"children":[]},{"title":"Pre-requisites","slug":"pre-requisites","depth":2,"children":[]},{"title":"Create a new connection","slug":"create-a-new-connection","depth":2,"children":[]},{"title":"How does this access work?","slug":"how-does-this-access-work","depth":2,"children":[]},{"title":"Safe and secure","slug":"safe-and-secure","depth":2,"children":[]},{"title":"Need help?","slug":"need-help","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/localops/406290af916b5fc4/crisp-widget.js"],"subdomain":"localops","siteName":"LocalOps Documentation","title":"Google Cloud Platform (GCP) - LocalOps Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-03T16:48:30.147Z","originalFileLocation":"accounts/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=\"system\"}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=\"description\" content=\"Connect your Google Cloud account with LocalOps\">\u003cmeta data-mint-head name=\"application-name\" content=\"LocalOps Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_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/localops/pHwHvLNeB34v2aZJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Google Cloud Platform (GCP) - LocalOps Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect your Google Cloud account with LocalOps\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LocalOps Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.localops.co/accounts/gcp\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://localops.mintlify.app/_mintlify/api/og/v2?division=Cloud+accounts\u0026amp;title=Google+Cloud+Platform+%28GCP%29\u0026amp;description=Connect+your+Google+Cloud+account+with+LocalOps\u0026amp;theme=19ffd466702f0c7f1a9fe584\u0026amp;signature=64d7586a6c3ae486ee4cf362c206912c2ebeb5610fd3a7e73aee4e87d316598c\">\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=\"Google Cloud Platform (GCP) - LocalOps Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect your Google Cloud account with LocalOps\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://localops.mintlify.app/_mintlify/api/og/v2?division=Cloud+accounts\u0026amp;title=Google+Cloud+Platform+%28GCP%29\u0026amp;description=Connect+your+Google+Cloud+account+with+LocalOps\u0026amp;theme=19ffd466702f0c7f1a9fe584\u0026amp;signature=64d7586a6c3ae486ee4cf362c206912c2ebeb5610fd3a7e73aee4e87d316598c\">\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/localops/pHwHvLNeB34v2aZJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LocalOps Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.localops.co/accounts/gcp\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/accounts/gcp.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.localops.co/#organization\",\"name\":\"LocalOps Documentation\",\"url\":\"https://docs.localops.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/localops/JRMe5AvRiyD5FHvi/logo/light.svg?fit=max\u0026auto=format\u0026n=JRMe5AvRiyD5FHvi\u0026q=85\u0026s=19102ad522bdd446edbbce90d070c548\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.localops.co#website\",\"name\":\"LocalOps Documentation\",\"url\":\"https://docs.localops.co\",\"publisher\":{\"@id\":\"https://docs.localops.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.localops.co/accounts/gcp#webpage\",\"url\":\"https://docs.localops.co/accounts/gcp\",\"name\":\"Google Cloud Platform (GCP)\",\"description\":\"Connect your Google Cloud account with LocalOps\",\"dateModified\":\"2026-07-03T16:48:30.147Z\",\"isPartOf\":{\"@id\":\"https://docs.localops.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.localops.co/accounts/gcp#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.localops.co/accounts/gcp#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connections\",\"item\":\"https://docs.localops.co/accounts/aws\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloud accounts\",\"item\":\"https://docs.localops.co/accounts/aws\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Google Cloud Platform (GCP)\",\"item\":\"https://docs.localops.co/accounts/gcp\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.localops.co/accounts/gcp#article\",\"headline\":\"Google Cloud Platform (GCP)\",\"name\":\"Google Cloud Platform (GCP)\",\"description\":\"Connect your Google Cloud account with LocalOps\",\"url\":\"https://docs.localops.co/accounts/gcp\",\"mainEntityOfPage\":{\"@id\":\"https://docs.localops.co/accounts/gcp#webpage\"},\"dateModified\":\"2026-07-03T16:48:30.147Z\",\"publisher\":{\"@id\":\"https://docs.localops.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.localops.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LocalOps Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LocalOps Documentation","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"newspaper","href":"/changelogs/2026"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Start here","icon":"rocket","pages":[{"title":"First steps","href":""},{"title":"How it works","href":"/howitworks"},{"title":"Support","href":"/support"},{"title":"Compatibility","href":"/compatibility"},{"title":"Shared responsibilities","href":"/environment/shared-responsibilities"}]},{"group":"Usecases","icon":"lightbulb","pages":[{"title":"SaaS environments","href":"/use-cases/public-saas"},{"title":"Single tenant deployments","href":"/use-cases/dedicated-infrastructure"},{"title":"BYOC enterprise delivery","href":"/use-cases/byoc"},{"title":"Enable self hosting for enterprise customers","href":"/use-cases/self-hosted"},{"title":"Preview pull requests","href":"/use-cases/ephemeral"},{"title":"Environment for each developer","href":"/use-cases/environment-per-developer"}]},{"group":"Migrate to AWS","icon":"arrow-right-arrow-left","pages":[{"title":"Migrate from Heroku","href":"/migrate-to-aws/from-heroku"},{"title":"Migrate from Render","href":"/migrate-to-aws/from-render"},{"title":"Migrate from Vercel","href":"/migrate-to-aws/from-vercel"},{"title":"Migrate from Fly.io","href":"/migrate-to-aws/from-fly"}]},{"group":"Guides","icon":"book","pages":[{"title":"Node/ExpressJS","href":"/guides/languages/node"},{"title":"Python/Django","href":"/guides/languages/python"},{"title":"Go/gin","href":"/guides/languages/go"},{"title":".NET Framework/ASP.NET","href":"/guides/languages/dotnet"},{"title":"Elixir/Phoenix","href":"/guides/languages/elixir"},{"title":"Next.js","href":"/guides/spa/nextjs"},{"title":"ReactJS","href":"/guides/spa/react"},{"title":"Angular","href":"/guides/spa/angular"},{"title":"Ember","href":"/guides/spa/ember"},{"title":"VueJS","href":"/guides/spa/vue"}]},{"group":"CLI","icon":"terminal","pages":[{"title":"Install on Windows","href":"/cli/install-windows"},{"title":"Install on macOS","href":"/cli/install-macos"},{"title":"Install on Linux","href":"/cli/install-linux"},{"title":"Usage","href":"/cli/usage"}]},{"group":"Connections","icon":"cloud","pages":[{"group":"Cloud accounts","pages":[{"title":"Amazon Web Services (AWS)","description":null,"href":"/accounts/aws"},{"title":"Google Cloud Platform (GCP)","href":"/accounts/gcp"},{"title":"Microsoft Azure","description":null,"href":"/accounts/azure"}]},{"title":"Connect GitHub account","href":"/accounts/connect-github"},{"title":"Connect GitLab account","href":"/accounts/connect-gitlab"}]},{"group":"Environments","icon":"container-storage","pages":[{"title":"What's inside?","href":"/environment/inside"},{"title":"Create environment","href":"/environment/create"},{"group":"Environment security controls","pages":[{"title":"Environment security controls on AWS","sidebarTitle":"AWS","href":"/environment/security"},{"title":"Environment security controls on GCP","sidebarTitle":"GCP","href":"/environment/security-gcp"}]},{"group":"Monitoring","pages":[{"title":"Logs","href":"/environment/monitoring/logs"},{"title":"Metrics","href":"/environment/monitoring/metrics"},{"title":"Alerts","href":"/environment/monitoring/alerts"},{"title":"Crashes","href":"/environment/monitoring/crashes"}]},{"group":"Infrastructure Resources","pages":[{"group":"AWS","pages":[{"title":"View your environment's resources","href":"/environment/infra-resources/aws"}]}]},{"title":"Extend using Terraform/Pulumi","href":"/environment/extend-with-iac"},{"title":"Delete environment","href":"/environment/delete"},{"title":"Eject out of LocalOps","href":"/environment/eject"}]},{"group":"Services","icon":"server","pages":[{"title":"Create service","href":"/environment/services/create"},{"title":"Deploy a service","href":"/environment/services/deploy"},{"title":"ops.json magic","href":"/environment/services/ops-json"},{"title":"Web service","href":"/environment/services/web"},{"title":"Internal service","href":"/environment/services/internal"},{"title":"Workers","href":"/environment/services/workers"},{"title":"Job","href":"/environment/services/job"},{"title":"Cron Job","href":"/environment/services/cronjob"},{"title":"Running DB migrations","href":"/environment/services/db-migrations"},{"title":"Autoscaling","href":"/environment/services/autoscaling"},{"group":"AWS services","pages":[{"title":"S3 Buckets","href":"/environment/services/aws/s3"},{"title":"RDS (Postgres, MySQL \u0026 SQL Server)","href":"/environment/services/aws/rds"},{"title":"Aurora (Postgres \u0026 MySQL)","href":"/environment/services/aws/aurora"},{"title":"Elasticache Redis, Valkey \u0026 Memcache","href":"/environment/services/aws/elasti-cache"},{"title":"OpenSearch","href":"/environment/services/aws/opensearch"},{"title":"SQS Queues","href":"/environment/services/aws/sqs"},{"title":"SNS Topics","href":"/environment/services/aws/sns"},{"title":"MSK (Kafka)","href":"/environment/services/aws/msk"}]},{"title":"Run Docker Images","href":"/environment/services/docker"},{"title":"Use Helm charts","href":"/environment/services/helm-charts"},{"title":"Deploying Micro Services","href":"/environment/services/micro-services"},{"title":"BEAM clustering","href":"/environment/services/beam-clustering"},{"title":"Secrets","href":"/environment/services/secrets"},{"title":"Custom domain","href":"/environment/services/custom-domain"},{"title":"Client IP","href":"/environment/services/client-ip"},{"title":"Delete service","href":"/environment/services/delete"}]},{"group":"Instrument services","icon":"chart-line","pages":[{"title":"How to instrument","href":"/environment/services/instrument-service"},{"title":"Java","href":"/environment/services/instrument/java"},{"title":"Python","href":"/environment/services/instrument/python"},{"title":"Node.js","href":"/environment/services/instrument/nodejs"},{"title":"Golang","href":"/environment/services/instrument/golang"},{"title":".NET","href":"/environment/services/instrument/dotnet"},{"title":"Erlang","href":"/environment/services/instrument/erlang"}]},{"group":"Team","icon":"users","pages":[{"title":"Understanding roles","href":"/team/understanding-roles"},{"title":"Invite team members","href":"/team/invite-users"},{"title":"Project members","href":"/team/project-members"},{"title":"Protected environments","href":"/environment/protected-environments"},{"title":"Owner and Admin restrictions","href":"/team/owner-admin-restrictions"},{"title":"Remove a user","href":"/team/remove-user"},{"title":"Audit Log","href":"/team/audit-logs"}]},{"group":"Troubleshooting","icon":"bug","pages":[{"title":"Environment creation","href":"/troubleshoot/create-environment"},{"title":"Custom Domain","href":"/troubleshoot/custom-domain"}]},{"group":"Bring your helm charts (soon)","pages":[{"group":"First Steps","pages":[{"title":"I don't have a Docker Image","href":"/bring-your-helm-charts/first-steps/no-docker"},{"title":"I have a Docker Image","href":"/bring-your-helm-charts/first-steps/have-docker"},{"title":"I have a docker compose setup","href":"/bring-your-helm-charts/first-steps/have-docker-compose"},{"title":"I have a Helm Chart","href":"/bring-your-helm-charts/first-steps/have-helm"}]},{"group":"Publish Helm Charts","pages":[{"title":"Publish helm chart to ECR","href":"/bring-your-helm-charts/publish/ecr"}]},{"group":"Tutorials","pages":[{"title":"Python + React","href":"/bring-your-helm-charts/tutorials/python-react"},{"title":"NodeJs + React","href":"/bring-your-helm-charts/tutorials/node-react"},{"title":"Go + React","href":"/bring-your-helm-charts/tutorials/go-react"}]},{"group":"Databases","pages":[{"title":"MySQL","href":"/bring-your-helm-charts/databases/mysql"},{"title":"Postgres","href":"/bring-your-helm-charts/databases/postgres"},{"title":"MongoDB","href":"/bring-your-helm-charts/databases/mongodb"},{"title":"Redis","href":"/bring-your-helm-charts/databases/redis"}]},{"title":"Database Migration","href":"/bring-your-helm-charts/database-migration"},{"title":"Environment Variables","href":"/bring-your-helm-charts/env-vars"},{"title":"Multiple Helm Charts","href":"/bring-your-helm-charts/multiple-helm-charts"}]},{"group":"Legal","icon":"scale-balanced","pages":[{"title":"Terms of Service","href":"/terms"},{"title":"Privacy Policy","href":"/privacy-policy"},{"title":"Sub-processors","href":"/sub-processors"},{"title":"Data security","href":"/security"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api/getting-started"}]}]},"title":"Google Cloud Platform (GCP) - LocalOps Documentation","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BbYRHtLl.js","DynamicMarkdown-DN96a4Ur.js","zoom-image-lightbox-D7yRe3On.js","lightbox-handle-r17bVUz3.js"]}