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