Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
43e7103
chore: Start of Pipelines v4
yhakbar Sep 26, 2025
cd9879e
docs: Breaking down Pipelines authentication concepts (#2745)
yhakbar Sep 26, 2025
0fb0f8a
fix: Adding `Entra` as custom word
yhakbar Sep 26, 2025
55ed018
DEV-799 Add GitLab drift detection docs (#2747)
Resonance1584 Sep 29, 2025
1827c2e
Make gov cloud docs work with referenced templates (#2749)
oredavids Oct 3, 2025
358effa
GitLab Account factory docs (#2677)
oredavids Oct 3, 2025
f1e6ab8
docs: Breaking down Pipelines architecture concepts (#2753)
yhakbar Oct 6, 2025
a5c3da3
docs: Breaking down installation guide to avoid assuming AWS (#2759)
yhakbar Oct 7, 2025
196c6a6
docs: Adding HCL configuration reference for Azure and Custom auth (#…
yhakbar Oct 7, 2025
57c0469
docs: Breaking down tutorials to avoid assuming AWS (#2782)
yhakbar Oct 7, 2025
71ca806
chore: Merging in `main`
yhakbar Oct 7, 2025
f109664
docs: Breaking down guides to avoid assuming AWS (#2783)
yhakbar Oct 8, 2025
e4e389a
fix: Fixing reference to catalog (#2792)
yhakbar Oct 8, 2025
5a22caa
Empty commit
yhakbar Oct 8, 2025
fe201ea
Add Account factory HCL configuration docs (#2791)
oredavids Oct 9, 2025
cad80d8
Add unlock workflows docs (#2793)
Resonance1584 Oct 9, 2025
40fe00f
docs: Adding callout for branch protection security improvements (#2798)
yhakbar Oct 9, 2025
2f6c26e
GitHub Pipelines v3 -> v4 migration guide (#2794)
Resonance1584 Oct 9, 2025
ab25983
Update migration doc with fallback token permissions (#2802)
oredavids Oct 10, 2025
7b69d08
Add Gitlab pipelines v1 to v2 upgrade docs (#2806)
oredavids Oct 10, 2025
841ef20
fix: Add callout for permissions of tutorial (#2809)
yhakbar Oct 10, 2025
a4d0970
fix: Including `--backend-bootstrap` to instructions for initial plan…
yhakbar Oct 10, 2025
59a9b0c
feat: Adding GitLab Azure support (#2807)
yhakbar Oct 10, 2025
9bc705b
copy updates to v4 migration guide
ZachGoldberg Oct 20, 2025
ba4bc96
More copy updates in migration guide
ZachGoldberg Oct 20, 2025
6dac2dc
Copy updates
ZachGoldberg Oct 20, 2025
1941e17
update feature flags table for v4
ZachGoldberg Oct 20, 2025
237fcbe
consistent casing
ZachGoldberg Oct 20, 2025
43a8e79
consistency
ZachGoldberg Oct 20, 2025
9a6627e
Update compatibility table
oredavids Oct 20, 2025
021b16e
Merge branch 'pipelines-v4' of github.com:gruntwork-io/docs into pipe…
oredavids Oct 20, 2025
a77a066
Add whats new
ZachGoldberg Oct 20, 2025
4011cf6
Update terragrunt-version-compatibility.md
ZachGoldberg Oct 20, 2025
2aee4ba
Whats new for GitLab
ZachGoldberg Oct 21, 2025
83f2668
Include v1's max as well
ZachGoldberg Oct 21, 2025
a336d95
Update HCL Beta labels
ZachGoldberg Oct 21, 2025
de1019e
Add GitLab account factory setup docs (#2811)
oredavids Oct 22, 2025
73efbc2
Update custom dictionary
Resonance1584 Oct 23, 2025
bddd218
Add custom-actions gruntwork_context section
Resonance1584 Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions babel.config.js

This file was deleted.

9 changes: 9 additions & 0 deletions custom-dictionary.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,12 @@ minamijoyo
tfupdate
hcledit
self-hosting
infrachanges
Entra
GLMU
myprodsa
azuread
mysa
deinterlaced
rolename
ACCOUNTNAME
3 changes: 2 additions & 1 deletion docs/2.0/docs/accountfactory/architecture/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,14 @@ sequenceDiagram
Infra Live Repository ->> Pipelines: Trigger Account Added
Pipelines ->> Core Accounts: Execute terragrunt to baseline account
```

## IAM roles

Newly created accounts include IAM policies that define the scope of changes Pipelines is authorized to perform within AWS. Pipelines automatically assumes the necessary roles for each account when it detects changes. Detailed information about the provisioned roles can be found [here](/2.0/docs/pipelines/architecture/security-controls#roles-provisioned-by-devops-foundations).

## Delegated repositories
Comment on lines 32 to 36
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix link to roles doc (likely broken).

The IAM roles paragraph links to pipelines security controls with an anchor that doesn't exist here. It should point to Account Factory’s security controls page and anchor.

- Detailed information about the provisioned roles can be found [here](/2.0/docs/pipelines/architecture/security-controls#roles-provisioned-by-devops-foundations).
+ Detailed information about the provisioned roles can be found [here](/2.0/docs/accountfactory/architecture/security-controls#roles-provisioned-by-account-factory).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## IAM roles
Newly created accounts include IAM policies that define the scope of changes Pipelines is authorized to perform within AWS. Pipelines automatically assumes the necessary roles for each account when it detects changes. Detailed information about the provisioned roles can be found [here](/2.0/docs/pipelines/architecture/security-controls#roles-provisioned-by-devops-foundations).
## Delegated repositories
## IAM roles
Newly created accounts include IAM policies that define the scope of changes Pipelines is authorized to perform within AWS. Pipelines automatically assumes the necessary roles for each account when it detects changes. Detailed information about the provisioned roles can be found [here](/2.0/docs/accountfactory/architecture/security-controls#roles-provisioned-by-account-factory).
## Delegated repositories
🤖 Prompt for AI Agents
docs/2.0/docs/accountfactory/architecture/index.md lines 32-36: the IAM roles
paragraph currently links to the Pipelines security-controls page with an
incorrect anchor; update the link target to point to Account Factory’s security
controls page and use the correct anchor (e.g.
/2.0/docs/accountfactory/architecture/security-controls#roles-provisioned-by-account-factory
or the actual anchor used in that page) so the “roles provisioned” reference
navigates to the Account Factory security controls section.


Delegated repositories enhance the architecture of infrastructure management by introducing additional layers of access control. When delegated repositories are created, Pipelines continues to manage new account security baselines within the `infrastructure-live-root` repository, while other infrastructure resources are managed in a new repository specific to the delegated account(s).
Delegated repositories enhance the architecture of infrastructure management by introducing additional layers of access control. When delegated repositories are created, Pipelines continues to manage new account security baselines within the `infrastructure-live-root` repository, while other infrastructure resources are managed in a new repository specific to the delegated account(s).

Pipelines uses IAM roles from the `infrastructure-live-access-control` repository to deploy infrastructure in these delegated repositories. This setup enables the central platform team to define and restrict the scope of changes individual teams can make via Pipelines in delegated repositories.

Expand Down
149 changes: 149 additions & 0 deletions docs/2.0/docs/accountfactory/architecture/repository-topology.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# Repository Topology

Gruntwork Account Factory provides an opinionated (but flexible) repository structure that supports organizations as they scale their infrastructure management across multiple AWS accounts. This approach is designed to help teams graduate from managing a handful of accounts with difficulty to being able to conveniently manage hundreds of accounts, all while maintaining high standards for security, compliance, and developer productivity.

The repository topology is designed around a core principle: **centralized governance with distributed ownership**. Your platform team maintains control over critical security and compliance infrastructure, while application teams get the autonomy they need to move fast within well-defined guardrails.

Understanding this repository structure will help you leverage Account Factory effectively and set your organization up for sustainable growth.

## `infrastructure-live-root`

Think of `infrastructure-live-root` as your organization's infrastructure command center. This repository, built from the [infrastructure-live-root-template](https://github.com/gruntwork-io/infrastructure-live-root-template), is where your platform team manages the foundational elements that every other AWS account depends on, and where your Account Factory workflow lives.

This repository is the only repository with access to the AWS management account, and is trusted by IAM roles provisioned in all AWS accounts so that your platform team is able to provision infrastructure in them as necessary to prepare them for workloads. This is also where your platform team can provision new AWS accounts with consistent baselines whenever teams need them. You'll also manage critical organization-wide infrastructure like your AWS Landing Zone, central logging, and security services in this repository.

Access to this repository is intentionally restricted to your most trusted platform team members. Every other piece of infrastructure in your organization can trace back to the foundational services configured here.

### `infrastructure-live-root` workflows

- **Account Factory:** (GitHub only) This is your self-service account vending machine. When someone needs a new AWS account (e.g. for a new application, environment, or team), they can trigger this workflow as the entrypoint for the account vending workflow. This workflow is triggered via [repository dispatch](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#repository_dispatch), which is a feature of GitHub Actions, and makes it possible to trigger the workflow from outside the repository using the GitHub API.

The workflow accepts a simple JSON payload (there's even a handy customizable HTML form included to make this easy) and creates a pull request with all the necessary infrastructure code to provision and baseline the new account. Organizations typically customize this form to capture additional metadata like additional tags, cost center codes or conditional creation of potentially expensive security services like Macie or GuardDuty.

:::tip

The included HTML form is just a starting point. Organizations typically customize this form to capture additional metadata like additional tags, cost center codes or conditional creation of potentially expensive security services like Macie or GuardDuty.

Once you have a good grasp of how the form works, and how it generates the JSON payload, you can even opt not to use the form at all, and instead trigger the workflow using the GitHub API directly from your internal platforms like ServiceNow or Jira.

You can learn more about this in the ["Using the Account Factory Workflow" guide](/2.0/docs/accountfactory/guides/vend-aws-account).

:::

- **Pipelines:** This is where Account Factory integrates with Gruntwork Pipelines to drive infrastructure changes via GitOps workflows. With Gruntwork Pipelines, every infrastructure change goes through a proper review process with pull requests, approvals, and controlled deployments. Your platform team gets the confidence of peer review while maintaining the ability to rapidly deploy critical infrastructure changes.

:::tip

While you can rename `infrastructure-live-root` during setup, keeping the name consistent with our documentation makes life easier for your team. You also *can* create multiple root repositories for complex organizational structures, but be sure that it's worth the additional complexity for your organization. It can be a significant source of operational overhead, and you might be better off delegating some infrastructure management to a separate repository with a [delegated infrastructure-live repository](#infrastructure-live-delegated).

:::

## `infrastructure-live-access-control`

This is where you solve one of the biggest challenges in scaling infrastructure management: **How do you give teams the access they need (and only give them the exact access they need) to manage their own infrastructure?**

:::tip

This repository is optional for most users (Enterprise customers must provision this repository for delegated repository access control), but is a highly recommended best-practice for all customers.

:::

The `infrastructure-live-access-control` repository is your organization's permission control center. It manages all the IAM roles, policies, and permissions that determine what each team can do in their AWS accounts outside of the `infrastructure-live-root` repository. It provides a central place where application engineers and the platform team can collaborate to define and iterate on the access control policies for roles that can be assumed by [delegated infrastructure-live repositories](#infrastructure-live-delegated).

Your application teams can _request_ the access they need here through pull requests, but your platform team maintains oversight by reviewing and approving these changes, and branch protection rules can ensure that they have final say in the approval process. No more bottlenecks where platform teams have to manually create every single IAM policy (and determine the appropriate level of access for each team), and no more security risks from teams having overly broad permissions.

:::info

**Delegated infrastructure management** is the practice of allowing developers to manage infrastructure in a self-service fashion.

Instead of having your platform team manually provision every resource required for your entire organization (which doesn't always scale), you can let application teams manage their own infrastructure within clearly defined boundaries. Your platform team still entirely controls critical resources (e.g. AWS accounts, VPCs, security policies) but developers can deploy and update their applications without opening a ticket and waiting on the platform team.

Most organizations find success with a hybrid approach: centralized control for anything that affects security or compliance, delegated management for everything else. Where you draw that line depends on your risk tolerance, team maturity, and the complexity of your organization.

:::

:::tip

You can name the `infrastructure-live-access-control` repository whatever makes sense for your organization. Just keep it descriptive so future team members (and your future self) know exactly what it does. If you can keep the name similar to `infrastructure-live-access-control`, you probably should so that it's easier for your team to learn more about it when reading Gruntwork documentation.

While you *could* split access control across multiple repositories for very large organizations, remember that multiple sources of truth for permissions can quickly become a security and operational nightmare. Start with one repository and only consider splitting if you have a compelling organizational reason.

:::

### `infrastructure-live-access-control` workflows

- **Pipelines** - Every permission change goes through the same GitOps workflow as your other infrastructure. When someone proposes new IAM policies or role changes, the workflow runs a plan to show exactly what will change. Once approved and merged, it automatically applies those changes across your AWS accounts.

This means your access control changes are auditable, reversible, and follow the same quality gates as the rest of your infrastructure. No more wondering who changed what permissions or scrambling to fix a misconfigured IAM policy.

## `infrastructure-catalog`

The `infrastructure-catalog` repository is your organization's internal infrastructure component library. This is where you build and maintain the custom Terragrunt/OpenTofu/Terraform resources that are specific to your organization's needs and standards, and can be reused throughout your organization.

While Gruntwork provides battle-tested OpenTofu/Terraform modules for common infrastructure patterns, every organization has unique requirements. Maybe you need a special monitoring setup, custom networking configurations, or specific compliance controls. This repository is where those organization-specific modules live, get tested, and evolve alongside your infrastructure needs.

The result? Instead of every team reinventing the wheel, they can leverage proven, tested components that follow your organization's best practices, and your engineers can work together to learn from each other and build on each other's work.

:::tip

Starting with a single `infrastructure-catalog` repository makes discoverability much easier (e.g. your teams won't have to guess where to find the standardized "database" module that follows your organization's best practices for security and cost savings). You can always split it later if your organization grows large enough that centralized module management becomes unwieldy. This can be the case if your central catalog starts to receive so many git tag updates that it becomes difficult to determine when a version bump in a module is a breaking change or not.

Some large organizations also benefit from separate module repositories for different domains (security modules, application modules, etc.) or business units. Just make sure the benefits outweigh the complexity of managing multiple sources of truth.

:::

### `infrastructure-catalog` workflows

- **Tests:** This is where your team can validate that your reusable infrastructure patterns are, in-fact, reliably reproducible. Every module gets automatically tested by spinning up real AWS resources, running comprehensive tests with [Terratest](https://terratest.gruntwork.io/), and then cleaning everything after the tests are run. This means your teams can trust that modules actually work consistently before they use them in production. This also means that you have a sandbox for ephemeral infrastructure that you can use to test out experimental changes to your infrastructure patterns before you commit to running them in the long-term in production.

## `infrastructure-live-delegated`

This is where you can start to empower more of your organization outside your central platform team to start managing their own infrastructure independently. **Delegated repositories** are how your organization grows from a small platform team managing everything to hundreds of developers deploying infrastructure independently while maintaining security and compliance best practices.

:::tip

Typical use cases for delegated repositories include:

- Allowing a separate team to independently manage infrastructure relevant to a specific account (e.g. a mobile app team to manage their own database and application infrastructure).
- Enabling a GitHub Actions workflow in a repository to make restricted changes to infrastructure in a specific account (e.g. a repository with application code may need to build and push a container image to AWS ECR before it's picked up by ArgoCD in the cluster).
- Allowing a repository's GitHub Actions workflows to have read-only access to select resources within a specific account (e.g. a data science team may need to be granted read-only access to an S3 bucket in an AWS account to run their ML pipelines against real production data).

:::

These repositories represent individual teams or applications that have been granted specific, limited permissions to manage their own infrastructure. Think of them as specialized workshops where each team has exactly the tools they need for their job, but can't accidentally (or intentionally) mess with anyone else's work.

The permissions for each delegated repository are carefully controlled by your `infrastructure-live-access-control` repository. Maybe the mobile app team needs to deploy containers and manage their databases, while the data science team needs different permissions for their ML pipelines. Each team gets exactly what they need, no more and no less.

For Enterprise customers, Account Factory can even automatically create these delegated repositories as part of the account vending process. Request a new AWS account (or set of AWS accounts) for your team, and you automatically get a corresponding repository with all the right permissions to manage infrastructure in those account(s).

## How it all fits together

Here's how these repositories work together to create a scalable, secure infrastructure management system:

```mermaid
erDiagram
infra-live-root ||--o| infra-live-access-control : "Delegated Access Control"
infra-live-access-control ||--o{ infra-live-delegated : "Delegated Infrastructure Management"
infra-live-root ||--o{ infra-live-delegated : "Vended (Enterprise)"
infra-live-root ||--o| infra-catalog : ""
infra-live-access-control ||--o| infra-catalog: ""
infra-live-delegated }o--o| infra-catalog: ""
```

:::note

We've abbreviated `infrastructure` as `infra` in the diagram for brevity.

:::

**The flow in practice:**

1. **Foundations first:** Your `infrastructure-live-root` repository sets up the foundational AWS infrastructure that everything else depends on: accounts, networking, security services.

2. **Shared components:** The `infrastructure-catalog` provides reusable, tested modules that any team can use, ensuring consistency and reducing duplicate work across your organization.

3. **Permissions next:** The `infrastructure-live-access-control` repository defines who can do what in each AWS account, creating the guardrails that keep your infrastructure secure as it scales.

4. **Teams get autonomy:** Individual `infrastructure-live-delegated` repositories give teams the ability to manage their own infrastructure within the boundaries set by access control policies.

This topology grows with you: start simple with just the root repository, build out your shared components in your catalog, add access control as you scale, introduce delegated repositories as teams need more autonomy.
Loading