What is OIDC?
OpenID Connect (OIDC) allows your GitHub Actions workflows to access GCP resources without storing any credentials as long-lived GitHub secrets. GCP implements this through Workload Identity. This is the most secure authentication method for production environments.
Setup Methods
Choose your preferred method for setting up OIDC authentication:
Automated Setup
Use our Terraform module to automatically create all required GCP resources:
Use our Terraform module to create all GCP resources that Terrateam requires.
Create main.tf
on your workstation
module "terraform_gcp_terrateam_setup" {
source = " github.com/terrateamio/terraform-gcp-terrateam-setup "
github_org = " GITHUB_ORG " # GitHub organization or username
project_id = " PROJECT_ID "
service_account_description = " Terrateam service account "
workload_identity_pool_id = " terrateam-pool "
workload_identity_provider = " terrateam-provider "
service_account_name = " terrateam "
service_account_role = " roles/editor "
output "google_iam_workload_identity_pool_provider_github_provider_name" {
value = module . terraform_gcp_terrateam_setup
Apply changes locally
Note the output
Save the output value google_iam_workload_identity_pool_provider_github_provider_name
- you’ll need it for Terrateam configuration.
After setting up GCP resources, configure Terrateam to use OIDC authentication:
Create Configuration File
Create the .terrateam/config.yml
configuration file at the root of your Terraform repository.
Add OIDC Hook
service_account : " terrateam@PROJECT_ID.iam.gserviceaccount.com "
workload_identity_provider : " WORKLOAD_IDENTITY_PROVIDER "
Testing Your Setup
Test that OIDC authentication is working:
Create a simple Terraform configuration in your repository
Open a pull request with the changes
Comment terrateam plan
on the pull request
Terrateam should successfully authenticate using OIDC and show the plan output
Manual Setup
For custom configurations or when you need to understand exactly what resources are being created:
Need to set up OIDC manually? Expand for step-by-step instructions
Create Service Account
Create a Terrateam service account:
gcloud iam service-accounts create terrateam \
--description= " Terrateam service account " \
--display-name= " Terrateam " \
Create Workload Identity Pool
Create the workload identity pool:
gcloud iam workload-identity-pools create " terrateam-pool " \
--display-name= " Terrateam pool "
Create OIDC Provider
Create the OIDC provider in the workload identity pool:
gcloud iam workload-identity-pools providers create-oidc " terrateam-provider " \
--workload-identity-pool= " terrateam-pool " \
--display-name= " Terrateam provider " \
--issuer-uri= " https://token.actions.githubusercontent.com " \
--attribute-mapping= " google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner " \
--attribute-condition= " assertion.repository_owner == 'GITHUB_ORG' "
Create IAM Policy Bindings
Allow the workload identity pool to impersonate the service account:
gcloud iam service-accounts add-iam-policy-binding " terrateam@PROJECT_ID.iam.gserviceaccount.com " \
--role= " roles/iam.workloadIdentityUser " \
--member= " principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/terrateam-pool/attribute.repository_owner/GITHUB_ORG "
Attach IAM Role
Attach an IAM role to give the service account necessary permissions. We suggest roles/editor
as a starting point:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member= " serviceAccount:terrateam@PROJECT_ID.iam.gserviceaccount.com " \
Get Workload Identity Provider Name
Get the full workload identity provider name for Terrateam configuration:
gcloud iam workload-identity-pools providers describe " terrateam-provider " \
--workload-identity-pool= " terrateam-pool " \
Follow the Configure Terrateam for OIDC section above to complete your setup.
Advanced Configuration
Multiple Environments
You can use different service accounts for different environments and operations. For example:
- tag_query : " dir:terraform/production/** "
service_account : " terrateam-prod@prod-project.iam.gserviceaccount.com "
workload_identity_provider : " projects/123456789/locations/global/workloadIdentityPools/terrateam-pool/providers/terrateam-provider "
service_account : " terrateam-prod@prod-project.iam.gserviceaccount.com "
workload_identity_provider : " projects/123456789/locations/global/workloadIdentityPools/terrateam-pool/providers/terrateam-provider "
- tag_query : " dir:terraform/staging/** "
service_account : " terrateam-staging@staging-project.iam.gserviceaccount.com "
workload_identity_provider : " projects/123456789/locations/global/workloadIdentityPools/terrateam-pool/providers/terrateam-provider "
service_account : " terrateam-staging@staging-project.iam.gserviceaccount.com "
workload_identity_provider : " projects/123456789/locations/global/workloadIdentityPools/terrateam-pool/providers/terrateam-provider "
For more details, read the Cloud Credentials documentation .
Next Steps
Now that you have GCP authentication configured, you are now able to use Terrateam for plan and apply operations against GCP resources.