Skip to main content

Backstage Platform

Overview​

The Badal Foundations Backstage portal is a customized Backstage deployment serving as the developer experience layer for the Foundations platform. It provides a unified interface for infrastructure management, team collaboration, and AI-powered development tools.

Deployment​

PropertyValue
URLhttps://backstage-778221394647.northamerica-northeast1.run.app
PlatformGoogle Cloud Run
Regionnorthamerica-northeast1
DatabaseCloud SQL (PostgreSQL)
Repositorybadal-io/repo-devex-backstage
GCP Projectbackstage-np-mly9n (non-production)

Custom Plugins​

Gemini Agent​

AI-powered development assistant that deploys Claude/Gemini agent instances as Cloud Run services. Each session creates an isolated container with access to the user's GitHub repositories.

Key characteristics:

  • One Cloud Run service per agent session for isolation
  • KMS-signed authentication for secure access
  • Repository and branch scoping per session
  • Session lifecycle management (create, stop, delete)

Claude Flow​

Integration with Claude AI for workflow orchestration.

Capabilities:

  • GitHub token passthrough for repository access
  • Vault secrets access for secure configuration
  • Workflow automation with AI-driven orchestration

Vault Secrets​

HashiCorp Vault integration for secrets management within Backstage.

Key paths:

PathDescriptionAccess Control
/backstage/usersUser-specific secretsAuthenticated user
/backstage/groupsGroup-based secretsRequires GitHub team membership
/backstage/backendBackend service secretsService account only

UI Mockup​

Drag-and-drop dashboard builder with live Backstage catalog data integration.

Features:

  • Versioned mockups with save and iteration support
  • Preview mode for visualizing final output
  • Live catalog data integration (e.g., querying kind:component, type:gcp-project)

Available components:

ComponentDescription
TitleHeading text for sections
Text BlockFree-form text content
LinkClickable links
ImageEmbedded images
Catalog ItemLive data from the Backstage catalog
DropdownSelection menus
ButtonAction buttons
Input FieldText input fields
Text AreaMulti-line text input

Terraform Cloud​

Integration with the Terraform Cloud API for workspace management and state retrieval. Provides visibility into workspace runs, state versions, and outputs directly within Backstage.

Customizable homepage with group-aware content:

  • Group-based onboarding -- Content tailored to your team memberships
  • Pull request management -- Review, comment, approve, and merge PRs from the home page
  • Team links -- Quick access to team-specific resources and calendars
  • GCP projects and GitHub repos -- Direct links to infrastructure and code

Authentication​

Backstage uses three authentication providers working together:

1. GitHub OAuth (Primary Identity)​

The primary identity provider for Backstage. GitHub OAuth extracts:

  • Organization membership
  • Team memberships (used for group-based access control)
  • User profile information

2. Google OAuth (GCP Access)​

Used for accessing GCP resources from within Backstage.

Requested scopes:

  • cloud-platform.read-only -- Read access to GCP resources
  • compute.readonly -- Read access to Compute Engine resources

3. JIT User Provisioning​

Just-In-Time user entity creation:

  • On first sign-in, a catalog entity is automatically created for the user
  • No pre-registration required
  • User entity is linked to GitHub identity and team memberships

Allowed Domains​

Authentication is restricted to the following email domains:

  • badal.io
  • foundation.badal.io
  • telus.com

Catalog Discovery​

The Backstage catalog is populated through automatic discovery from multiple sources.

GitHub Discovery​

  • Source: All repositories in the badal-io organization
  • Mechanism: Scans for catalog-info.yaml files in repository roots
  • Frequency: Every 5 minutes (non-production), hourly (production)

Terraform State Discovery​

  • Sources:
    • Terraform Cloud workspaces
    • GCS bucket bkt-prj-b-seed-tfstate-6a60
  • Maximum state age: 6 months
  • Discovered entities: GCP projects, service accounts, IAM bindings

Entity Types​

TypeDescription
ComponentSoftware components, GCP projects, Terraform modules
SystemGroups of related components
APIAPI definitions and documentation
ResourceInfrastructure resources
LocationPointers to other entity sources
TemplateScaffolder templates
UserUser entities (JIT provisioned)
GroupTeam and organization groups

Scaffolder Templates​

Available Templates​

There are 7 templates available for creating new resources:

TemplateDescriptionSteps
Create Business UnitNew BU with automated PR and pipeline validation3 steps: BU config, GitHub teams, review
Create TenantMulti-step tenant creation within a business unit6 steps: BU selection, tenant config, branching model, environments, teams, CODEOWNERS
Create Sandbox ProjectCustomizable sandbox GCP projectVariable based on configuration

Custom Scaffolder Actions​

ActionDescription
create-prCreates a GitHub Pull Request with generated content
pr-checksWaits for pipeline checks to complete (polls every 30s, up to 30 minutes)
create-terraform-moduleGenerates Terraform module scaffolding
validate-tenant-nameValidates tenant naming conventions

Custom Field Extensions​

ExtensionDescription
GithubRepoPickerRepository selection with topic-based filtering
GithubTeamPickerTeam selection from the GitHub organization
GithubRepoVariablePickerExtracts and displays GitHub repository variables
TerraformVariablesEditorExtensionInteractive HCL variable editing

Infrastructure​

Networking​

ResourceCIDR / Details
VPCprivate-network
Backstage subnet10.1.0.0/28
Dev pods subnet10.1.254.0/24
GitHub runners subnet10.2.1.0/24
Cloud NATOutbound connectivity for Cloud Run and VMs

Database​

PropertyValue
TypeCloud SQL (PostgreSQL)
Password managementSecret Manager
AccessPrivate IP via VPC

HashiCorp Vault​

PropertyValue
DeploymentVM-based
Auto-unsealGoogle Cloud KMS
Internal LB10.1.0.10:8200
AccessIAP (Identity-Aware Proxy) for administrative access

KMS​

PropertyValue
Key Ringvault-keyring
Unseal Keyvault-unseal-key
Rotation30-day automatic rotation

Service Accounts​

Service AccountPurpose
backstage-appBackstage application runtime
vault-appHashiCorp Vault runtime
gemini-agentGemini Agent Cloud Run instances

Repository​

RepositoryPurpose
badal-io/repo-devex-backstageBackstage application code and Terraform infrastructure