You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -11,15 +11,9 @@ import KeyPoints from '@site/src/components/KeyPoints';
11
11
This is an overview of our approach to centralized access management and the relationships between the components used to implement it. It explains how SAML, SSO, and custom constructs for AWS teams and team roles interact to provide efficient role delegation and authentication across an AWS Organization.
The following components are designed to provision all primary user and system roles into a centralized identity
21
-
account. These components are expected to be used together to provide fine-grained role delegation across the account
22
-
hierarchy.
16
+
Why do we need Teams and Team Roles when we have the same thing in Identity Center? To explain that, let’s first explain what they do and how we’ve integrated them.
23
17
24
18
### AWS Teams
25
19
@@ -36,21 +30,185 @@ assume the role in any account.
36
30
37
31
These roles should be identical in all accounts, such that you can always expect `admin` to be `admin`, `poweruser` to
38
32
be `poweruser`, and `observer` to be `observer`. The only difference between accounts is which AWS Team is able to
39
-
assume the role.
33
+
assume the role. We also have a `terraform` role that is used by Terraform to apply changes across all accounts.
40
34
41
-
### AWS IAM Identity Center (SSO)
35
+
### Example
42
36
43
-
The `aws-sso` component connects AWS IAM Identity Center (Successor to AWS Single Sign-On) Groups to Permission Sets.
44
-
Permission Sets grant access to `aws-teams` in the Identity account or (optional) access to an individual account for
45
-
convenience.
37
+
Consider this example. We want to enable the “DevOps” to assume Administrator in multiple accounts, such as `dev` or `prod`. However, “developers” can only assume admin in `dev`. Here’s how that would work:
46
38
47
-
Permission Sets other than the Identity Team Access Permission Set are used only for console and cli access to a single
48
-
account. These are redundant with AWS Team Roles but are useful for quickly accessing a given account with limited
49
-
permission.
39
+
```mermaid
40
+
flowchart LR
41
+
subgraph core_identity["core-identity Teams"]
42
+
developers["developers"]
43
+
devops["devops"]
44
+
end
45
+
46
+
subgraph dev_account_roles["plat-dev Team Roles"]
47
+
admin_dev["admin"]
48
+
end
49
+
50
+
subgraph prod_account_roles["plat-prod Team Roles"]
51
+
observer_prod["observer"]
52
+
admin_prod["admin"]
53
+
end
54
+
55
+
developers --> admin_dev
56
+
developers --> observer_prod
57
+
devops --> admin_prod
58
+
devops --> admin_dev
59
+
```
60
+
61
+
In the `core-identity` account, we have a `developers` team and a `devops` team. Then in the `plat-dev` account, we have an `admin` team role. And in the `plat-staging` account we have an `admin` and an `observer` team role. With our design, the `developers` team can assume `admin` only in `plat-dev`, but the `devops` team can assume `admin` in both `plat-dev` and `plat-staging`.
62
+
63
+
## Using AWS Identity Center for Single Sign On
64
+
65
+
Now how does AWS IAM Identity Center fit in? Let’s see how we can connect AWS Teams and Team roles with Identity Center to complete the picture.
66
+
67
+
### Connecting a Permission Set to an AWS Team
68
+
69
+
Identity Center has the concept of Permission Sets. Permission Sets determine what a user can or cannot do. We simply connect those Permission Sets to one of our Teams.
70
+
71
+
We define a special Permission Set for the `core-identity` account, called the `Identity{X}TeamAccess` Permission Set. This Permission Set has access to assume the related AWS Team. For example, the `IdentityDeveloperTeamAccess` permission set can assume the `developers` team and the `IdentityDevopsTeamAccess` permission set can assume the `devops` team.
72
+
73
+
From their AWS Team, users can apply Terraform wherever they have access
74
+
75
+
76
+
```mermaid
77
+
flowchart LR
78
+
subgraph identity_center_permission_sets["Identity Center Permission Sets"]
subgraph plat_sandbox_roles["plat-sandbox Team Roles"]
89
+
terraform_sandbox["terraform"]
90
+
end
91
+
92
+
subgraph plat_prod_roles["plat-prod Team Roles"]
93
+
terraform_prod["terraform"]
94
+
planner_prod["planner"]
95
+
end
96
+
97
+
developer_access --> developers
98
+
devops_access --> devops
99
+
100
+
developers --> terraform_sandbox
101
+
developers --> planner_prod
102
+
103
+
devops --> terraform_sandbox
104
+
devops --> terraform_prod
105
+
```
106
+
107
+
### Centrally Manage Users and Groups with an IdP
108
+
109
+
We still need some method to manage users and groups. AWS Teams and Team roles grant groups of users access, but do not define or manage users. AWS IAM Identity Center ties together Teams and Team roles with a predefined set of users and groups.
110
+
111
+
Although you may choose to manage users and groups directly in Identity Center, the vast majority of our customers choose to use a SAML IdP as the source of truth for their users and groups. With a SAML IdP, users and groups are not created in AWS. Instead, we connect a third-party Identity Provider, such as GSuite, JumpCloud or Okta. Then we manage all Users and Groups in that IdP
112
+
113
+
With “automatic provisioning” in AWS, we can synchronize all users and groups from the IdP into AWS. Then we can create Permission Sets in AWS to assign to those groups. We can assign Permission Sets to Groups for any given account. A Permission Set, such as `AdministratorAccess` or `ReadOnlyAccess`, is granted to a given group for some account. This way, we only need to define the Permission Sets once each
### Access the AWS Web Console with Identity Center
143
+
144
+
With Identity Center, it’s very easy to log into the AWS web console. Simply open the Single Sign On Portal link, and select the account and role you want to access.
145
+
146
+
For example, if I wanted to connect to `plat-prod` with “Read Only” access, then I would select the `ReadOnlyAccess` Permission Set for `plat-prod`. AWS then will launch a new session with the appropriate permissions in production
50
147
51
-
With AWS IAM Identity Center, you can directly access a specific account from the single sign-on page, which will automatically assume the role with the associated `PermissionSet`. This is great for web console usage but not ideal for locally applying Terraform. With Terraform, we need to apply changes across many accounts, where each account has its own role. We don't want to assume a new role each time we change accounts. To solve this, we have a specific Permission Set that can assume an AWS team role in the identity account. When applying Terraform, we assume that "team" role via SSO, and when accessing the web console, we use the Permission Set directly.
52
148
53
-
### AWS SAML
149
+
### Deploying both AWS IAM Identity Center and AWS SAML
150
+
151
+
AWS IAM Identity Center and AWS SAML are not mutually exclusive solutions. They can be used together to provide a seamless login experience for users. Cloud Posse frequently deploys both in customer environments - AWS SAML to log in ourselves for the duration of the engagement and AWS IAM Identity Center for the customer to use and support. That way the customer can access AWS via their chosen Identity Provider (IdP), and we can use GSuite SAML to access the Identity account team directly. When an engagement is complete, we can easily decommission our access by removing the SAML connection.
152
+
153
+
:::tip AWS IAM Identity Center or AWS SAML? Which do I choose?
154
+
155
+
The vast majority of our customers prefer AWS IAM Identity Center (SSO). The convenience of a web console login is hard to beat. However, some customers prefer SAML for its simplicity and compatibility with existing systems. We support both methods, and you can choose the one that best fits your needs.
The `aws-saml` component provides SAML access for Admin users to connect to the Identity account admin role `aws-teams`
56
214
without AWS IAM Identity Center (Successor to AWS Single Sign-On).
@@ -60,8 +218,55 @@ Follow the Identity Providers documentation for adding a SAML login.
60
218
61
219
With AWS SAML, we create a federated SAML login that connects to the "team" in the identity account, and then users can assume other roles from there. We use the [AWS Extend Switch Roles plugin](https://github.com/tilfinltd/aws-extend-switch-roles) that makes this much easier, but it's not as intuitive as Identity Center.
62
220
63
-
:::tip AWS IAM Identity Center or AWS SAML? Which do I choose?
221
+
```mermaid
222
+
flowchart TB
223
+
subgraph "Human Access Architecture with AWS SAML"
224
+
subgraph "core-identity"
225
+
subgraph aws_teams["aws-teams"]
226
+
devops_teams["devops"]
227
+
developers_teams["developers"]
228
+
billing_teams["billing"]
229
+
end
230
+
end
64
231
65
-
The vast majority of our customers prefer AWS IAM Identity Center (SSO). The convenience of a web console login is hard to beat. However, some customers prefer SAML for its simplicity and compatibility with existing systems. We support both methods, and you can choose the one that best fits your needs.
The `aws-sso` component connects AWS IAM Identity Center (Successor to AWS Single Sign-On) Groups to Permission Sets.
265
+
Permission Sets grant access to `aws-teams` in the Identity account or (optional) access to an individual account for
266
+
convenience.
267
+
268
+
Permission Sets other than the Identity Team Access Permission Set are used only for console and CLI access to a single
269
+
account. These are redundant with AWS Team Roles but are useful for quickly accessing a given account with limited
270
+
permission.
271
+
272
+
With AWS IAM Identity Center, you can directly access a specific account from the single sign-on page, which will automatically assume the role with the associated `PermissionSet`. This is great for web console usage but not ideal for locally applying Terraform. With Terraform, we need to apply changes across many accounts, where each account has its own role. We don't want to assume a new role each time we change accounts. To solve this, we have a specific Permission Set that can assume an AWS team role in the identity account. When applying Terraform, we assume that "team" role via SSO, and when accessing the web console, we use the Permission Set directly.
0 commit comments