Warning
This repository is archived and no longer actively maintained.
It was created as demonstration material for the session "Enhancing Power Platform Governance Through Terraform: Embracing Infrastructure as Code" presented at Power Platform Community Conference 2025 by Raphael Pothin.
The code and documentation are preserved here as a read-only reference. No issues, pull requests, or discussions will be monitored. For questions or feedback, please reach out to Raphael Pothin directly.
This repository demonstrates how Infrastructure as Code (IaC) with Terraform can transform Power Platform governance, addressing common challenges faced by platform administrators:
| Traditional ClickOps | Infrastructure as Code |
|---|---|
| π±οΈ Manual clicks | π Declarative configuration |
| π No audit trail | π Complete version history |
| π° Error-prone | β Validated and tested |
| π Slow to scale | π Instantly replicable |
| π§ Hard to maintain | π Self-documenting |
ποΈ ppcc25-terraform-power-platform-governance/
βββ π¦ configurations/ # Ready-to-deploy Terraform configurations
β βββ ptn-* # Complete implementation patterns
β βββ res-* # Individual resource configurations
β βββ utl-* # Utility configurations (exports, generation)
βββ π docs/ # Complete documentation (tutorials, guides, references)
βββ π€ .github/ # GitHub workflows and automation
βββ π¬ .demo/ # Demo scripts and assets used during the conference session
βββ π οΈ scripts/ # Setup, cleanup, and utility scripts
βββ π§ .devcontainer/ # Development container configuration
Control which connectors can be used together to prevent data leakage.
Example: Finance department policy restricting data flow between SharePoint and external services.
Create and configure Power Platform environments consistently.
Example: Dev/Test/Prod environment group with standardized settings.
Extend environments with Azure VNet for secure hybrid connectivity.
Example: Private connectivity between Power Platform and Azure SQL using enterprise policies, zero-trust NSGs, and private DNS zones.
| Configuration | Purpose | Complexity |
|---|---|---|
utl-export-connectors |
Export connector list from tenant | β Simple |
utl-export-dlp-policies |
Export existing DLP policies | β Simple |
utl-generate-dlp-tfvars |
Generate tfvars from exported policies | β Simple |
res-dlp-policy |
Create/update DLP policies | ββ Easy |
ptn-environment-group |
Provision environment group (Dev/Test/Prod) | ββββ Advanced |
ptn-azure-vnet-extension |
Add Azure VNet integration | ββββ Advanced |
- Terraform: >= 1.5.0 required
- Authentication: OIDC (zero stored credentials)
- State Management: Azure Storage backend
- Provider:
microsoft/power-platform~> 3.8 - Azure Infrastructure: Built on Azure Verified Modules (AVM)
- Naming: Cloud Adoption Framework (CAF) conventions
The docs/ folder contains full DiΓ‘taxis-structured documentation preserved for reference:
| Section | Content |
|---|---|
| π Documentation Home | Starting point and navigation |
| π Tutorials | Step-by-step walkthroughs (Getting Started, DLP Policies, Environment Groups) |
| π§ How-to Guides | Task-specific instructions (setup, DLP management, ClickOps migration, troubleshooting) |
| π Reference | Configuration catalog, module reference, common patterns |
| π‘ Explanations | Architecture decisions, why IaC, known limitations |
This project is licensed under the MIT License β see the LICENSE file for details.
Raphael Pothin π» π π¨ |
Made with β€οΈ for the Power Platform Community
Presented at Power Platform Community Conference 2025