CertNote/ Commute Study Notes
Roadmap
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
  • Week 1
    • 1.DevOps as an Operating Model: The Five Axes of CALMS and the Truth DORA Proved Through Measurement
    • 2.Well-Architected Framework: Rereading It Through the Six Lenses of DevOps
    • 3.The AWS DevOps Tool Map: The Code* Series and the Real Picture Beyond It
    • 4.Multi-Account Strategy: The Real Picture of Organizations, Control Tower, and IAM Identity Center
    • 5.Week 1 Wrap-Up: Cementing the DevOps Thinking Frame with Scenarios
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
  • Week 14
  • Week 15
    • 1.Multi-Account Enterprise CI/CD: Governance and Platform Engineering Principles for 50+ Accounts
    • 2.Hybrid CI/CD: Bridging On-Premises and AWS into One Deployment Model
    • 3.Large-Scale ECS/EKS Operations: Scheduling, GitOps, Cost Principles for 100+ Microservices
    • 4.Serverless Large-Scale Incident Auto-Response: Recovery Without People, Safety Rails
    • 5.Week 15 Wrap-Up: The Art of Reading Clues Across Cases and Judging Trade-offs
  • Week 16
Linux Master 2 · 2급KAIT Linux Master - Level 2
SCS-C03 · SpecialtySecurity - Specialty
Linux Master 1 · 1급KAIT Linux Master - Level 1
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
SQLD · 개발자SQL Developer (SQLD)

© CertNote · 주간랩스

  • About
  • Changelog
  • Contact
  • Terms
  • Privacy
← DOP-C02/Week 15/Day 1

Based on the DOP-C02 exam guide·Report an error

DOP-C02· ProWeek 15 · Day 1~43 min read

Day 1 - Multi-Account Enterprise CI/CD: Governance and Platform Engineering Principles for 50+ Accounts

As organizations grow from one account to two, then five, then dozens of AWS accounts, they reach the same inflection point. "If the platform team has to manually cut an account, architect a pipeline, and hand-code security baselines every time a developer creates a new service, the team will spend all its time on someone else's infrastructure setup. How do we enforce standards without making developers wait?" This tension — the tug-of-war between governance (control) and self-service (speed) — is the essence of multi-account enterprise CI/CD. Today, we examine a realistic organization: 50+ microservices, 60+ AWS accounts, 100 developers, 5 platform engineers. We dissect how to resolve that tension through structure — Landing Zone and Account Factory, Tooling account Hub-Spoke, Service Catalog self-service, Permission Boundary and SCP authority boundaries — alongside the distributed systems and organizational theory beneath.

In the DOP exam, this domain appears repeatedly in scenarios like "apply identical baselines to hundreds of accounts automatically", "prevent developer-created IAM Roles from exceeding company policy", "provide standard pipelines to 50 services via self-service". Each answer hinges on understanding whether to touch StackSets·AFT·Service Catalog·Permission Boundary·SCP, and recognizing which anti-patterns carry operational burden despite working.

Why Partition Accounts — Bulkhead and Blast Radius in Organizational Theory

The starting premise of multi-account strategy is this: AWS accounts are the strongest isolation boundaries for IAM, billing, service limits, and security. Within one account, two workloads can be separated by IAM policy — but that separation depends on people writing policies correctly. Split into accounts, and isolation becomes the default (default-deny by boundary) — resources in another account are invisible unless an explicit cross-account trust exists.

This is the organizational application of the bulkhead pattern from distributed systems. Just as bulkheads limit a breach to one compartment of a ship, prod account breach or service limit exhaustion in one account doesn't spill into others. In security terms: blast radius reduction. If IAM credentials in one account leak, their reach is confined to that account alone.

💡 Related theory: Account boundaries embody the essence of fault isolation. The microservices resilience principles Netflix codified in the 2010s — circuit breaker, bulkhead, backpressure — filter down to the infrastructure layer in multi-account structure. From CS perspective, this mirrors shared-nothing architecture. Database sharding isolates one shard's failure from others; account sharding isolates one workload's security, limit, or cost blast. The trade-off: isolation demands explicit trust relationships (AssumeRole, Resource Policy) for cross-account communication, observation, and deployment. Most of multi-account CI/CD complexity flows from this "isolate, then safely reconnect" work.

🔍 Deeper: AWS's multi-account guidance first crystallized in 2018's Landing Zone solution, absorbed into the managed service Control Tower in 2019. Before that, every organization designed "how many accounts and how to split" from scratch, yielding inconsistent structures. Control Tower's standard — three core accounts (Management for billing/org, Log Archive for centralized logs, Audit for security ops), with workloads grouped by OU — became the de facto industry standard. Exam questions like "What does Log Archive do?" and "Why is Audit the GuardDuty/Security Hub delegated admin?" all presume this standard structure.

Account Structure — OU Trees Inherit Policies

Dozens of accounts laid flat demand policy per account. Instead, OU (Organizational Unit) trees let SCPs inherit — like Unix directory permission inheritance.

Root
├─ Security OU
│   ├─ Log Archive Account      ← All CloudTrail/Config logs, central immutable storage
│   ├─ Audit Account            ← Security Hub/GuardDuty delegated admin
│   └─ Forensics Account        ← Incident isolation and investigation only
├─ Infrastructure OU
│   └─ Tooling/CICD Account     ← Pipeline Hub
├─ Workloads OU
│   ├─ Dev OU      → {service}-dev accounts
│   ├─ Staging OU  → {service}-staging accounts
│   ├─ PreProd OU
│   └─ Prod OU     → {service}-prod accounts (regulated workloads isolated)
├─ Sandbox OU                   ← Developer experimentation, strict SCP guardrails
└─ Suspended OU                 ← Accounts pending deletion, full Deny

The key is policy placement. "Prod forbids region outside ap-northeast-2" — attach once to Prod OU's SCP, and all prod accounts below inherit it. A new prod account entering the OU automatically receives the policy; no per-account oversight misses occur.

⚠️ Gotcha: SCP does not grant permissions — it only sets a ceiling. Write Allow * in SCP; if IAM policy doesn't separately allow it, nothing happens. SCP's true role is Deny guardrails — "forbid Root use", "forbid CloudTrail disable", "forbid region outside X". Exam pitfall: "We gave S3 permission via SCP but it doesn't work" — answer: "SCP doesn't grant; IAM policy must grant actual permission." The effective permission is the intersection of SCP (ceiling) and IAM policy (grant). Also: SCP doesn't apply to Management account itself — so keep that account workload-free, touching only billing and org structure.

Landing Zone and Account Factory — Spawn Accounts from Code

100 developers, 50 services, each needing 5 environments (sandbox·dev·staging·pre-prod·prod) = hundreds of accounts. Impossible to create by hand. Account Factory automates account creation itself.

Control Tower's built-in Account Factory is Service Catalog-based; for stronger IaC control, use AFT (Account Factory for Terraform). AFT takes account requests (e.g., ServiceNow ticket → CodeCommit request.json), provisions via pipeline, and automatically layers standard baselines — VPC, IAM Role, Config, CloudTrail, GuardDuty, Backup, KMS CMK — on top.

💡 Related theory: Account Factory lifts immutable infrastructure thinking to the account level. Just as servers are replaced, not patched, accounts become "products of a standard template". This is also the declarative vs imperative paradigm. Imperative ("create account, create VPC, enable Config") leaves order, failure handling, drift to humans. Declarative ("this account must match this standard") lets tooling reconcile desired vs observed state. Terraform·CloudFormation's core is exactly this reconciliation loop. AFT applies it to account creation: "account standard state" lives in Git, enabling audit, replay, rollback. The result: provisioning becomes idempotent.

Tooling Account Hub-Spoke — Centralize Pipeline, Loan Permissions

50 services each running CodePipeline in their own account scatters pipeline definitions, artifacts, ECR, CodeArtifact, and standardization crumbles. Enterprise standard: concentrate pipelines in Tooling (CICD) account; real deployments happen cross-account in Spoke workload accounts (Hub-Spoke).

Tooling Account (Hub)
├─ CodePipeline × 50 (per service)
├─ CodeBuild (build/test)
├─ ECR (container images central)
├─ CodeArtifact Domain (packages central)
├─ Artifact S3 + KMS Multi-Region Key
└─ Cross-Account Deploy Roles (trust relationships to Spoke)
        │
        │ sts:AssumeRole
        ▼
Each Spoke (Workload Account)
├─ CrossAccountDeployRole   ← trusts Tooling
├─ CloudFormationExecutionRole ← owns resource creation permissions
└─ Application resources (ECS/Lambda/RDS/...)

Permission design here is subtle. The Tooling pipeline assumes Spoke's CrossAccountDeployRole, which in turn hands off to CloudFormationExecutionRole. This dual-Role structure is key — the pipeline doesn't hold powerful deploy permissions directly; it borrows a scoped Spoke Role only when needed.

🔍 Deeper: Why use Multi-Region Key for KMS? It connects to the trap of cross-account artifact sharing. If Tooling's S3 holds KMS-encrypted artifacts, Spoke's CloudFormation reading them requires (1) S3 bucket policy allowing Spoke and (2) KMS key policy allowing Spoke's decryption. Miss either and "Access Denied" bites. Beginners fix S3 and forget KMS, breaking deployments. The exam gotcha: "KMS error on cross-account deploy" → nearly always "add target account/Role decryption to KMS key policy." Multi-region DR adds another layer: Multi-Region Key lets both regions reference the same key ID, simplifying policy management.

📚 Case study: Atlassian (2017) and multiple fintech firms (2020s) migrating from monolithic single-account to Hub-Spoke multi-account hit a shared lesson: "Give the Tooling pipeline too much power, and if that account breaches, it becomes a super-channel deploying to every workload account." Mature orgs explicitly restrict Tooling's deployment Role to named Spoke Roles (only certain Spoke Roles assumable) and mirror Spoke's trust policy with aws:PrincipalArn conditions ("only this specific pipeline Role"). Tooling account compromise is a supply-chain attack target — SolarWinds (2020) showed build-pipeline breach's destructiveness — and Tooling Role minimization is the defense line.

Service Catalog — Self-Service and Standardization At Once

The core tool for resolving governance-vs-speed tension is Service Catalog. Platform team publishes vetted pipeline templates (CDK Pipelines, language- and deployment-type variants) in a Portfolio; developers self-serve by selecting a Product to auto-generate their service's pipeline. Developers get speed, platform team keeps "only approved templates run" standard.

DomainSelf-ServiceGovernance
New accountAFT auto-provisionSCP auto-inherit
New pipelineService Catalog ProductTemplate validation/signing
Add secretSecrets ManagerKMS Key Policy standard
New IAM RoleDeveloper free to createPermission Boundary enforce
Console Write accessJust-In-Time elevationDefault read-only

💡 Related theory: This table is the implementation of Platform Engineering and Golden Path. Golden Path: "the path most recommended, best-trodden, where following it brings security, observability, deployment for free." Core insight: "incentive beats mandate." Don't force standards on developers; make the standard path easiest and fastest, and developers voluntarily choose it. This is behavioral economics' nudge theory. Service Catalog turns Golden Path into one click; Permission Boundary and SCP guardrail against deviation. "Incentive + guardrail" is self-service governance's essence.

Permission Boundary — Safety Rail for Authority Delegation

The riskiest self-service part is allowing "developers to create their own IAM Roles". Let them, and a developer self-assigns AdministratorAccess (privilege escalation). Permission Boundary blocks this hole.

Permission Boundary sets "the maximum authority this Role/User may hold." Even if IAM policy says Allow *, Boundary overrides it — if you cross Boundary, you have no permission. SCP is the ceiling at account/OU level; Boundary is the ceiling at individual principal level.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "*",
    "Resource": "*",
    "Condition": {
      "StringEquals": {"aws:RequestedRegion": ["ap-northeast-2"]}
    }
  }]
}

The trick: when granting "Role creation permission" to developers, add an IAM policy Condition: "new Roles only create-able if they attach this Boundary" (iam:PermissionsBoundary condition key). Result: every developer-created Role stays within Boundary, so self-service Role creation stays safe.

⚠️ Gotcha: SCP, Permission Boundary, IAM policy, Resource policy, Session policy evaluation order and relationship — miss this and the exam crumbles. Core principle: (1) Explicit Deny wins first, always. (2) Same-account effective permission = SCP ∩ Permission Boundary ∩ Identity policy (all three must allow). (3) Cross-account needs Resource policy too. Permission Boundary attached but still no access? Either "Boundary allows but Identity policy doesn't" or vice versa — Boundary restricts, not grants, so even if Boundary says Allow *, Identity must separately allow the action.

Security·Compliance Baseline — Deploy Auto to All Accounts via StackSets

Hundreds of accounts get GuardDuty·Config·CloudTrail·Backup one-by-one? Impossible; compliance holes guaranteed. CloudFormation StackSets deploy one template to many accounts and regions simultaneously.

Service-Managed StackSets + Auto-Deployment is the answer. Target an OU; enable Auto-Deployment; new accounts entering that OU auto-get baseline deployed — erasing per-account baseline install misses.

aws cloudformation create-stack-set \
  --stack-set-name SecurityBaseline \
  --permission-model SERVICE_MANAGED \
  --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
  --template-body file://baseline.yaml

Atop this: GuardDuty·Security Hub·Config each use delegated admin (Delegated Administrator) pattern, aggregating to Audit account — StackSets enable each account, Audit sees all Findings central. "Identical security tooling + central aggregation" standard combination.

🔍 Deeper: StackSets has two permission models. Self-Managed requires each target account to have AWSCloudFormationStackSetExecutionRole and admin account to have AWSCloudFormationStackSetAdministrationRole, with manual trust wiring — use when not on Organizations or deploying to external accounts. Service-Managed integrates Organizations; AWS auto-manages Roles, supports OU targeting and Auto-Deployment. Exam trigger: "auto-apply to new accounts in Organizations" → always Service-Managed + Auto-Deployment. Self-Managed for legacy·non-org·granular Role control only.

Governance Gates — Control Points in the Pipeline

Standard pipelines gate code reaching prod through multiple checks. Each gate blocks a class of risk.

PR open
  └─ CodeGuru Reviewer + SAST(Snyk/Inspector)   ← code quality/vuln before merge
PR merged to main
  └─ CodeBuild unit/integration tests
Build artifact
  └─ Inspector container/package scan + Signer signature  ← supply chain integrity
Deploy to dev (auto)
Deploy to staging (auto + smoke test)
Deploy to pre-prod (manual approval)
  └─ SSM Change Calendar check (block freeze windows)
Deploy to prod
  └─ Canary (CodeDeploy/Lambda Alias) + auto-rollback (CloudWatch Alarm)

🎯 Scenario: "Regulated fintech runs 50 microservices. Needs: ①developers create new service pipelines directly but can't deviate from company standard ②all accounts auto-get GuardDuty/Config, including new accounts ③developer-created IAM Roles can't exceed policy ceiling ④prod deploys block during freeze windows." → ① Service Catalog Portfolio + CDK Pipelines template, self-service + validated. ② Service-Managed StackSets (Auto-Deployment Enabled) on Workloads OU + GuardDuty/Security Hub/Config delegated admin on Audit account. ③ Role create permission with iam:PermissionsBoundary condition force-attach Boundary. ④ SSM Change Calendar gate on prod stage. Plus: Prod OU SCP for region/Root guardrails, Tooling cross-account deploy Role target only named Spoke Roles.

Cost Visibility — Tags Are Accounting Units

60 accounts, no visibility on who spends what → cost control fails. Core chain: tag enforcement → Cost Allocation Tag → Cost Categories. Config Rule flags non-compliant (missing required tags: team, service, env) resources; Auto-Remediation blocks or alerts. Tags guaranteed, Cost Explorer + Cost Categories sort spend by team/service; Cost Anomaly Detection ML-catches sudden spikes.

Summary

Today we covered five. First, splitting accounts into bulkhead/blast radius reduction is organizational distributed-systems resilience, OU trees inherit SCP policy one-shot. Second, Landing Zone/AFT spawn accounts from code, lifting immutable-infra and declarative thinking to account level. Third, Tooling Hub-Spoke centralizes pipelines, lending permissions cross-account AssumeRole; KMS key policy omission is gotcha #1. Fourth, Service Catalog (Golden Path) + Permission Boundary + SCP simultaneously satisfy self-service and governance — incentive and guardrail. Fifth, Service-Managed StackSets + Auto-Deployment + delegated admin auto-apply security baseline to all and new accounts — the answer.

Next: expanding this standard to on-prem datacenters, hybrid CI/CD at depth.

📝 Practice Questions

Click a choice to reveal the answer and explanation.

Question 1

What is the most fundamental security and operational reason for an organization to split from a single account into dozens of accounts?

Question 2

Which statement about SCPs (Service Control Policies) is MOST accurate?

Question 3

In an environment where 100 developers need hundreds of accounts, how can you automatically provision new accounts together with a standard baseline (VPC/Config/CloudTrail/GuardDuty)?

Question 4

In a Tooling-account Hub-Spoke structure, a cross-account pipeline deployment fails with an "Access Denied (KMS)" error. What are the most common cause and fix?

Question 5

You want to delegate IAM Role creation to developers as self-service while safely enforcing that the Roles they create cannot exceed the company policy ceiling (for example, specific Regions only). How?

Question 6

In an Organizations environment, how can you deploy the GuardDuty and Config baselines to all accounts and have them applied automatically to accounts that join the OU in the future?

Question 7

Which statement MOST accurately describes the relationship between the Platform Engineering concept of the "Golden Path" and Service Catalog?

📌 Today's Summary

There are five key takeaways today. First, account separation is the organizational application of the distributed-systems resilience principles of bulkheads and blast-radius reduction, and SCPs (permission ceilings and Deny guardrails) are inherited through the OU tree. Second, Landing Zone/Account Factory (AFT) stamps out accounts as code, lifting the declarative and immutable infrastructure philosophy to the account level and automatically attaching the standard baseline. Third, a Tooling-account Hub-Spoke centralizes pipelines and lends only permissions through cross-account AssumeRole, and a missing KMS key policy (along with SolarWinds-style supply chain risk) is the key pitfall. Fourth, Service Catalog (Golden Path), Permission Boundaries (enforcing iam:PermissionsBoundary), and SCPs satisfy both self-service and governance. Fifth, Service-Managed StackSets + Auto-Deployment + a delegated administrator is the right answer for automatically applying the security baseline to "all accounts + new accounts."

PreviousWeek 14 Comprehensive Review: The Big Picture of Security Automation Stack and Practical ScenariosWeek 14 · Day 5Next Hybrid CI/CD: Bridging On-Premises and AWS into One Deployment ModelWeek 15 · Day 2

Official references

  • DOP-C02 official exam page(opens in a new tab)
  • AWS Organizations documentation(opens in a new tab)
  • AWS IAM documentation(opens in a new tab)
  • AWS KMS documentation(opens in a new tab)
  • Amazon S3 documentation(opens in a new tab)
  • Amazon GuardDuty documentation(opens in a new tab)

On this page

  • Why Partition Accounts — Bulkhead and Blast Radius in Organizational Theory
  • Account Structure — OU Trees Inherit Policies
  • Landing Zone and Account Factory — Spawn Accounts from Code
  • Tooling Account Hub-Spoke — Centralize Pipeline, Loan Permissions
  • Service Catalog — Self-Service and Standardization At Once
  • Permission Boundary — Safety Rail for Authority Delegation
  • Security·Compliance Baseline — Deploy Auto to All Accounts via StackSets
  • Governance Gates — Control Points in the Pipeline
  • Cost Visibility — Tags Are Accounting Units
  • Summary
  • Practice Questions
  • Today's Summary