This chapter covers the Governance pillar of the Microsoft Azure Well-Architected Framework, focusing on how to design and implement governance controls for identity, resources, and compliance in Azure. For the AZ-104 exam, governance is a critical topic that appears in approximately 15-20% of questions, often interwoven with identity management, policy, and cost management. Understanding governance mechanisms like Azure Policy, Azure Blueprints, management groups, and resource tagging is essential for any Azure Administrator tasked with managing and securing enterprise-scale environments.
Jump to a section
Imagine a city government that manages land and building construction. The city has a master plan (Azure Policy) that defines rules: no building over 10 stories in residential zones, all buildings must have fire sprinklers, and commercial buildings need a loading dock. When a developer (cloud admin) submits a blueprint (ARM template) to build a new office, the permit office (Azure Policy engine) checks every detail against the master plan before issuing a permit. If the blueprint violates a rule, the permit is denied with a specific reason. Once built, building inspectors (Azure Blueprints artifact deployment) verify that the actual construction matches the approved blueprint and that ongoing modifications (like adding a helipad) comply with the plan. The city also uses tags (like 'owner' and 'cost center') to categorize all buildings, and the tax assessor (Cost Management) uses these tags to bill departments. If a department tries to build without a permit (Azure Policy deny effect) or violates the plan, the city can stop construction or require immediate remediation. This system ensures consistency, security, and cost control across all city development, just as governance frameworks enforce organizational standards in Azure.
What is the Governance Pillar and Why Does It Exist?
The Governance pillar of the Well-Architected Framework provides guidance on how to manage and control Azure resources at scale. It ensures that your environment remains secure, compliant, and cost-effective by enforcing organizational standards and best practices. Without governance, a cloud environment can quickly become a chaotic mix of unmanaged resources, security vulnerabilities, and spiraling costs. The pillar focuses on four key areas: - Policy and Compliance: Using Azure Policy to enforce rules and ensure resources comply with corporate or regulatory standards. - Resource Organization: Using management groups, subscriptions, and resource groups to structure resources logically. - Cost Governance: Monitoring and controlling spending through budgets, alerts, and tagging. - Automation and Remediation: Automating compliance checks and remediation actions to maintain a desired state.
For the AZ-104 exam, you must understand how to implement these controls, especially Azure Policy and management groups, as they are frequently tested.
How Governance Works Internally
Azure governance operates through a hierarchy of management groups, subscriptions, resource groups, and individual resources. At the top, a tenant has a root management group. Under it, you can create a hierarchy of management groups to represent your organization's structure (e.g., by department, geography, or environment). Each management group can have Azure Policy assignments and role assignments that are inherited by all child subscriptions and resource groups.
Azure Policy is the core enforcement mechanism. When you create a policy definition (e.g., 'Allowed locations for resources'), Azure Policy evaluates all existing and new resources against that definition. The evaluation occurs at resource creation, update, and periodically (every 24 hours for compliance scanning). The policy engine checks the resource's properties against the policy rule. If a resource violates a policy with effect 'Deny', the creation or update is blocked. If the effect is 'Audit', a compliance warning is logged but the action proceeds. 'Append' adds additional properties (like tags) during creation. 'DeployIfNotExists' triggers a remediation task to fix non-compliant resources.
Azure Blueprints extend this by packaging policy assignments, role assignments, ARM templates, and resource groups into a repeatable artifact. When you assign a blueprint to a subscription, Azure Blueprints deploys all included artifacts and creates a versioned deployment record. This allows you to track which blueprint version was applied and audit changes over time.
Key Components, Values, Defaults, and Timers
- Management Groups: Up to 10,000 management groups in a single directory. A management group tree can support up to six levels of depth (not including the root). The root management group is created automatically for each Azure AD tenant and cannot be deleted.
- Azure Policy: Over 100 built-in policy definitions. Custom definitions can be created. Policy assignments can target management groups, subscriptions, or resource groups. The default compliance scan interval is 24 hours, but you can trigger an on-demand scan using Start-AzPolicyComplianceScan.
- Policy Effects:
- Deny: Blocks the resource creation/update and returns an error.
- Audit: Creates a warning in the activity log but allows the action.
- Append: Adds specified fields (e.g., tags) to the resource during creation/update.
- AuditIfNotExists: Audits resources that do not have a specified extension or configuration.
- DeployIfNotExists: Deploys a template to remediate non-compliant resources.
- Disabled: Turns off the policy.
- Azure Blueprints: Each blueprint can have multiple artifacts. Blueprint versions are created when you publish. Assignments can be locked to prevent unauthorized modifications (ReadOnly, DoNotDelete, or None).
- Tags: Resource tags are key-value pairs. Tags can be applied to resources, resource groups, and subscriptions. Azure Policy can enforce tagging rules (e.g., require a 'CostCenter' tag).
- Cost Management + Billing: Budgets can be set at subscription or resource group scope. Alerts trigger at thresholds (e.g., 50%, 100%, 200% of budget).
Configuration and Verification Commands
To create a management group:
New-AzManagementGroup -GroupName "Contoso" -DisplayName "Contoso"To assign a built-in policy:
$definition = Get-AzPolicyDefinition | Where-Object {$_.Properties.DisplayName -eq "Allowed locations"}
New-AzPolicyAssignment -Name "AllowedLocations" -PolicyDefinition $definition -Scope "/subscriptions/{subscription-id}" -PolicyParameterObject @{listOfAllowedLocations=@("eastus","westus")}To check compliance:
Get-AzPolicyState -PolicyAssignmentName "AllowedLocations" -Scope "/subscriptions/{subscription-id}"To create a blueprint:
Import-AzBlueprintWithArtifact -Name "MyBlueprint" -SubscriptionId "{subscription-id}" -InputPath "./blueprint"
Publish-AzBlueprint -Blueprint $blueprint -Version "1.0"
New-AzBlueprintAssignment -Name "MyBlueprintAssignment" -Blueprint $blueprint -SubscriptionId "{subscription-id}" -Location "eastus"Interaction with Related Technologies
Azure Policy integrates with Azure RBAC: while RBAC controls who can perform actions, Policy controls what resources can be created or modified. Policy does not replace RBAC; they work together. For example, a user may have Contributor role (can create VMs), but a policy may deny creating VMs in certain regions.
Azure Blueprints interact with Azure Policy and RBAC by bundling them into a single assignable package. Blueprints also integrate with Azure DevOps through the Azure Blueprints extension, enabling CI/CD for governance.
Cost Management uses tags and policy compliance data to provide cost analysis and recommendations. Budgets can trigger automation runbooks to shut down resources when spending exceeds limits.
Exam-First Details
The root management group is created automatically and cannot be deleted. All subscriptions and management groups inherit policies from the root.
Policy evaluation is event-driven at resource creation/update and also runs a full compliance scan every 24 hours.
The 'Append' effect can only add properties, not modify or remove existing ones. Use 'Modify' effect (preview) for modifications.
Azure Blueprint artifacts are immutable after publishing; you must create a new version to make changes.
The maximum number of policy assignments per scope is 200.
The order of evaluation: RBAC first, then Azure Policy. If a user lacks permission, policy is not evaluated.
Common Trap Patterns
Trap: Confusing Azure Policy with RBAC. RBAC controls access; Policy controls resource properties. A common wrong answer is using RBAC to enforce tagging instead of Policy.
Trap: Thinking that policy evaluation happens only at creation time. Actually, it also runs periodic scans.
Trap: Assuming that policy inheritance stops at subscription boundaries. Policies assigned to a management group apply to all child subscriptions and resource groups.
Trap: Believing that Azure Blueprints can update existing resources. Blueprints deploy artifacts at assignment; they do not continuously enforce compliance. Use Azure Policy for ongoing enforcement.
How It Interacts with Related Technologies
Azure AD: Management groups and policies are tied to an Azure AD tenant. Azure AD provides the identity layer for RBAC, which works alongside Policy.
Azure Resource Manager (ARM): All policy evaluations happen via ARM during resource deployment. ARM templates can be included in Blueprints.
Azure Monitor: Policy compliance data is sent to Azure Monitor logs if diagnostic settings are configured. Alerts can be set for policy violations.
Azure Automation: DeployIfNotExists effects can trigger Automation runbooks for remediation.
Summary of Defaults and Limits
| Component | Limit/Default | |-----------|---------------| | Management groups per directory | 10,000 | | Levels of management group hierarchy | 6 (excluding root) | | Policy assignments per scope | 200 | | Policy definition size limit | 1 MB | | Blueprint artifact count per blueprint | 200 | | Compliance scan interval | 24 hours | | Number of tags per resource | 50 | | Tag key length limit | 512 characters | | Tag value length limit | 256 characters |
These numbers are frequently tested on the exam.
Define Organizational Hierarchy
Start by creating a management group hierarchy that mirrors your organization's structure. For example, create a root management group for the entire company, then child groups for departments like 'Finance', 'Engineering', and 'Marketing'. Under each department, you may have environment-specific groups like 'Production' and 'Non-Production'. This hierarchy allows you to apply policies and RBAC at the appropriate level. In the Azure portal, navigate to Management Groups and create the structure. The root management group is automatically created by Azure AD and cannot be deleted. Each management group can have up to 10,000 child groups, and the depth is limited to six levels. Use PowerShell or Azure CLI for automation: `New-AzManagementGroup -GroupName 'Finance' -DisplayName 'Finance' -ParentId '/providers/Microsoft.Management/managementGroups/Contoso'`.
Assign Azure Policies for Compliance
Identify the compliance requirements for your organization, such as allowed regions, required tags, or encryption settings. Use built-in policy definitions or create custom ones. Assign policies at the appropriate scope: management group, subscription, or resource group. For example, assign a policy to require a 'CostCenter' tag on all resources. Use the 'Append' effect to automatically add the tag if missing. For location restrictions, use the 'Deny' effect to block resources in disallowed regions. Each policy assignment can have parameters, such as the list of allowed locations. Verify assignments with PowerShell: `Get-AzPolicyAssignment -Scope '/providers/Microsoft.Management/managementGroups/Contoso'`. Remember that policies are evaluated during resource creation/update and through periodic compliance scans every 24 hours.
Create Azure Blueprints for Repeatable Environments
Design an Azure Blueprint that packages all necessary policies, role assignments, ARM templates, and resource groups for a standard environment, such as a 'Production Subscription'. Create the blueprint definition using the Azure portal or PowerShell. For example, a blueprint might include a policy requiring encryption, a Contributor role assignment for the operations team, and an ARM template that deploys a virtual network. After defining artifacts, publish the blueprint with a version number. Then assign the blueprint to one or more subscriptions. During assignment, you can set parameters and choose a lock mode (ReadOnly, DoNotDelete, or None). Blueprint assignments are tracked in the portal, and you can see which version was applied. To update, publish a new version and reassign. Use PowerShell: `New-AzBlueprintAssignment -Name 'ProdAssignment' -Blueprint $blueprint -SubscriptionId 'sub-id' -Location 'eastus'`.
Implement Tagging Strategy for Cost and Management
Define a tagging taxonomy that includes tags like 'Environment', 'CostCenter', 'Owner', and 'Project'. Use Azure Policy to enforce tagging: for example, a policy with effect 'Append' can add missing required tags during resource creation. For existing resources, use a 'DeployIfNotExists' policy that triggers a remediation task to add tags. Tags can be used in Cost Management to group and analyze spending. For example, you can create a budget at the subscription level that alerts when costs exceed a threshold, and filter by 'CostCenter' tag. Tags also help in organizing resources for management and automation. Note that tags are not inherited from resource groups; each resource must have its own tags. Use PowerShell to bulk-tag resources: `Set-AzResource -ResourceId $resource.Id -Tag $tags -Force`.
Set Up Cost Governance with Budgets and Alerts
In the Azure portal, go to Cost Management + Billing and create budgets at the subscription or resource group scope. Define the budget amount, time period (monthly, quarterly, yearly), and set alert thresholds (e.g., 50%, 100%, 200% of budget). When a threshold is reached, Azure sends email alerts to the specified recipients. For automated actions, you can configure budget alerts to trigger an action group that runs an Azure Automation runbook to shut down non-critical resources. For example, create a budget for the 'Development' subscription with a $500 monthly limit and an alert at 80% that sends an email to the dev team. Use PowerShell: `New-AzConsumptionBudget -Name 'DevBudget' -Amount 500 -TimeGrain Monthly -StartDate '2025-01-01' -EndDate '2025-12-31' -Category Cost -Scope '/subscriptions/sub-id' -NotificationKey 'email' -Operator GreaterThan -Threshold 80 -ContactEmails 'devteam@contoso.com'`.
Monitor and Remediate Compliance Drift
Regularly review policy compliance in the Azure Policy dashboard. Identify non-compliant resources and take remediation actions. For policies with 'DeployIfNotExists' effect, you can create remediation tasks that automatically fix non-compliant resources. For example, if a policy requires a specific agent to be installed on VMs, a remediation task can deploy the agent to non-compliant VMs. Use PowerShell to start a remediation: `Start-AzPolicyRemediation -Name 'RemediateVMAgent' -PolicyAssignmentId '/subscriptions/sub-id/providers/Microsoft.Authorization/policyAssignments/RequireVMAgent'`. For manual remediation, you can modify resources directly or use Azure Automation runbooks. Also, use Azure Monitor alerts to notify administrators of policy violations. Set up activity log alerts for policy events like 'Deny' actions. This proactive monitoring ensures your environment remains compliant over time.
Enterprise Scenario 1: Multinational Corporation with Regional Compliance
A global company with operations in North America, Europe, and Asia needs to ensure that all Azure resources comply with regional data sovereignty laws. For example, European resources must stay within EU regions, and US resources must be in US regions. The company creates a management group hierarchy: a root group for the entire tenant, then child groups for 'Americas', 'EMEA', and 'APAC'. Under each region, there are 'Production' and 'Non-Production' groups. At the regional management group level, they assign an Azure Policy with 'Deny' effect that restricts allowed locations to the specific regions. For example, the 'EMEA' group policy only allows 'West Europe' and 'North Europe'. Additionally, they require all resources to have a 'DataResidency' tag indicating the region. This policy uses 'Append' to add the tag if missing. The company also uses Azure Blueprints to deploy a standard landing zone for each region, including network topology, governance policies, and RBAC. A common issue is that developers sometimes try to deploy resources in unauthorized regions, but the 'Deny' policy blocks the deployment and logs the attempt. The governance team monitors these attempts and provides training to developers. Performance-wise, the policy evaluation adds negligible latency to resource creation (typically less than 100ms). Misconfiguration can occur if the policy scope is too broad or too narrow; for example, accidentally allowing all locations at the root management group would override regional policies if not properly structured.
Enterprise Scenario 2: Cost-Conscious Startup with Multiple Departments
A startup has separate Azure subscriptions for Engineering, Marketing, and Sales. Each team has a monthly budget. The company uses Azure Policy to enforce tagging: every resource must have 'Department' and 'Project' tags. A policy with 'Append' effect adds the tags during creation, but for existing resources, they run a remediation task. They set up budgets at each subscription level. For example, the Engineering subscription has a $10,000 monthly budget with alerts at 80%, 100%, and 120%. When the 100% alert fires, an action group triggers an Automation runbook that stops all non-production VMs. This prevents cost overruns. The company also uses management groups to aggregate costs across departments. A common problem is that teams forget to tag resources, causing budget alerts to miss certain costs because tags are missing. To mitigate, they enforce tagging with policy and also use Cost Management's 'Group by' tag feature. Another issue is that budget alerts sometimes fire late due to the 24-hour latency in cost data. The company accounts for this by setting alerts at lower thresholds (e.g., 70% instead of 80%). This scenario highlights the importance of combining policy enforcement with proactive cost monitoring.
Enterprise Scenario 3: Government Agency with Strict Compliance Requirements
A government agency must comply with FedRAMP and NIST frameworks. They use Azure Policy to enforce hundreds of security controls, such as requiring encryption at rest, enforcing TLS versions, and blocking public IP addresses on VMs. They create custom policy initiatives (policy sets) that bundle multiple policies into a single assignment. For example, an initiative called 'FedRAMP High Baseline' contains 50 policy definitions. They assign this initiative at the root management group to cover all subscriptions. They also use Azure Blueprints to deploy a secure landing zone that includes network security groups, encryption configurations, and logging. The blueprint includes role assignments for security administrators. To maintain compliance, they run weekly compliance scans and generate reports using Azure Policy's compliance dashboard. They also use Azure Sentinel to integrate policy violation alerts. A common mistake is assigning too many policies at the root, which can cause performance issues during policy evaluation. Azure recommends limiting the number of policy assignments per scope to 200. Another issue is that some policies may conflict; for example, one policy requires a tag, while another denies resources without that tag. Proper testing in a non-production environment is essential.
Exam Focus: What AZ-104 Tests on Governance
AZ-104 objective 1.2 focuses on 'Govern resources with Azure Policy, Azure Blueprints, and management groups'. You should expect around 5-10 questions on these topics. The exam tests your ability to:
Create and manage management groups, including understanding the hierarchy and inheritance.
Assign built-in and custom Azure Policy definitions, understanding effects like Deny, Audit, Append, and DeployIfNotExists.
Create and assign Azure Blueprints, including artifact types and versioning.
Implement tagging strategies using Azure Policy.
Understand cost governance basics, but deep cost management is not heavily tested.
Common Wrong Answers and Why Candidates Choose Them
Confusing Azure Policy with RBAC: A question asks how to ensure resources are only created in 'East US'. Candidates often select 'Assign a role with Contributor access to East US only'. This is wrong because RBAC controls who can create resources, not where. The correct answer is to create an Azure Policy with 'Deny' effect for allowed locations.
Thinking policy evaluation is only at creation time: When asked 'When does Azure Policy evaluate resources?', candidates may answer 'Only during resource creation'. Wrong. Policy evaluates at creation, update, and periodically every 24 hours.
Assuming Blueprints enforce ongoing compliance: A question might say 'You need to ensure that all resources in a subscription comply with a set of policies. What should you use?' Some candidates choose 'Azure Blueprints' because it packages policies. But Blueprints only deploy policies at assignment time; ongoing enforcement requires Azure Policy itself. The correct answer is to assign Azure Policy directly.
Mixing up management group limits: Candidates may think the root management group can be deleted or that the depth limit is 10 levels. The root cannot be deleted, and the maximum depth is 6 levels (excluding root).
Specific Numbers, Values, and Terms That Appear Verbatim
Management groups: 10,000 max per directory, 6 levels depth.
Policy assignments per scope: 200.
Compliance scan interval: 24 hours.
Tag limits: 50 tags per resource, key 512 chars, value 256 chars.
Blueprint artifact limit: 200 per blueprint.
Policy definition size limit: 1 MB.
Effects: Deny, Audit, Append, AuditIfNotExists, DeployIfNotExists, Disabled.
Lock modes on Blueprints: ReadOnly, DoNotDelete, None.
Edge Cases and Exceptions
Policy at resource group vs. subscription: Policies assigned at resource group scope override subscription-level policies only if they are more restrictive? Actually, the most restrictive policy wins. For example, if a subscription policy allows 'East US' and 'West US', and a resource group policy allows only 'East US', the effective allowed locations are 'East US' (most restrictive). However, if the subscription policy denies 'West US', the resource group cannot allow it.
Append effect: Can only add properties, not modify or remove. Use 'Modify' effect (preview) for changes.
DeployIfNotExists vs. AuditIfNotExists: DeployIfNotExists attempts to remediate; AuditIfNotExists only audits.
Inheritance: Policies assigned to a management group apply to all child subscriptions and resource groups, but not to management groups in other branches? Actually, inheritance is downward only within the same tree.
Cross-tenant management groups: Management groups are tenant-scoped; you cannot have management groups spanning multiple tenants.
How to Eliminate Wrong Answers Using the Underlying Mechanism
When you see a question about enforcing a rule (e.g., 'all VMs must have a tag'), think: 'Is this about who can do something (RBAC) or what can be done (Policy)?' If it's about properties, it's Policy. For ongoing enforcement, Policy is needed; Blueprints are for initial deployment. For cost control, look for budgets and tags. Always check the scope: if the question mentions 'all subscriptions', the answer likely involves management group-level assignment. Memorize the limits and effects. When in doubt, eliminate options that mention roles (RBAC) for property enforcement, or options that suggest manual processes.
Management groups create a hierarchy for applying governance across subscriptions; max 10,000 groups, 6 levels deep.
Azure Policy evaluates resources at creation, update, and every 24 hours; use effects Deny, Audit, Append, DeployIfNotExists.
Azure Blueprints package policies, roles, and templates into a versioned, assignable artifact for consistent deployments.
Tags are not inherited; use Azure Policy with Append or DeployIfNotExists to enforce tagging.
Cost governance uses budgets and alerts; tags enable cost allocation and analysis.
Policy assignments are limited to 200 per scope; blueprint artifacts limited to 200 per blueprint.
Root management group cannot be deleted; all subscriptions and management groups inherit policies from it.
RBAC controls access; Policy controls resource configuration; they work together but are distinct.
These come up on the exam all the time. Here's how to tell them apart.
Azure Policy
Enforces rules on existing and new resources.
Evaluates resources continuously (every 24 hours scan).
Supports effects like Deny, Audit, Append, DeployIfNotExists.
Can be assigned at management group, subscription, or resource group scope.
Does not package multiple artifacts; each policy is assigned individually or via initiatives.
Azure Blueprints
Deploys a collection of artifacts (policies, roles, templates) at assignment time.
Does not enforce compliance after deployment; relies on included policies.
Artifacts are versioned; you can track which version was applied.
Assigned to a subscription only; cannot be assigned to resource groups or management groups directly.
Ideal for consistent environment setup (landing zones).
Mistake
Azure Policy and RBAC are the same thing.
Correct
Azure Policy controls resource properties (e.g., allowed locations, required tags) and enforces compliance, while RBAC controls who has access to perform actions. They are complementary but distinct. Policy does not grant or deny permissions; it only evaluates resource configuration.
Mistake
Azure Blueprints continuously enforce compliance after assignment.
Correct
Blueprints deploy artifacts (policies, roles, templates) at assignment time. They do not monitor or enforce compliance over time. For ongoing enforcement, you must rely on Azure Policy assignments included in the blueprint. Blueprint assignments are versioned snapshots, not live enforcement.
Mistake
The root management group can be deleted or renamed.
Correct
The root management group is automatically created by Azure AD and cannot be deleted or renamed. It is the top-level container for all management groups and subscriptions in a tenant.
Mistake
Policy evaluation only occurs when a resource is created.
Correct
Azure Policy evaluates resources during creation, update, and periodically through compliance scans every 24 hours. Additionally, on-demand scans can be triggered. This ensures that drift from compliance is detected.
Mistake
Tags applied to a resource group are inherited by resources within it.
Correct
Tags are not inherited from resource groups. Each resource must have its own tags. However, Azure Policy can be used to automatically propagate tags from resource groups to resources using the 'Append' effect or a 'DeployIfNotExists' remediation task.
Reveal each answer, then mark whether you got it right. Score 60%+ to unlock the next chapter.
Azure Policy is a service that enforces rules on resources to ensure compliance. It evaluates resources continuously and can block non-compliant actions. Azure Blueprints is a deployment tool that packages policies, role assignments, and ARM templates into a repeatable, versioned artifact. Blueprints deploy these artifacts at assignment time but do not enforce compliance over time. Think of Policy as the ongoing rulebook, while Blueprints are the initial setup kit.
Use Azure Policy with the 'Append' effect to automatically add required tags during resource creation. For existing resources, use a policy with 'DeployIfNotExists' effect and create a remediation task to add tags. Alternatively, you can use Azure Policy with 'Modify' effect (preview) to modify tags. Ensure the policy is assigned at the subscription or management group scope to cover all resources.
No, the root management group is automatically created by Azure AD and cannot be deleted or renamed. It is the top-level container for all management groups and subscriptions in your tenant. You can create child management groups under it to organize your hierarchy.
Azure Policy evaluates resources during resource creation and update operations. Additionally, it runs a full compliance scan every 24 hours. You can also trigger an on-demand scan using the `Start-AzPolicyComplianceScan` PowerShell cmdlet. This ensures that any changes to resources or policies are detected.
You can have up to 10,000 management groups in a single directory. The hierarchy can have up to six levels of depth (not including the root management group). Each management group can have multiple child groups and subscriptions. These limits are important to consider when designing your governance structure.
The 'Append' effect adds additional fields (such as tags) to a resource during creation or update. It does not modify or remove existing fields. For example, you can use it to automatically add a 'CostCenter' tag if it is missing. The effect is evaluated before the resource is created, so it ensures the resource is compliant from the start.
You can create custom policy definitions using JSON. Define the policy rule, parameters, and effect. Then use the Azure portal, PowerShell (`New-AzPolicyDefinition`), or Azure CLI to create the definition. For example, a policy to require a specific tag would have a rule that checks if the tag exists and uses 'Append' or 'Deny' effect. Custom definitions can be assigned like built-in ones.
You've just covered Well-Architected Framework: Governance Pillar — now see how well it sticks with free AZ-104 practice questions. Full explanations included, no account needed.
Done with this chapter?