CLOUD CONCEPT

Cross-Account Access

Cross-account access lets a human, application, or system in one cloud account use explicitly authorized resources or roles in another account.

Cloud Concepts Hub →

What is Cross-Account Access

Cloud accounts create administrative and security boundaries, but shared services, deployment pipelines, and operational teams often need controlled access across them. Cross-account access establishes that authorization without requiring shared credentials or moving resources into the same account.

Cross-account access connects identities and resources across independently administered cloud accounts. Typical examples include a deployment pipeline updating production infrastructure, a security team inspecting application accounts, and an analytics application reading data owned by another business unit. The objective is to preserve account isolation while granting specific capabilities to identified callers under defined conditions. Network connectivity alone does not provide this authorization, and belonging to the same organization does not automatically establish access.

Two common implementation patterns are assuming a role in the destination account and granting an external principal access through a resource policy. With role assumption, the caller obtains temporary credentials representing a destination-account role. With direct resource access, the caller keeps its existing identity while the resource owner authorizes it. Choose according to the service's policy support, the operations required, and whether centralized destination-account permissions simplify administration.

In AWS, cross-account role assumption normally requires an identity policy in the source account permitting sts:AssumeRole on the target role and a trust policy on that role accepting the caller. The trust policy controls who can assume the role; the role's permissions policies control what the resulting session can do. Trusting an account principal delegates authority to that account's administrators rather than granting every identity in that account automatic access. For example, a development pipeline can assume a production deployment role whose permissions allow updates only to a designated application.

After assumption, requests use the destination role's session, not the original caller's permissions. Session policies can further restrict that session, while applicable permissions boundaries, service control policies, resource control policies, resource policies, and explicit denies can affect authorization. An allow in one policy does not override an applicable explicit deny. Troubleshooting should therefore distinguish a failed AssumeRole request from a successful assumption followed by a denied resource operation.

For direct cross-account resource access, AWS generally requires permission from both the caller's account and the resource-owning account. For example, reading another account's S3 object generally requires an identity-policy allow for the reader and a bucket-policy allow for that principal. If the object is encrypted with a customer managed KMS key, the caller also needs the relevant KMS permissions, and the key policy must permit the cross-account use. Access to the bucket does not implicitly grant access to its encryption key.

Conditions make trust narrower and more practical. Restrict principals, actions, resources, and, where supported, organization membership or principal attributes. Require MFA for appropriate human workflows. For third-party role assumption, an external ID helps prevent confused-deputy attacks, but it is not a secret or a substitute for a trusted principal. For supported AWS service-to-service requests, source-account and source-resource conditions help prevent unintended use of a service principal.

Human users should generally enter through federation and obtain short-lived role sessions. Applications running in AWS should use workload roles rather than embedded access keys. External servers can use IAM Roles Anywhere to obtain temporary credentials using trusted X.509 certificates; a separate cross-account role assumption can then provide destination access when required. IAM paths organize identities and can support policy matching, but paths are not security boundaries. Amazon Verified Permissions addresses application-level authorization decisions; it does not replace IAM trust policies or grant access to AWS resources by itself.

The trade-off is additional policy coordination and operational complexity. Keep grants narrow, record role sessions with attributable names or source identity, inspect CloudTrail events, and use IAM Access Analyzer to identify unintended external access. Test both permitted and denied scenarios, including expired sessions and missing encryption permissions. Removing trust prevents new sessions, but existing temporary credentials may remain usable until expiration unless separately restricted or revoked through supported controls.

Key aspects of Cross-Account Access

Effective cross-account access combines explicit trust, narrowly scoped permissions, temporary credentials, contextual restrictions, and ongoing validation.

Explicit authorization across account boundaries

Define which external identities can perform which actions on which resources. Account ownership, organization membership, and network reachability do not independently grant access.

Trust and permissions serve different purposes

A role trust policy determines who may obtain a role session, while the role's permissions determine its capabilities. Diagnose role-assumption failures separately from authorization failures after assumption.

Temporary, attributable credentials

Prefer federation and workload roles over shared long-lived access keys. Use session names and source identity where supported to connect destination-account activity to the originating user or workload.

Policy evaluation spans multiple controls

Evaluate identity policies, resource policies, applicable organizational controls, permissions boundaries, and session restrictions. Check dependent resources such as encryption keys instead of assuming that access to the primary resource is sufficient.

Conditional and least-privilege delegation

Constrain access using specific principals, resource scopes, and supported context conditions. Use external IDs for appropriate third-party integrations and source-account or source-resource conditions for supported service-principal integrations.

Continuous validation and lifecycle management

Review external grants, test negative cases, and monitor cross-account activity. Plan for session expiration and revocation because changing trust alone does not necessarily invalidate credentials already issued.

Cloud services for Cross-Account Access

IAM establishes cross-account trust and permissions, while STS supplies the temporary credentials used to act through destination roles. S3 illustrates direct resource-policy access, and KMS adds an independent authorization requirement when shared data is encrypted with a customer managed key. IAM Roles Anywhere extends temporary-credential patterns to external workloads. Verified Permissions can evaluate application-level access rules, but the application must enforce those decisions and still satisfy IAM authorization for AWS operations. Together, these services separate identity establishment, credential issuance, infrastructure permissions, and application authorization rather than treating one policy as sufficient for every layer.

Amazon Simple Storage Service image Amazon S3

S3 bucket policies can authorize principals from other accounts to access specified objects or bucket operations. Cross-account designs must also consider caller permissions, Object Ownership settings, and encryption-key authorization.

Open Amazon S3 →
Amazon Verified Permissions

Verified Permissions evaluates fine-grained application authorization policies, including application-defined account or tenant relationships. Its authorization decisions are separate from the IAM permissions and trust relationships required to call AWS APIs across accounts.

Open Amazon Verified Permissions →