Skip to content

Commit fc1bf54

Browse files
authored
Merge pull request #26 from helpfulengineering/aws-identity-architecture
Describe basic approach to AWS identity for people and services.
2 parents e5a97a8 + 93f6431 commit fc1bf54

1 file changed

Lines changed: 59 additions & 8 deletions

File tree

documentation/aws-account-and-identity-architecture.md

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ The applications and project teams develop and operate independently, have limit
1212
implementation technologies. Helpful Engineering has neither the time nor the staff to support high touch, high coordination
1313
solutions.
1414

15+
16+
**Global vs Hierarchical Identity Namespace**
17+
18+
AWS' Identity and Access Management service provides the primitives to implement fine-grained access control to
19+
+3,500 AWS service APIs and resources. However, IAM provides no real opinion on how to model and implement complex
20+
access control structures required by large organizations. The problem of ensuring Team A only has access to Team A's
21+
resources within an AWS account is left to the AWS user. IAM provides a flat, global namespace and definition structure
22+
within an Account for identities and policies. By contrast, GCP and Azure provide hierarchical modeling mechanisms and
23+
inheritance that simplifies implementing more complex relationships.
24+
25+
We will describe our own solution next.
26+
1527
## Solution Benefits
1628

1729
Helpful Engineering needs an AWS account and identity architecture that maximizes data safety, team autonomy, and
@@ -64,9 +76,9 @@ AWS
6476
```
6577

6678
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
79+
management, fault, and security domain to the project team. Using separate AWS accounts for each project team
6880
creates a strong security boundary between teams that isolates each project's activities, resources, and
69-
data from each other.
81+
data from each other.
7082

7183
The Helpful Engineering AWS Organization OU will be configured to match the depicted hierarchy. This OU
7284
structure enables use of both shared and project-specific Service Control Policy.
@@ -85,17 +97,17 @@ accounts in the landing zone.
8597
**Sandbox Accounts**
8698

8799
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
100+
account teams can use to experiment and prototype solutions. Applications should not be operated for customers out of
101+
sandbox accounts. The DevOps team should consider enforcing this policy with a governance tool like Cloud Custodian
90102
that destroys resources some number of days after provisioning, e.g. 10 days.
91103

92104
**Project Delivery Accounts**
93105

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.
106+
The DevOps team will provision two 'delivery' accounts for each project team: `dev` and `prod`. Teams will use the
107+
`dev` account to develop their applications and test application deployments. Applications should be delivered
108+
to the production account for operation and use by customers and end users.
97109

98-
The project team is responsible for delivering applications to their accounts with support by the DevOps team.
110+
The project team is responsible for delivering applications to their accounts with support by the DevOps team.
99111

100112
Project teams should adopt automated continuous integration to build application artifacts. These artifacts can be
101113
stored in:
@@ -105,6 +117,45 @@ stored in:
105117

106118
The DevOps team recommends that project teams adopt automated continuous delivery to deploy and configure applications.
107119

120+
121+
**Identities**
122+
123+
Each project account will have a limited set of IAM roles for people and services. Helpful engineers will use the
124+
people roles to access the account and configure resources. Helpful Engineering automation and applications will use
125+
service roles to deliver and operate applications.
126+
127+
The people roles will be accessed using single sign-on (AWS SSO and/or Azure AD). The standard people roles and
128+
their intended uses are:
129+
130+
* `admin` - Used by DevOps team members to perform emergency operational tasks and initial account configuration
131+
activities:
132+
* create initial or fix broken IAM configurations
133+
* configure resources needed by automated configuration management tools
134+
* file support cases
135+
* `appeng` - Used by application engineers (developers) to build and manage applications used by either external or
136+
internal customers. The `appeng` role will start with the managed `PowerUser` policy. The `PowerUser` policy gives
137+
application engineers a lot of capabilities, minus the ability to configure IAM.
138+
139+
People roles will be defined via [AWS SSO permission sets](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html).
140+
141+
The service roles each project will start with are:
142+
143+
* `delivery-<project name>` - Used by automation to build, package, and deliver applications & infrastructure via CI/CD.
144+
Teams using CI/CD services outside of AWS will likely need a delivery IAM user that instead or in addition to the role.
145+
* `svc-<project name>` - Used as the application's EC2/Task/Function execution role. The application operates with this
146+
identity and attached privileges. When an application has multiple components, we can provision a role for each named
147+
in the form `svc-<project name>-<component>`, e.g. `svc-monitoring-O2-ingress` and `svc-monitoring-O2-analyzer`.
148+
* `aws-controltower-AuditReadOnlyRole` - The Audit account's `aws-controltower-AuditReadOnlyRole` will be used to
149+
perform security and compliance audits of project accounts.
150+
151+
IAM roles are preferred over IAM users and groups for a couple reasons:
152+
153+
* Roles avoid the possibility of leaking API Access Keys because use of the role is authenticated either by the AWS
154+
compute platform (service roles) or an authentication method that authorizes short term access to the role.
155+
* Roles can be identified in resource policy conditions. IAM groups, which create collections of users, cannot be
156+
referenced in resource policies and managing references to (people) users scales poorly.
157+
108158
## Resources
109159

110160
* [How Should I Organize My AWS Accounts](https://nodramadevops.com/2019/01/how-should-i-organize-my-aws-accounts/)
161+
* [AWS Blog: Integrating Azure AD and AWS SSO](https://aws.amazon.com/blogs/aws/the-next-evolution-in-aws-single-sign-on/)

0 commit comments

Comments
 (0)