Skip to content
English
  • There are no suggestions because the search field is empty.

Google Cloud Storage (GCS) Bucket

The EQTY Governance Platform requires Google Cloud Storage (GCS) for blob storage.

Required buckets:

  • Governance artifacts bucket – Stores governance-related documents and artifacts
  • Integrity store bucket – Stores cryptographic proofs and audit trails

This guide covers:

  • Creating GCS buckets with proper configuration (gcloud CLI or Console)
  • Setting up a service account with storage permissions
  • Configuring the Helm chart for GCS storage
  • Google Cloud Platform (GCP) account with an active project
  • gcloud CLI installed and configured (for CLI method)
  • Permissions to create buckets and service accounts in the GCP project

Add the following to the values.yaml and secrets.yaml files. Placeholders will be filled in throughout the steps below.

values.yaml:


    
governance-service :
config :
storageProvider : gcs
gcsBucketName : " " # Filled in after step 2
integrity-service :
config :
integrityAppBlobStoreType : gcs
integrityAppBlobStoreGcsBucket : " " # Filled in after step 2
integrityAppBlobStoreGcsPrefix : " rootstore "

secrets.yaml:


    
global :
secrets :
create : true
storage :
gcs :
secretName : platform-gcs
values :
serviceAccountJson : " " # Filled in after step 5
Section titled “Quick Start (CLI Method - Recommended)”

Login to Google Cloud:

Terminal window

    
gcloud auth login

Set the following variables — they will be used throughout this guide. Replace the values with the ones for the deployment:

Terminal window

    
PROJECT_ID = " your-gcp-project-id "
GOVERNANCE_BUCKET = " governance-artifacts-bucket " # Must be globally unique
INTEGRITY_BUCKET = " integrity-store-bucket " # Must be globally unique
SERVICE_ACCOUNT_NAME = " governance-platform "
REGION = " us-east1 "

Set the active project:

Terminal window

    
gcloud config set project $PROJECT_ID

Update values.yaml with the chosen bucket names.

values.yaml -> governance-service.config:


    
gcsBucketName : " "

values.yaml -> integrity-service.config:


    
integrityAppBlobStoreGcsBucket : " "

Create the governance artifacts bucket:

Terminal window

    
gcloud storage buckets create gs:// $GOVERNANCE_BUCKET \
--location=$REGION \
--uniform-bucket-level-access \
--public-access-prevention

Create the integrity store bucket:

Terminal window

    
gcloud storage buckets create gs:// $INTEGRITY_BUCKET \
--location=$REGION \
--uniform-bucket-level-access \
--public-access-prevention

Optionally enable versioning for data protection:

Terminal window

    
gcloud storage buckets update gs:// $GOVERNANCE_BUCKET --versioning
Terminal window

    
gcloud storage buckets update gs:// $INTEGRITY_BUCKET --versioning

Verify both buckets were created:

Terminal window

    
gcloud storage buckets list --filter= " name: $GOVERNANCE_BUCKET OR name: $INTEGRITY_BUCKET "
Terminal window

    
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
--display-name= " EQTY Governance Platform Service Account " \
--description= " Service account for EQTY Governance Platform to access GCS buckets "

Set the service account email as a variable for use in subsequent commands:

Terminal window

    
SERVICE_ACCOUNT_EMAIL = " ${ SERVICE_ACCOUNT_NAME }@${ PROJECT_ID }.iam.gserviceaccount.com "

Grant Storage Object Admin on the governance bucket:

Terminal window

    
gcloud storage buckets add-iam-policy-binding gs:// $GOVERNANCE_BUCKET \
--member= " serviceAccount: $SERVICE_ACCOUNT_EMAIL " \
--role= " roles/storage.objectAdmin "

Grant Storage Object Admin on the integrity bucket:

Terminal window

    
gcloud storage buckets add-iam-policy-binding gs:// $INTEGRITY_BUCKET \
--member= " serviceAccount: $SERVICE_ACCOUNT_EMAIL " \
--role= " roles/storage.objectAdmin "

Verify permissions were applied:

Terminal window

    
gcloud storage buckets get-iam-policy gs:// $GOVERNANCE_BUCKET \
--flatten= " bindings[].members " \
--filter= " bindings[].members: $SERVICE_ACCOUNT_EMAIL "

Download the service account key as a JSON file:

Terminal window

    
gcloud iam service-accounts keys create gcs-key.json \
--iam-account=$SERVICE_ACCOUNT_EMAIL

Base64 encode the key for use in secrets.yaml:

Terminal window

    
base64 -w 0 gcs-key.json

Update secrets.yaml with the output.

secrets.yaml -> global.secrets.storage.gcs.values:


    
serviceAccountJson : " "

Delete gcs-key.json after adding the value to the Helm secrets.

Click to expand Google Cloud Console instructions
  • Navigate to Cloud Storage Browser
  • Click “Create Bucket”
  • Enter a globally unique name for governance artifacts bucket
  • Choose a location (region or multi-region)
  • Select “Uniform” access control
  • Enable “Public access prevention”
  • Click “Create”
  • Repeat for integrity store bucket

Update values.yaml with the bucket names.

values.yaml -> governance-service.config:


     
gcsBucketName : " "

values.yaml -> integrity-service.config:


     
integrityAppBlobStoreGcsBucket : " "
  • Navigate to IAM & Admin > Service Accounts
  • Click “Create Service Account”
  • Enter name: “governance-platform”
  • Enter description: “Service account for EQTY Governance Platform”
  • Click “Create and Continue”
  • Skip role assignment at this step (bucket-specific permissions are added next)
  • Click “Done”
  • Navigate to Cloud Storage Browser
  • For each bucket (governance artifacts and integrity store):
    • Click on the bucket name
    • Navigate to “Permissions” tab
    • Click “Grant Access”
    • Enter the service account email (e.g. governance-platform@PROJECT_ID.iam.gserviceaccount.com)
    • Select role: “Storage Object Admin”
    • Click “Save”
  • Navigate to IAM & Admin > Service Accounts
  • Click on the service account name
  • Navigate to “Keys” tab
  • Click “Add Key” > “Create new key”
  • Select “JSON” format
  • Click “Create” (the key will download automatically)
  • Base64 encode the downloaded JSON file. Replace KEY_FILE_PATH with the path to the downloaded file:
Terminal window

     
base64 -w 0 KEY_FILE_PATH
  • Update secrets.yaml with the output.

secrets.yaml -> global.secrets.storage.gcs.values:


     
serviceAccountJson : " "

Activate the service account credentials locally:

Terminal window

    
gcloud auth activate-service-account \
--key-file=gcs-key.json

List objects in the governance artifacts bucket (should be empty initially):

Terminal window

    
gcloud storage ls gs:// $GOVERNANCE_BUCKET

List objects in the integrity store bucket (should be empty initially):

Terminal window

    
gcloud storage ls gs:// $INTEGRITY_BUCKET

Test write access on both buckets:

Terminal window

    
echo " test " > test.txt
gcloud storage cp test.txt gs:// $GOVERNANCE_BUCKET /
gcloud storage rm gs:// $GOVERNANCE_BUCKET /test.txt
gcloud storage cp test.txt gs:// $INTEGRITY_BUCKET /
gcloud storage rm gs:// $INTEGRITY_BUCKET /test.txt
rm test.txt

Return to normal authentication:

Terminal window

    
gcloud auth revoke $SERVICE_ACCOUNT_EMAIL
gcloud auth login

If the commands succeed without errors, the configuration is correct.

  • Least Privilege: Grant only the minimum required permissions (Storage Object Admin on specific buckets, not project-wide)
  • Rotate Keys: Regularly rotate service account keys and update Kubernetes secrets
  • Enable Versioning: Enable object versioning to protect against accidental deletion
  • Audit Logging: Enable Cloud Audit Logs for access monitoring
  • Encryption: GCS encrypts data at rest by default; consider customer-managed encryption keys (CMEK) for additional control