@@ -12,6 +12,18 @@ The applications and project teams develop and operate independently, have limit
1212implementation technologies. Helpful Engineering has neither the time nor the staff to support high touch, high coordination
1313solutions.
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
1729Helpful Engineering needs an AWS account and identity architecture that maximizes data safety, team autonomy, and
6476```
6577
6678The 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
6880creates 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
7183The Helpful Engineering AWS Organization OU will be configured to match the depicted hierarchy. This OU
7284structure enables use of both shared and project-specific Service Control Policy.
@@ -85,17 +97,17 @@ accounts in the landing zone.
8597** Sandbox Accounts**
8698
8799The ` 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
90102that 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
100112Project teams should adopt automated continuous integration to build application artifacts. These artifacts can be
101113stored in:
@@ -105,6 +117,45 @@ stored in:
105117
106118The 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