Skip to content

Commit ba660a3

Browse files
authored
Merge pull request #15 from helpfulengineering/aws-account-and-identity-architecture
Describe the Design of the Helpful Engineering AWS Organization and Accounts
2 parents df414fc + 0294025 commit ba660a3

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# AWS Account and Identity Architecture
2+
3+
This document describes the Helpful Engineering account and identity architecture for Amazon Web Services (AWS).
4+
5+
## Problem Statement
6+
7+
[Helpful Engineering](https://helpfulengineering.org) is creating and deploying applications to AWS as part of
8+
its mission to address the COVID-19 pandemic. These applications are needed or developed by project teams
9+
staffed by volunteers from all over the world.
10+
11+
The applications and project teams develop and operate independently, have limited time, and use a wide set of
12+
implementation technologies. Helpful Engineering has neither the time nor the staff to support high touch, high coordination
13+
solutions.
14+
15+
## Solution Benefits
16+
17+
Helpful Engineering needs an AWS account and identity architecture that maximizes data safety, team autonomy, and
18+
execution efficiency.
19+
20+
The solution should:
21+
22+
* Enable project delivery teams to deploy applications safely and independently.
23+
* Safeguard customer and organization data from external and internal threats, both accidental and malicious.
24+
* Minimize demand for scarce DevOps & Cloud skills.
25+
26+
## Key Use Cases
27+
28+
### UC1 - Deliver & Operate Applications Independently
29+
30+
HelpfulEng project teams and deployments are independent, do not generally depend on each other, and expect a high
31+
degree of autonomy. Project teams need to be able to develop applications, deliver them, and perform some amount of
32+
operational activities in a self-service, low coordination manner.
33+
34+
We anticipate that project teams will use a mix of manual and automated Cloud configuration and application deployment.
35+
Manual configurations are likely to be used in early prototyping and development. The DevOps team will enable and
36+
encourage automated configurations delivery and operation to production. The DevOps team has no plans to enforce that.
37+
38+
### UC2 - Provision Accounts
39+
40+
The HelpfulEng DevOps team will provision AWS accounts for both shared and project delivery accounts. The DevOps team
41+
would like provision these accounts in a standardized way with low effort and simple adoption of Cloud security and
42+
governance practices.
43+
44+
## Logical Architecture
45+
46+
This design provisions a set of AWS accounts for each project team to deliver their applications and a few shared
47+
accounts for prototyping, security, and governance. The Helpful Engineering AWS Organization will look like:
48+
49+
```
50+
HelpfulEng AWS Org
51+
└ Core
52+
└ Log
53+
└ Audit
54+
└ Sandboxes
55+
└ he-sandbox2
56+
└ Project Delivery
57+
└ Monitoring O2
58+
└ he-project-monitoring-O2-dev
59+
└ he-project-monitoring-O2-prod
60+
└ <project name>
61+
└ he-<project name>-dev
62+
└ he-<project name>-prod
63+
└ ...
64+
```
65+
66+
The design accommodates the wide set of people, skills, and techniques used throughout Helpful Engineering and scopes the
67+
management, fault, and security domain to the project team. Using separate AWS accounts for each project team
68+
creates a strong security boundary between teams that isolates each project's activities, resources, and
69+
data from each other.
70+
71+
The Helpful Engineering AWS Organization OU will be configured to match the depicted hierarchy. This OU
72+
structure enables use of both shared and project-specific Service Control Policy.
73+
74+
The DevOps team will use [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)
75+
to provision both the shared and project accounts. Control Tower provides a simple account provisioning model that
76+
provides a number of security and governance best practices out of the box.
77+
78+
**Core Accounts**
79+
80+
The `Log` account contains the organization's API activity logs (CloudTrail) and resource configurations (Config).
81+
82+
The `Audit` account is a restricted account that gives security and compliance teams read and write access to all
83+
accounts in the landing zone.
84+
85+
**Sandbox Accounts**
86+
87+
The `he-sandbox2` account is a '[sandbox](https://chariotsolutions.com/blog/post/building-developer-sandboxes-on-aws/)'
88+
account teams can use to experiment and prototype solutions. Applications should not be operated for customers out of
89+
sandbox accounts. The DevOps team should consider enforcing this policy with a governance tool like Cloud Custodian
90+
that destroys resources some number of days after provisioning, e.g. 10 days.
91+
92+
**Project Delivery Accounts**
93+
94+
The DevOps team will provision two 'delivery' accounts for each project team: `dev` and `prod`. Teams will use the
95+
`dev` account to develop their applications and test application deployments. Applications should be delivered
96+
to the production account for operation and use by customers and end users.
97+
98+
The project team is responsible for delivering applications to their accounts with support by the DevOps team.
99+
100+
Project teams should adopt automated continuous integration to build application artifacts. These artifacts can be
101+
stored in:
102+
103+
* A trusted external repository such as Docker Hub.
104+
* An internal repository such as an S3 bucket hosted within a project account as is the case for the Serverless Framework.
105+
106+
The DevOps team recommends that project teams adopt automated continuous delivery to deploy and configure applications.
107+
108+
## Resources
109+
110+
* [How Should I Organize My AWS Accounts](https://nodramadevops.com/2019/01/how-should-i-organize-my-aws-accounts/)

0 commit comments

Comments
 (0)