AWS Multi-Account Control Assurance: Define What a Green Result Covers
Separate Control Tower configuration, analyzer coverage and observed enforcement using version-specific scope records, counterexamples and a reusable AWS...
Abstract: accept a bounded claim, not a dashboard color
A green control result is meaningful only when the reader knows what was evaluated. An enabled policy, a clear detector, a potential-access finding and an observed denied request describe different facts. Joining them without their account, principal, Region, resource and provisioning-path scope creates an assurance statement broader than its evidence. This paper recommends a claim-to-scope register that preserves those distinctions through landing-zone changes and routine account expansion.
The reader is a cloud or security owner deciding whether a multi-account governance change is ready to be accepted. The decision is not whether AWS Control Tower or IAM Access Analyzer is useful. It is which narrowly stated claims the organization can support now, which require operating evidence, and which remain investigations or accepted exceptions. The proposed outputs are a coverage map, an evidence worksheet, a bounded fixture plan and an owner-reviewed statement with explicit change triggers.
This is an educational reference framework. The organization, account labels, resources and fixture expectations are hypothetical. No customer configuration was inspected, AWS control enabled, analyzer purchased, denied request executed or legal compliance established. Primary documentation was checked on October 7, 2026. AWS behavior depends on the selected control, resource, principal, Region and landing-zone version. Examples are not Ampity customer case studies; applying the framework requires the responsible workload owners to review its applicability.
1. Start with the assurance statement someone needs to sign
Replace “the landing zone is compliant” with a claim that could be contradicted. For example: a specified member-account principal cannot read one synthetic role through the selected request path under a recorded policy revision. Or: the selected resource's external policy sharing was evaluated by a named analyzer in its Region at a known time. These statements can be checked. Neither says that every identity is least privileged or that every account meets a regulatory obligation.
Write the business reason alongside the technical claim. An organization expanding into another Region may need assurance that existing public-sharing detection still covers its new resources. A platform team replacing provisioning automation may need assurance that its chosen checks cover the replacement path. An OU move may require a new effective-policy review. Different changes therefore produce different evidence requirements even when the console presents them through a common enabled-controls view.
Name the recipient who relies on the claim and the owner who can accept its limits. Security may accept a deliberate public distribution resource while the application owner confirms that no private records are placed there. Platform operations may retain a temporary deployment exception while a different owner accepts the exposure. A tool cannot make these decisions from its status alone. Preserve the signed claim and its exclusions rather than only a screenshot of an aggregate score.
2. Define the evidence classes before combining them
Configuration evidence says that an identified artifact existed or was enabled at a recorded revision and scope. Analysis evidence describes a result under the analyzer's documented inputs and assumptions. Operating evidence describes what an identified principal and request actually did in an authorized observation. Acceptance evidence records an accountable owner's decision about the supported claim and remaining gaps. These are complementary classes, not interchangeable maturity levels.
An observed denial does not prove that every denied action is blocked by the intended control. The request might have used the wrong credentials, referenced a missing resource or failed before authorization. Conversely, a policy analysis can expose potential sharing without any request having used it. Treating such a finding as a proven data incident can send responders toward the wrong question. Treating it as harmless because no use is known can ignore a meaningful exposure.
Keep expected and observed outcomes in different fields. In this paper all fixture outcomes are expectations, not results. A completed record should retain the actual outcome, attribution confidence, configuration revision and observation limitations. A blank actual-result field remains unknown. “Not applicable,” “not recorded,” “not enabled,” “no finding” and “confirmed denied” must not collapse into the same passed state merely because a reporting system needs one color.
3. Map Control Tower behavior to the path it evaluates
AWS's control-behavior reference distinguishes preventive mechanisms implemented through Organizations policies, detective controls implemented through Config rules and proactive controls implemented through CloudFormation hooks. A proactive hook evaluates its applicable CloudFormation resources; it is not an account-wide interceptor for every direct service API. Detective controls have supported-Region boundaries. Exact request/resource scope still comes from the chosen control rather than its behavior category.
Use this distinction to challenge a provisioning change. If an application team replaces a CloudFormation path with direct API calls, an earlier proactive result does not establish equivalent checks on the new path. Another mechanism may already enforce the required property, but that is a separate evidence record. Do not infer a security bypass merely from missing hook coverage, and do not infer protection merely from the account remaining governed. Identify the actual remaining enforcement point.
Avoid labeling every detective status as enforcement. A detector can identify an unwanted state after configuration exists. Its result can help an owner prioritize a correction without preventing the original change. For a requirement demanding refusal before exposure, compare preventive or provisioning controls against the actual request path. For a requirement demanding visibility, examine recording, evaluation and notification. The same resource can need both, with different stop conditions and owners.
4. Make landing-zone version and integrations explicit
Landing-zone version 4.0 changes the assumptions behind an older governance inventory. The migration guide describes optional service integrations and a controls-focused setup. The version-specific key changes explain that landing-zone Config integration supplies recording to service-integration accounts; member-account recording needs the Config baseline enabled on managed OUs. A central setting alone is not member-account coverage evidence.
Capture version, integration settings, OU/account configuration and actual artifacts as one dated context. Do not transfer a pre-4.0 baseline screenshot into a new controls-only estate. The feature comparison distinguishes availability of preventive/proactive controls from detective features when Config integration is disabled. A selected enabled policy can remain useful without establishing the separate detector claim. The configuration must match the question being accepted.
Current reference wording is not perfectly uniform. The control-behavior page says mandatory controls are no longer applied by default from 4.0, while the mandatory-controls reference retains broad default statements alongside replacements and integration-specific changes. This paper does not resolve that discrepancy into an evergreen guarantee. Use the version-specific guidance and observed artifact inventory; preserve unresolved discrepancies. Do not claim either all mandatory controls always apply or none can be deployed.
5. Keep management-account exceptions visible
The Control Tower management-account exception permits management-account root and administrators to perform work that controls would otherwise deny. Organizations SCP guidance separately states that SCPs do not constrain management-account users or roles and do not grant permissions. A delegated administrator that remains a member account is not the same exception. Principal class and account role belong in the claim, not a footnote after acceptance.
This is a boundary to manage, not a recommendation to move ordinary workloads into management. Separate prevention from accountability. Logging can record an action without blocking it, and the existence of a provider logging description does not show that a chosen record is retained and available to this reviewer. Verify the selected observation source and access separately. An owner should know which changes rely on privileged administrative governance rather than the member-account restriction being tested.
The same review must distinguish ordinary roles from service-linked roles, which SCPs do not constrain. Do not describe a successful member-role fixture as a result for all AWS services or all principals. If a required workflow uses a different execution principal, identify that principal and evaluate its actual policy boundary. An account-wide label hides this change in actor even when the resource name and requested business outcome remain unchanged.
6. Use a scope map to find questions, not certify the estate
The first figure describes a hypothetical organization with management and member-account boundaries. Within a member account it separates two Regions and two provisioning paths. Its labels identify documented mechanisms, an intentional account exception and a deliberately unverified Region. The map is not a claim that all listed artifacts are deployed or that a selected policy protects every request passing through a box.
*Reference scope map. Boundaries represent organization/account and account-Region scope. Blue identifies a configured mechanism to verify, brown a documented exception or coverage gap. No line represents data movement or a universal permission decision. Read the worksheet for exact control and principal identifiers.*
Translate each visible gap into a question. Does the new Region have recording for this supported resource? Is the CloudFormation execution role inside the intended SCP scope? Does a direct API path have the required independent protection? Can management administrators alter evidence that the acceptance process relies on? The map guides that investigation, while the register records actual answers. Adding icons or frames cannot replace those observations.
7. Separate external, internal and unused-access questions
IAM Access Analyzer's overview distinguishes external sharing, access to selected internal resources and unused identity access. External resource analysis is Region-scoped. An organization trust zone treats access within that zone as trusted for external analysis; no external finding is therefore not proof of least privilege inside the organization. Internal analysis has its own selected resources and supported-resource boundary. Unused findings do not gain additional coverage simply by duplicating analyzers across Regions.
Choose the analyzer from the question rather than buying three identical-looking dashboards. For external sharing, inventory supported resources and their Regions. For a critical internal resource, identify which selected resource and principal relationships need evaluation. For unused permissions, record the activity window and legitimate infrequent work that must remain possible. Keep these records separate even when the same team manages the tools. Their empty-result meanings are different.
Do not let an analyzer type silently define the business trust model. An organization can consider an internal account trusted for one analytical purpose while restricting its access to private application records. Similarly, an external collaborator can have an approved narrowly scoped share. The reviewer needs the intended principal and action boundary before deciding whether a finding is acceptable. “Outside” is a useful analysis distinction, not a complete verdict about every relationship.
8. Distinguish potential permission from observed use
The finding-concepts guide explains that external findings derive from policy analysis, not examination of access logs. It also does not inspect external accounts' identities and configuration. Active, archived and resolved finding states have different meanings. Refresh after policy changes can take time, with RCP changes evaluated on periodic scanning rather than automatically causing an immediate resource rescan. Record the checked time, finding identity and policy context.
Use an external finding to ask whether sharing is intended and whether its scope meets the contract. Use separately authorized activity evidence to ask what actually happened. An absence of logged use does not remove a potential permission, and a potential permission does not prove a successful disclosure. If an incident is suspected, preserve the investigation boundary and obtain appropriate evidence access rather than asking the dashboard to answer both questions.
Archive with a reason, owner and recheck condition. Archiving does not modify the underlying access. Resolution after removing access is different, but its refreshed analysis remains scoped to the selected mechanism. An acceptance record should retain the original finding and disposition so a later reviewer can understand why the dashboard became quiet. A changed trust zone or archive rule can change visible findings without improving the resource's actual permission contract.
9. Compare four assurance options honestly
Accepting an enabled-state dashboard can be sufficient for a narrow deployment statement: named controls were reported enabled in the declared scope. It is insufficient for a statement that all required refusals occurred. Configuration and analyzer coverage can support a stronger account/resource exposure review, but potential permissions remain different from use. Bounded fixtures add operating evidence for one request and context, not an exhaustive enumeration of every future authorization decision.
Where the required path is outside coverage, compare adding a different mechanism with retaining a named exception. A provisioning hook cannot automatically fill a direct API gap. Another preventive policy, application gate or detector may be appropriate, but it changes permissions, ownership and failure behavior. An organization that cannot operate a new mechanism may choose a narrower permitted workflow while developing coverage. Record the lost capability and residual consequence rather than pretending the design is complete.
Keep a comparison record with four fields per option: supported claim, evidence required, operating burden and remaining exposure. Avoid a weighted score that lets cheaper operations offset a prohibited disclosure. Some requirements are hard constraints. Others permit a time-bounded exception. The acceptance owner must make that distinction explicitly, with security and application input. A technically attractive option does not become authorized solely because it obtained the highest table total.
10. Build the reusable claim-to-scope worksheet
Copy this worksheet for one claim at a time. It is an evidence record, not an AWS configuration or executable policy. Use sanitized identifiers in broadly shared reports; keep exact resource references in the authorized evidence repository. Never paste access tokens, private records or credentials into the worksheet. Blank fields remain unknown until a named owner supplies evidence or explicitly excludes that scope.
Claim identity
Claim ID, revision, accountable owner and relying reader:
Required action, protected property and unacceptable consequence:
Exact resource type / identifier and principal class:
Organization, account role and OU ancestry:
Region or global-service scope; provisioning / execution path:
Configuration applicability
Landing-zone version and relevant integration settings:
OU/account baseline, recorder and enrollment evidence:
Control ID / implementation / artifact revision / conditions:
Analyzer ARN / type / trust zone / selected resources:
Supported resource and Region reference, checked date:
Known exclusions, service-linked-role or management boundary:
Evidence and fixtures
Configuration evidence location and capture time:
Analysis / finding ID, status, scan context and limitations:
Permitted fixture and expected observation:
Rejected fixture and intended enforcement / evaluation point:
Authorized observer, evidence access and independent stop owner:
Actual result, request reference and attribution confidence:
Unknown coverage, contradictory evidence and retained artifacts:
Decision and maintenance
Supported assurance statement and explicit non-claims:
Held investigation or accepted exception, owner and expiry:
Cost authority, cleanup / reversal owner and evidence:
Review trigger: OU, principal, Region, resource, path or policy change:
Technical reviewer and acceptance date; next review action:A configuration revision joins the entries; a shared capture date alone does not. If the OU ancestry changed after policy collection but before a fixture, the two records may describe different contexts. Reject a merged conclusion until that discrepancy is resolved. Retain the previous record as history, then create a new revision. This prevents a routine organizational move from silently inheriting an older assurance statement that no longer covers its effective controls.
11. Work through a fictional coverage register
Consider member account P under a hypothetical governed OU, management account M, and workload Regions R1 and R2. The proposed inventory records landing-zone version 4.0 and its enabled integrations rather than assuming defaults. A member Config baseline and rule are stipulated for R1; R2 recording/evaluation is deliberately unknown. These are example inputs, not observed customer configuration. No real account IDs, production payloads or policy deployment instructions appear.
Claim C1 concerns an ordinary member principal reading synthetic IAM role metadata. The hypothetical premise includes an identity Allow for both prepared role ARNs, permission through every applicable root/OU/account SCP level apart from the selected deny, and no other relevant policy constraint blocking the read. An identity Allow alone is insufficient; Organizations SCP guidance describes the ancestor limits and applicable boundaries. A custom SCP is stipulated to explicitly deny iam:GetRole for only the prepared denied-role ARN. The GetRole API retrieves the specified role's metadata, and the IAM service authorization reference identifies its Read action and supported role resource type. Proposed expectations are refusal for that target and successful read of a separate approved dummy role. Neither result has been executed; missing-resource errors cannot count as policy denial. The premise is not an instruction to add broad permissions or deploy a policy.
Claim C2 concerns CT.S3.PR.1 through the selected CloudFormation path. Its specific control reference identifies AWS::S3::Bucket, required bucket-level public-access settings and PASS/FAIL/SKIP cases. Proposed template expectations are a pass with all four required settings true, failure with a missing required setting and skip without an applicable bucket. The same hook is not credited with checking a direct API creation path.
Claim C3 concerns public-read detection for a R1 bucket. The Config rule reference documents S3_BUCKET_PUBLIC_READ_PROHIBITED, its bucket scope and configuration/periodic evaluation. R2 cannot borrow that result. Claim C4 concerns management administrator behavior: absence of the member SCP restriction is a documented boundary, not a failed implementation. It needs its own administrative/observation contract. All actual-result fields remain unknown.
The following partially filled C1 record demonstrates the distinction between a complete fixture definition and a completed assurance claim. All identifiers name synthetic roles, not real resources. An actual account record must replace them with exact authorized references before anyone proposes a request. The SCP is custom and hypothetical; it is not a named Control Tower default. This record does not permit its deployment.
Claim: C1, proposed revision 1
Scope: member account P / example governed OU
Principal: ordinary SyntheticReviewer role, not service-linked
Service scope: IAM role metadata; not a regional bucket test
Landing zone: example 4.0; artifacts still require readback
Action: iam:GetRole
Denied fixture: prepared dummy AssuranceDeniedRole
Allowed fixture: prepared dummy AssuranceAllowedRole
Identity premise: approved Allow for both prepared role ARNs
SCP premise: applicable root/OU/account chain permits the read
Selected difference: custom scoped SCP explicitly denies one ARN
Other constraints: no additional blocker stipulated; verify context
Expected result: intended policy refusal / permitted metadata read
Actual result and request references: UNKNOWN / NOT EXECUTED
Observer: separate approved evidence reader, not yet assigned
Attribution: role existence + policy context + request identity
Stop: unexpected principal, missing role or unclear denial
Non-claims: no production action / management / all-policy proof
Acceptance: HELD; owner and observed evidence outstandingFor a completed exercise, attach the actual request and sanitized result references separately for each fixture. Do not replace the unknown line with the expected text. If the allowed fixture also fails, the harness may be observing an unavailable service or a broader deny rather than the selected target restriction. Keep that contrast in the review, along with the configuration revision and the reason the observer considers the result attributable.
12. Turn counterexamples into a bounded fixture plan
The useful fixture changes one assumption at a time. For C1, use prepared dummy roles and an explicitly authorized read-only requester. The observer verifies resource existence through a separate permitted path, principal identity and the intended deny context. A network error, absent role, expired session or unrelated IAM deny is inconclusive. Do not repair an unexpected result by broadly granting permissions during the observation. Preserve it and return the gap to the policy owner.
For C2, begin with offline evaluation of inert template inputs. A local rule result is evidence about that input and evaluator, not proof that the CloudFormation hook is enabled and enforcing in an account. A separately approved integration fixture must retain hook/stack evaluation identity and applicable control revision. Do not remove account public-access protection or create a publicly readable bucket merely to make a negative example observable. A local failing fixture can examine the prohibited input without exposing data.
For C3, first confirm the recorder, resource inventory and rule's evaluation record in the selected account/Region. Prefer configuration inspection and approved synthetic resources. A live detector experiment that changes public-sharing configuration requires its own authority, isolation and prevention of exposure; this paper does not authorize it. A clear dashboard without an evaluation for the chosen resource is not a completed negative test. For C4, use tabletop policy review rather than privileged management-account mutation.
13. Join evidence without promoting one class into another
The second figure separates three evidence inputs: configuration, policy analysis and scoped operating observation. They converge on an owner-reviewed claim, but no input is automatically promoted into a universal result. The reviewer chooses which evidence classes the particular claim needs. A deployment-only statement need not pretend that an operational fixture occurred. A denial statement cannot be accepted using only a policy finding.
*Proposed evidence composition, not a runtime AWS pipeline. The dashed brown route holds an unsupported claim. Analysis is optional when it is not relevant to the claim; observed-use or enforcement statements require their own authorized observation. No arrow authorizes an AWS change.*
Retain a trace from each sentence in the accepted statement to its evidence. If the sentence says “denied by the selected SCP,” attach the request context, policy revision and attribution basis. If the sentence says “no external finding,” attach analyzer type, supported resource, Region, trust zone, checked time and filtering context. When evidence is insufficient, shorten the statement or keep it held. The reviewer should never have to infer the missing qualifiers from another team's memory.
14. Give investigations a deliverable and a stop condition
Assign the platform investigator the version/integration/OU readback and selected artifact inventory. Its output is a dated configuration attachment with missing-account or Region scope marked unknown. Assign the security analyst the analyzer/finding context and principal/resource boundary. Its output is an intended-versus-unintended access disposition, not an unsupported incident verdict. Assign the application owner the protected property, permissible fixture and consequences of an exception. Its output is the accepted functional boundary.
Before any optional operational fixture, a change authority approves the exact account, principal, inputs, resource, spend limit, observer and independent stop path. Stop if these change, if customer data becomes reachable, if evidence access disappears, if the requester has unexplained broader privilege or if attribution cannot be established. A denied fixture should not encourage changing production controls until it passes. Hold the observation and commission a scoped investigation of the mismatch.
The deliverable is a completed record or a specific owned gap. “Need more testing” is too vague. State what evidence is missing, which claim depends on it, who can obtain it safely and which activity remains held meanwhile. A finite investigation can conclude that a required path is unsupported and a different mechanism is needed. That is useful work, not failure to achieve a green status. Acceptance must not pressure the investigator into changing the question after seeing the result.
15. Price and operate the evidence boundary
Separate governance review effort, ongoing recording/analysis and optional fixture consumption. Costs can include retained configuration records, rules, storage, analyzer scope, log access and reviewer maintenance. Consult current service-specific pricing for the actual account/resource inputs before commissioning a change. There is no dollar estimate here. The output should explain which coverage an expense buys and which operating obligations remain, rather than promise that a larger tool budget yields complete assurance.
Analyzer duplication is not always useful redundancy. AWS's overview notes separate charges per unused-access analyzer and internal analysis based on monitored resources. Region duplication of unused analysis does not create the external resource-Region coverage it was mistakenly intended to buy. Have the finance and security owners review the chosen type and scope together. They should not discover after activation that the proposal counted analyzer instances instead of covered questions.
Evidence itself needs a protection and retention decision. A role trust policy, resource name or internal access map can reveal sensitive architecture even without payload data. Limit readership, sanitize broad summaries and retain authoritative records in an approved repository. Protect the ability to read prior revisions without granting the investigator permission to modify production controls. An audit trail controlled solely by the person being observed is a weakness to disclose, not a reason to collect unrestricted private data elsewhere.
16. Maintain scope through organizational and deployment changes
Change triggers include OU moves, new accounts, additional Regions, new resource types, principal substitutions, policy revisions, changed analyzer trust zones and replacement provisioning paths. Each can invalidate only part of the claim. Reopen that part instead of discarding every prior record or carrying all previous assurances forward. A CloudFormation-to-direct-API change specifically reopens the proactive-path assertion. An internal account gaining access can reopen internal least-privilege questions without generating an external finding.
Landing-zone maintenance also changes evidence assumptions. The 4.0 key-changes guide documents changes to governance definitions and integration-dependent resources. Observe the resulting state, not just the completion of an upgrade job. Preserve before/after artifact references and identify which old detectors or operating procedures still exist. A reset or integration change is a potentially consequential operation that requires separate authorization, not a harmless way to refresh a dashboard.
Use an owner-reviewed delta record: changed input, affected claims, retained evidence, invalidated evidence, required follow-up and permitted interim behavior. Attach it to the release or organizational-change decision. This keeps the assurance process close to work that actually changes scope. An annual review can still be useful for neglected inventory, but it cannot make yesterday's direct-API change inherit a six-month-old hook observation simply because the next scheduled meeting has not occurred.
17. Close exceptions and reconcile fixture effects
An exception needs a consequence, accepting authority, containment, expiry and closure evidence. A Region without the required detector cannot be marked covered because its owner promises to add recording later. The organization may restrict the affected workload, use an alternative approved mechanism or accept the exposure temporarily. Record which choice occurred. Closure requires applicable configuration plus whatever evaluation or operating evidence the original claim required, not only a ticket saying the baseline was installed.
For an approved fixture, retain its attempted requests, actual results and resulting resources or changes. A rejected provisioning request can still leave records or partial work that need disposition; an inconclusive observation can still consume money. Cleanup must address only approved test targets through the responsible owner. This paper provides no destructive commands. If a reversal would affect evidence retention, private data or a production dependency, stop and obtain a narrower authorized plan rather than deleting everything created during the exercise.
Distinguish reversal from proof. Restoring a previous policy revision can recover a configuration without establishing that every issued session, changed resource or attempted effect is harmless. Verify the relevant remaining state and preserve unresolved items. The existing multi-account recovery-authority paper owns emergency admission and backup/encryption authority. This paper's closure is routine control-coverage assurance; it does not certify that the estate can recover when normal access fails.
18. Limits and the next acceptance decision
Review checklist: what may the relying reader conclude?
- State the exact account role, principal class, resource, Region or global scope, provisioning path and artifact revision. Exclude the management-account and service-linked-role boundaries when they are outside the selected mechanism.
- Verify landing-zone version, integrations and actual member-account recording rather than inheriting a default or a central setting.
- Bind every analysis result to its analyzer type, supported resources, trust zone, evaluation time and filtering context. Potential sharing, unused permissions and observed access remain different questions.
- For an enforcement claim, retain the permitted and rejected fixtures, actual requester, resource existence, request references and attribution limits. An unavailable resource or unrelated failure cannot establish the intended denial.
- Trace every sentence of the proposed assurance statement to the necessary evidence class. Shorten unsupported claims or hold them with an owner and exact missing observation.
- Record accepted exceptions, their scope and expiry, fixture reconciliation and change triggers. A closed ticket or archived finding alone does not prove the underlying access changed.
This framework cannot establish universal authorization correctness, legal compliance, incident absence or resilience across every AWS service. Supported-resource lists, analyzer implementations and Control Tower behavior change. Some paths use principals or resource policies outside the selected mechanism. Some required observations are unavailable without stronger authority than the review permits. Those limits should narrow the statement, not invite unapproved production tests or broaden an analyst's access by default.
The complementary engineering-partner production-access standard owns supplier authority and offboarding. Shared-dependency blast radius owns availability containment and customer-function failure evidence. A governed OU is not an independent availability cell, and a passing denial is not a supplier assessment. Keeping these ownership boundaries prevents a control-assurance paper from presenting familiar governance advice as a new account-security guarantee.
Take one completed worksheet to the platform, security and application owners. Ask them to accept one exact statement, commission one bounded missing-evidence investigation or choose one explicit exception. Confirm that the statement names its account/principal/resource/Region/path scope and says what it does not establish. Recheck whenever those inputs change. The useful deliverable is a maintained claim with supporting records, not another security score. Ampity's AWS consulting scope can support defining that review; using this framework does not require submitting an enquiry.
Related services
AWS Consulting Services for Architecture, Cost & Migration
AWS consulting for architecture and Well-Architected reviews, cost optimisation, FinOps and migration. Plan changes around workload evidence and recovery needs.
Cloud Security Architecture Consulting
Cloud security architecture consulting for AWS and GCP. Review IAM, network boundaries and compliance requirements, then implement agreed security controls.