GAMEOPS02-BP01 Adopt a multi-account strategy to isolate different games and applications into their own accounts
Design an account structure that would guide the infrastructure deployment to comply to each environment's security, isolation, and operational needs. Environment isolation by restricting access to it and permitting only requisite AWS services to be used in them is essential, with production environments being locked down, while development and testing environments are lenient to permit experimentation. Further isolation of major sub-systems in each environment, and common services that are used by multiple environments to be hosted and managed out of their own AWS accounts is highly recommended.
Level of risk exposed if this best practice is not established: High
Implementation guidance
Adopt a multi-account strategy on AWS by isolating the different environments (like development, test, staging, production, and shared services) to individual AWS accounts, which reduces the scope of incidents. Consider AWS Organizations to centrally manage the hierarchy of your AWS accounts to further simplify operations, as well as define and apply account-level and organizational unit-level (OU-level) policies selectively. By designing an appropriate OU and AWS account structure that is aligned to your development and productional workflow needs, you can optimize your costs and enhance scalability.
-
Adopt a multi-account strategy: Isolate environments to reduce incident radius and simplify operations.
-
Use AWS Organizations: Manage accounts hierarchically, apply policies, and enable centralized governance.
-
Plan for Scalability: Design fine-grained account structures and implement cost-saving measures for future growth.
Implementation steps
A game system deployed in AWS should use multiple accounts that are logically organized to provide proper isolation, which reduces the blast radius of issues and simplifies operations as your game infrastructure scales. AWS accounts that host game infrastructure are typically grouped into the following logical environments:
-
Game development environments are used by developers for developing the software and systems for the game.
-
Test or quality assurance (QA) environments are used for performing integration testing, manual QA, and other automated testing that must be conducted.
-
Staging or pre-production environments are used for hosting completed software so that load and smoke testing can be conducted prior to launching to production.
-
Live or production environments are used for hosting the live software and infrastructure and serving production traffic from players.
-
Shared services or tools environments provide access to common systems, software, and tools that are used by many different teams. For example, a central self-hosted source control repository and game build farm might be hosted in a shared services account.
-
Security environments are used for consolidating centralized logs and security technologies that are used by teams that focus on cloud security.
For game infrastructure on AWS, it is recommended to create separate accounts for each game environment (development, testing, staging, and production), as well as accounts for security, logging, and central shared services.
Typically, smaller game development studios that manage a limited number of infrastructure resources, usually a few hundred servers or less, may create one AWS account for each of these environments (for example, one production account, one development account, and one staging account). However, as your game infrastructure or team size grows over time, this simplified model may not scale well.
When setting up these environments, consider that many AWS services share resource and API-level Service Quotas for an entire account within a particular Region. This must be considered when determining how to logically organize accounts. AWS accounts only incur cost for consuming services deployed into them. Therefore, this provides a way to effectively reduce resource contention and service quotas, particularly as your game grows and more developers need access to build and manage resources.
Based on our experience working with larger game development studios that typically operate thousands of servers with hundreds of developers accessing resources, we recommend you design a more fine-grained account structure where individual applications supporting your game have their own development, testing, staging, and production accounts. Because it's difficult and time consuming to re-design your AWS multi-account strategy after you have launched your game due to the complexity in planning and migrating live systems, consider your future scaling needs when determining the right multi-account structure.
You can use
AWS Organizations
AWS Control Tower
This isolation assists you to set up custom or individual permissions and guardrails to each game environment. Production accounts should have the necessary guardrails, access restrictions, monitoring and alerting, and security tools, while non-production accounts may not require the same level of guardrails and permissions. Non-production environments can be automated to shut down resources after hours and save costs. Separation of accounts at this level of granularity makes it straightforward to monitor infrastructure costs for each of the environments supporting a game.
The following is an example of a multi-account structure for a game company using AWS Organizations and organizational units (OUs) to logically group AWS accounts into separate environments and studios. In this example, OUs are used to group together accounts based on their environment and then based on the studio that operates the environment. This demonstrates how you can create a nested hierarchy to allow separate applications and games to be deployed into their own accounts within their environment (depicted as OUs), which can be useful if you develop and operate multiple games. Refer to the documentation and whitepapers provided in the resources section of this pillar to learn about additional strategies that you can consider for organizing your multi-account strategy.
Based on the discussion above, the sample diagram below assumes a game studio (Organization) that has a development pipeline comprised of 4 stages (development, testing, staging, and production). For a given game (game1), each of the environments (OU) has individual AWS accounts for game services, dedicated game servers, social services, and web servers. The resources that run in each AWS account are relevant to the respective sub-systems. Typically, every individual game using this kind of development pipeline would replicate this or a similar structure for its AWS accounts.
In addition to these game-centric environment OUs, there are also the shared services OU and security OU. These OUs should be organization-wide, not for each individual game. That way the games would consume the shared services for development tools and data and analytics as in this example. Then, send application and system logs to the AWS account set up for logs in the security OU.
Example of account structure for game environments