Understanding Cross-Account Access with Amazon S3

all aws amazon s3 aws storage s3 security Feb 06, 2024


Welcome to the world of cloud storage with Amazon S3! Understanding how to share resources securely between different AWS (Amazon Web Services) accounts is crucial. Today, we're breaking down the concept of cross-account access in Amazon S3 into simple, digestible pieces. Let's get started!

What is Cross-Account Access?

Cross-account access refers to the ability of one AWS account to access resources in another AWS account. In the context of Amazon S3, it means that we can allow users, services, or applications from one AWS account to access our S3 buckets and objects stored in another account.

Why Use Cross-Account Access?

Imagine we have two separate AWS accounts: one for development and another for production. We might want to share code, data, or logs stored in S3 buckets between these accounts securely without duplicating resources. Cross-account access enables this interaction, ensuring that each team or application accesses only the resources necessary for its operations, enhancing security and reducing overhead.

How to Set Up Cross-Account Access with S3

There are several methods to set up cross-account access in Amazon S3, each serving different use cases:

1. Bucket Policies

Bucket policies are JSON documents that define access permissions to our S3 buckets. We can use them to grant access to users, roles, or AWS accounts. Here’s how we do it for cross-account access:

  • Identify the AWS account we want to share our S3 resources with.
  • Create or edit a bucket policy, specifying the actions (like s3:GetObject) we want to allow and the ARN (Amazon Resource Name) of the principal (the external account or user) we're granting access to.
  • Apply the policy to our S3 bucket.

2. IAM Roles

IAM (Identity and Access Management) roles offer a secure way to grant permissions to entities that we trust. Entities can be AWS services, users, or external accounts. For cross-account access:

  • Create an IAM role in our account.
  • Define the permissions the role has, including what it can do with our S3 resources.
  • Specify a trust policy that allows the external account to assume the role.
  • Share the role's ARN with the external account. Users in the external account can then assume the role to access our S3 resources, according to the permissions we've set.

3. Cross-Account Access with S3 Access Points

S3 Access Points simplify managing access to our buckets. We can create access points with specific permissions and share them with other AWS accounts. This method is particularly useful for large-scale applications and is favored for its ability to provide fine-grained access control to S3 resources. Access Points support creating policies that are tailored to specific use cases, making them a more preferred and modern approach to managing access to your S3 data.

4. Access Control Lists (ACLs) and Canned ACLs

ACLs are an older method for managing access to our S3 buckets and objects, providing a way to specify which AWS accounts can access our S3 resources and what permissions they have. Alongside traditional ACLs, Amazon S3 also offered "canned ACLs" - predefined, commonly used ACLs that simplified granting basic permissions (such as public read or private) to your buckets and objects.

However, as of recent updates, ACLs are disabled by default for new S3 buckets, and AWS does not recommend using them for new setups. This includes both custom ACLs and canned ACLs. AWS encourages the use of more precise and manageable access control methods, such as bucket policies and IAM roles, which provide more granular control over permissions and better align with the principle of least privilege.

Best Practices for Cross-Account Access

  • Least Privilege: Always grant the least amount of access necessary.
  • Regular Audits: Periodically review your access policies and roles to ensure they are up to date.
  • Prefer Modern Access Controls: Use IAM roles, bucket policies, and S3 Access Points over ACLs and canned ACLs for more secure and manageable access control. With ACLs now disabled by default and not recommended for new buckets, adopting more advanced and granular control mechanisms is advisable.
  • Monitor Access: Utilize AWS CloudTrail and S3 server access logging to monitor who is accessing your S3 resources and how.


Cross-account access in Amazon S3 allows us to share resources efficiently and securely across different AWS accounts. Whether we choose bucket policies, IAM roles, ACLs, or S3 Access Points depends on our specific needs and use cases. By following best practices, we can ensure that our data remains secure while facilitating seamless collaboration across our projects or organization.

Stay connected with news and updates!

Join our mailing list to receive the latest news and updates from our team.
Don't worry, your information will not be shared.

We hate SPAM. We will never sell your information, for any reason.