AWS IAM

1. 简介

https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html

**AWS Identity and Access Management (IAM)**:AWS身份认证和资源权限控制

AWS account root user:根用户,拥有所有的AWS资源和服务的完全权限。类似于linux的root用户,不可以使用AWS根用户执行日常的操作。而是使用根用户去创建管理员用户和管理员用户组。使用管理员用户执行管理权限。

IAM的特性:

  • 共享AWS账户资源,不需要共享key或者密码
  • 精细的资源权限控制:对于不同的IAM用户,授予不同的资源权限
  • IAM为AWS的application提供AWS资源的访问权限:robot用户
  • 联合身份:使用如google账户认证获取临时的credentials来访问某一个IAM user

image-20220707175842312

1. 术语

1. IAM Resources

IAM资源指IAM对象,包括 user, group, role, policy, and identity provider

identity provider:身份认证提供商,如GoogleApps。使用第三方的身份认证方式管理用户以及资源权限。

2. IAM Identities

包括users, groups, and roles。指可以赋予policy的IAM对象,用于身份鉴别以及分组。

3. IAM Entities

可用于鉴权的实体,如具体指 user,federated user(联合用户)和 assumed IAM roles

4. Principals

是指利用 root 用户或 IAM user/role 进行登录并请求(Request)使用 AWS 服务的个人或者应用

5. Authentication and Authorization

Authentication: 身份验证,指用户是否能够通过当前的credentials发送request

Authorization:授权,指当前的request是否有足够的权限执行。

1. Attribute-based access control (ABAC)

基于属性的访问控制,在role和resource的tag:value值相同时,允许访问该资源。增加权限时只需要修改资源的tag:value值。

2. Role-based access control (RBAC)

对不同的IAM identities赋予不同的policy,这叫基于角色的访问控制。若需要修改权限,则需要修改policy

2. 概念

1. users

IAM users: 类似于linux系统中的用户,共享AWS账户资源,user也可以是application的robot用户,user也可以是管理员用户。可以通过创建IAM用户并分发credentials的方式分配账户。或者通过联合身份验证的方式,如G Suite SAML认证的方式,从AWS中获取临时的credentials。

联合身份验证的方式通过google账户认证获取临时的credentials来访问某一个IAM

image-20220707141821384

2. user group

等同于linux的用户组概念。相同group的用户具有类似的权限。

1
2
3
4
5
6
7
8
9
10
aws iam create-group --group-name Admins
{
"Group": {
"Path": "/",
"CreateDate": "2014-06-05T20:29:53.622Z",
"GroupId":"ABCDEFGHABCDEFGHABCDE",
"Arn": "arn:aws:iam::123456789012:group/Admins",
"GroupName": "Admins"
}
}

3. policy

policy定义了该用户组下所有的用户对AWS资源操作的权限,如AdministratorAccess管理员权限。policy可以被用户自定义。

1
aws iam attach-group-policy --group-name Admins --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

policy在赋予用户组后可以继续被管理员更新,以增加或者减少资源权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FullAccessToSomeServices",
"Effect": "Allow",
"Action": [
"ec2:*",
"s3:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole",
"iam:DeleteServiceLinkedRole",
"iam:ListRoles",
"organizations:DescribeOrganization"
],
"Resource": "*"
}
]
}
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
}
}

policies中的permission决定了request是否能够被执行。

4. role


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!