INSIGHTS
Cybersecurity

AWS SAA-C03: IAM, Organizations and Cross-Account Roles

Plan identity federation, SCP guardrails, roles and cross-account permissions with tested least-privilege outcomes.

In this article
  1. Organize accounts around ownership and blast radius
  2. Distinguish identity federation from resource authorization
  3. Use cross-account roles instead of distributing credentials
  4. Remember that service control policies never grant access
  5. Understand the remaining policy boundaries
  6. Design automation identities separately from people
  7. Make an emergency route that does not undermine routine security
  8. Test with a concrete access matrix

A retail group acquires a smaller company and inherits six AWS accounts, separate application teams, and a billing account that has quietly become everyone’s administrative entry point. The obvious response—create more long-lived IAM users in each account—would make access harder to remove and mistakes harder to contain. An AWS architect needs a durable account boundary, a workforce authentication plan, and rules that explain which principal may assume which role. These are different decisions, and they must work together.

For AWS SAA-C03, the secure-architecture objective includes federation, AWS IAM Identity Center, AWS Organizations, service control policies, and cross-account authorization. The first useful design question is not which console checkbox enables access. It is which account owns the resource, which identity originates the request, and which policy layers can allow or prevent the action. The underlying VPC multi-tier separation is a useful analogy: clear boundaries keep one compromise or configuration error from becoming an organization-wide incident.

Organize accounts around ownership and blast radius

An AWS account provides an isolation and billing boundary as well as a place where IAM identities and resources live. Separate production from development, and consider dedicated security, logging, networking, and shared-service accounts when the operating model supports them. The goal is not to maximize the number of accounts; it is to reduce the impact of one accidental permission grant, compromised workload, or experimental deployment.

AWS Organizations can group accounts into organizational units (OUs) so policy guardrails follow common business risk. A production OU might restrict a subset of Regions or security-sensitive actions, whereas a sandbox OU might permit more experimentation within a tight spending budget. This hierarchy is a governance tool; it does not replace the identity and resource policies that actually authorize work inside each account.

Distinguish identity federation from resource authorization

Workforce users should normally authenticate through the organization’s identity provider and receive permission sets through IAM Identity Center where supported. Authentication proves the person is who they claim to be; authorization still determines which AWS roles they can assume, and those roles determine the actions permitted in the destination account. Group assignments should reflect job function and least privilege rather than one shared administrator permission set for every engineer.

For an employee who moves from engineering to finance, remove the previous group assignment and verify their session and future role access follow the new responsibility. Do not assume deleting one IAM user is sufficient when access came from an external directory or federated session. Plan session duration, emergency recovery, and auditability so the path from corporate identity to temporary AWS role is explainable.

Use cross-account roles instead of distributing credentials

Suppose a build pipeline in a tools account must deploy an approved artifact to a production account. A role in the production account can trust a tightly identified principal from the tools account, while its own permission policy limits the deployment actions. AWS Security Token Service issues temporary role-session credentials after a successful assumption. The design avoids copying a production access key into a build server.

Two sides must agree. The role trust policy defines who may assume the role and under what conditions; the role’s permission policy defines what a successful session may do. The calling principal must also have permission to request role assumption where required. An application can receive AccessDenied even when its original policy looks permissive because the destination trust relationship is missing or another guardrail limits the action. Inspect the full chain, not only the first JSON policy found in a ticket.

Remember that service control policies never grant access

SCPs are guardrails that set maximum available permissions for principals in member accounts; they do not create permissions by themselves. If an SCP permits S3 operations but a user’s identity policies deny or do not allow them, the user still cannot read a bucket. Conversely, an identity policy with s3:* cannot override an effective SCP that denies the operation. AWS’s IAM security practices distinguish identity permissions from Organizations guardrails explicitly.

Model a denied deployment: a role policy allows launching EC2 instances, but the account sits in an OU whose applicable SCP denies the chosen Region. The correct repair is not to attach another administrator policy to the role. Confirm the requested Region, effective organization guardrails, service-specific authorization, and whether the request should be allowed at all. Broaden an SCP only when the original organizational requirement was wrong.

Understand the remaining policy boundaries

Identity-based policies, resource-based policies, permission boundaries, role session policies, and Organizations controls interact. The effective decision is subject to their intersection and explicit denies, with details depending on policy type and request context. A resource policy can grant selected cross-account access in supported services, but it should identify the correct principal or organization conditions rather than opening access to the world.

For example, a data-processing role may need to read one S3 prefix in another account. The destination bucket policy can recognize that role, and the role permissions can constrain the workload to read operations. Encryption introduces yet another permission boundary if objects use a customer-managed KMS key. A successful S3 GetObject authorization does not necessarily authorize the required KMS decrypt action. The S3 bucket-access specialist explains how public access controls and bucket policy conditions protect the storage side of that relationship.

Design automation identities separately from people

A human administrator can pass multifactor authentication and follow a temporary elevation process; a workload should instead use a supported service or federated role with narrowly scoped permissions. EC2 instance profiles, Lambda execution roles, and other service-linked mechanisms help workloads obtain temporary credentials without embedding IAM access keys in source code. Where a deployment workflow relies on an external CI service, establish a supported federation or short-lived assumption path rather than storing a permanent access key in an environment variable.

Test the actual negative case. A Lambda function that reads a particular table should fail if asked to delete an unrelated S3 bucket. A monitoring task should not be able to deploy a security-group rule. Identity design becomes credible only when both an authorized request and a deliberately unauthorized request produce the expected decision.

Make an emergency route that does not undermine routine security

Break-glass administrator access exists for incidents where federation, a directory, or an automation service becomes unavailable. It needs strong credential custody, a limited set of responsible people, detection, testing, and a post-use review. Do not turn it into a regular convenience account. A root user should be protected and reserved for tasks that require it, not treated as a normal operator identity.

Loss of the identity provider is also a service-continuity event. Plan how authorized staff can investigate a production network outage while Identity Center is inaccessible, and distinguish restoring account management from granting every person broad permanent access. Audit trail quality matters during emergencies because the team must later explain who changed an account boundary and why.

Test with a concrete access matrix

Create three test personas—a developer, a production deployer, and a security investigator—and three accounts: development, production, and log archive. Record each intended role assumption and read/write operation. Then simulate a mistaken permission grant in an identity policy, an SCP denial, a broken trust policy, and a misconfigured resource policy. For each failure, note the principal ARN, requested action, destination resource, account, and decision evidence.

Use CloudTrail events and IAM analysis tools to see whether the request was denied because of authentication, trust, identity permission, resource policy, or higher-level guardrail. The strongest solution permits the smallest legitimate access while making the denial path understandable. SAA-C03 architecture questions reward that reasoning: an account hierarchy prevents broad blast radius, temporary roles protect credentials, and policy layers work together instead of competing for one mythical all-powerful allow statement.

Filed under Cybersecurity