docs/en/enterprise/features/secrets-manager/gcp.mdx
This guide walks you through configuring Google Cloud Secret Manager as a secret provider for your CrewAI Platform organization, using service account credentials. By the end, CrewAI Platform will be able to read secrets stored in your Google Cloud project and inject them as environment variable values at runtime.
<Note> This guide covers the **static credentials** path — secrets are resolved at deploy time and baked into the deployment image. Rotated values require a re-deploy. If you want rotation-aware secrets that update on every automation kickoff, see [GCP Workload Identity Federation](/en/enterprise/features/secrets-manager/gcp-workload-identity). </Note> <Note> This guide covers the GCP-side configuration and the credential setup in CrewAI Platform. To then reference a secret from an environment variable, see [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage). </Note>A Google Cloud project with the Secret Manager API enabled. Enable it in the APIs & Services console or via gcloud:
gcloud services enable secretmanager.googleapis.com --project=YOUR_PROJECT_ID
Permission in the project to create service accounts, grant IAM roles, and (if needed) create secrets.
A CrewAI Platform organization where your user has the secret_providers: manage permission. See Permissions (RBAC).
A service account is the GCP-side identity CrewAI Platform will authenticate as.
In the IAM & Admin → Service Accounts console, click Create Service Account.
crewai-secrets-readercrewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com)Click Create and Continue. Skip the optional grants on this screen — you'll attach the role in Step 2. Click Done.
For full details, see the GCP documentation: Create service accounts.
CrewAI Platform needs permission to list and read secrets in your project. Use one of two scopes — project-wide for simplicity, or per-secret for least privilege.
<Tabs> <Tab title="Project-wide (simpler)"> In the [IAM console](https://console.cloud.google.com/iam-admin/iam), click **Grant Access** and:- **New principals:** the service account's email from Step 1.
- **Role:** **Secret Manager Secret Accessor** (`roles/secretmanager.secretAccessor`).
Click **Save**.
Or via `gcloud`:
```bash
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
```
```bash
gcloud secrets add-iam-policy-binding YOUR_SECRET_NAME \
--member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor" \
--project=YOUR_PROJECT_ID
```
Or in the console: open each secret in [Secret Manager](https://console.cloud.google.com/security/secret-manager), click **Permissions** in the right panel, and grant **Secret Manager Secret Accessor** to the service account.
Open the service account from Step 1 in the IAM & Admin → Service Accounts console.
Or via gcloud:
gcloud iam service-accounts keys create ./crewai-secrets-reader.json \
--iam-account=crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com
In CrewAI Platform, navigate to Settings → Secret Provider Credentials and click Add Credential.
Fill the form:
gcp-prod.Google Cloud Secret Manager.my-crewai-prod).Click Create.
If you don't already have secrets in GCP Secret Manager, create one now so you can verify the connection in Step 6.
In the Secret Manager console, click Create secret.
openai-api-key.Click Create secret.
Or via gcloud:
echo -n "sk-your-actual-key" | gcloud secrets create openai-api-key \
--data-file=- \
--project=YOUR_PROJECT_ID \
--replication-policy=automatic
For full details, see the GCP documentation: Create a secret.
Back in CrewAI Platform, on the Secret Provider Credentials page, find the credential you just created and click Test Connection.
A success toast confirms that CrewAI Platform can authenticate to GCP and read secrets from your project.
If the test fails, check the most common causes:
| Symptom | Likely cause |
|---|---|
PERMISSION_DENIED on listing secrets | Service account is missing roles/secretmanager.secretAccessor, or you scoped it per-secret (list is not granted). Re-check Step 2. |
PERMISSION_DENIED on secretmanager.secrets.access | Same as above, but for a specific secret. Confirm the service account has accessor role on the secret in question. |
unauthorized_client / invalid_grant | The pasted Service Account JSON is invalid, expired, or for a deleted service account. Re-create the key (Step 3) and re-paste. |
Project ID does not match | The Project ID field in CrewAI Platform doesn't match the project that owns the service account / secrets. Re-check Step 4. |
API not enabled | Secret Manager API isn't enabled on the project. See Prerequisites. |
Now that GCP is connected, head to Using the Secrets Manager to:
If you want rotation-aware secrets that propagate without re-deploying, switch to GCP Workload Identity Federation — same secret store, no static credentials, secrets are fetched per kickoff.