Ardrey 情報マガジン

gcp sajson

📅 October 29, 2026📖 Verified Publication

The Definitive Guide to GCP SAJSON: Mastering Google Cloud Service Account JSON Keys

Key Takeaways Summary

  • Understand the Core: GCP SAJSON refers to the JSON-formatted private key file used to authenticate Service Accounts in Google Cloud Platform.
  • Security First: Service account keys are powerful credentials. Exposing them in public repositories is a top vector for cloud security breaches.
  • Prefer Native Alternatives: Whenever possible, use Workload Identity Federation or attached instance service accounts instead of downloading static JSON keys.
  • Lifecycle Management: Implement a strict rotation policy (every 90 days or less) and automate key deletion for compromised assets.

Google Cloud Platform (GCP) service accounts are the backbone of programmatic access to cloud resources. Whether you are running a CI/CD pipeline, connecting a third-party monitoring tool, or deploying a microservice, you often need to authenticate your code against GCP APIs. The standard artifact for this authentication is the GCP service account JSON key—frequently referred to in developer shorthand as gcp sajson.

This authoritative playbook provides a comprehensive, actionable framework for generating, securing, rotating, and troubleshooting GCP service account JSON keys following industry best practices and the principle of least privilege.

Understanding GCP SAJSON: Anatomy and Mechanics

A GCP service account JSON file is a cryptographic key pair generated by Google Cloud IAM. When you request a key, Google retains the public key and provides you with the private key encapsulated in a standard JSON structure.

Anatomy of a Service Account JSON File

{
  "type": "service_account",
  "project_id": "my-gcp-project-123",
  "private_key_id": "a1b2c3d4e5f6...",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC3...\n-----END PRIVATE KEY-----\n",
  "client_email": "my-service-account@my-gcp-project-123.iam.gserviceaccount.com",
  "client_id": "109876543210987654321",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/apis/gserviceaccount.com/v1%2Fservice-account-key"
}

Playbook: Best Practices for Managing GCP SAJSON

Because these JSON files contain raw private keys, improper handling can lead to immediate security compromises. Execute the following checklists to ensure robust security postures.

Checklist 1: Creation and Least Privilege

  • Audit Necessity: Ask yourself if you truly need a static JSON key. Can you use Workload Identity Federation (for GitHub Actions, AWS, Azure) or built-in metadata server credentials instead?
  • Narrow IAM Scopes: Never assign project-wide roles like Editor or Owner to a service account. Assign granular, resource-specific IAM roles (e.g., roles/storage.objectViewer).
  • Dedicated Accounts: Create a dedicated service account for each distinct application or pipeline. Never share a single JSON key across multiple decoupled systems.

Checklist 2: Secure Storage and Handling

  • Environment Variables: Store the file contents securely. In modern CI/CD pipelines, inject the JSON string via encrypted secrets managers rather than committing it to version control.
  • Gitignore Enforcement: Immediately add *.json or specific key filenames to your .gitignore files and implement pre-commit hooks (like GitGuardian or truffleHog) to scan for accidental commits.
  • Secret Managers: Store production SAJSON strings in enterprise secrets management systems (e.g., GCP Secret Manager, HashiCorp Vault, AWS Secrets Manager) with strict Access Control Lists (ACLs).

Comparison: Authentication Methods for GCP

Before relying on static JSON keys, evaluate the modern alternatives available within the GCP ecosystem.

Authentication Method Security Level Operational Overhead Best Use Case
GCP SAJSON (Static Key) Low-Medium (Risk of leakage) High (Manual rotation required) Legacy systems, local development, external CI/CD platforms.
Workload Identity Federation High (No keys to manage) Low (Automated trust setup) CI/CD pipelines (GitHub Actions, GitLab, AWS, Azure).
GCP Compute Engine/Cloud Run Metadata Highest (Managed by GCP) None (Zero-touch) Code running natively inside GCP infrastructure.

Playbook: Emergency Rotation and Revocation

If a GCP SAJSON file is accidentally exposed publicly (e.g., pushed to a public GitHub repository), execute this emergency playbook immediately:

  • Step 1: Disable the Key Immediately: Navigate to the GCP IAM Console, locate the Service Account, select the "Keys" tab, and delete the compromised key ID. This instantly revokes its access.
  • Step 2: Check Cloud Audit Logs: Search Cloud Logging for API calls made using the compromised private_key_id to determine if unauthorized data exfiltration occurred.
  • Step 3: Generate a Replacement: Create a new service account JSON key, update your deployment environments with the new secret, and delete the old key entirely.
  • Step 4: Remediate Git History: If the key was pushed to Git, remember that simply deleting the file in a new commit does not remove it from history. Use tools like git-filter-repo or BFG Repo-Cleaner to purge the secret from repository history, or rotate the entire project repository if necessary.

Frequently Asked Questions

1. What is the difference between a service account key and an OAuth2 token?

A service account JSON key is a long-lived credential file containing a private RSA key used to sign JSON Web Tokens (JWTs). These JWTs are then exchanged with Google's authorization server to generate short-lived (typically 1-hour) OAuth2 access tokens used to make actual API requests.

2. How can I generate a GCP SAJSON file using the gcloud CLI?

You can generate and download a JSON key using the following terminal command:

gcloud iam service-accounts keys create key.json \
    --iam-account=my-sa@my-project.iam.gserviceaccount.com

Ensure you protect the resulting key.json file immediately and never store it in shared or unencrypted directories.

3. Can I automate the rotation of GCP service account keys?

Yes. You can build automation scripts using Cloud Functions or Cloud Run triggered by Cloud Scheduler. These scripts can create a new key, update your Secret Manager instance, distribute it to consumers, and delete the old key following an overlap window.