使用IAM创建日常Admin账户并设置留底账户

一、背景

当系统规模不大时候,通常一个AWS Account(账户ID是12位数字)只有几个高权限管理员负责云平台运维,此时可能大家共享同一个登录用户名,由此带来审计不便,且存在安全风险。

由此,可考虑将根账户(root账户)或者一个最高权限的IAM用户作为留底账户保护起来,并额外创建几个新的管理员账号下发给团队。同时,新创建的管理员账号对留底账号和其他管理员账号没有修改权限,以避免各自串通和干扰,确保各自的独立性。

二、查询要留底和保护的账号ARN

IAM权限管理是通过资源(Resource)编号也叫做ARN进行管控的。因此,对于要留底的账户,首先要查看其ARN,用于后续Policy编写。

点击IAM界面左侧的用户(User)按钮,在右侧清单中点击要保护的用户名,可在上方看到用户ARN字符串,将其复制下来。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i01

三、编写禁止修改策略

进入IAM模块,进入左侧菜单点击策略(Policy),点击右侧创建策略按钮。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i02

在创建策略界面中,点击第二个标签页JSON进入脚本编辑模式,粘贴如下脚本,并修改Resource字段中复制下来的ARN为本文第一阶段复制下来的ARN。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAccessToAdmin",
      "Action": "iam:*",
      "Effect": "Deny",
      "Resource": "arn:aws:iam::420029960458:user/pcman"
    }
  ]
}

然后点击下一步标签按钮继续。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i03

在标签界面可选,点击下一步继续。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i04

在创建策略的最后一步,输入策略的名称,例如叫做deny-access-to-admin,名称可以任意定义,请记住名称,后续创建用户时候将会使用。然后点击创建策略完成创建。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i05

创建策略完成。

四、创建用户

进入IAM模块,点击左侧的User用户,点击右上角按钮创建用户。输入用户名admin01,选择允许编程访问(会生成AccessKey)和AWS管理控制台访问(允许Web登录到Console)。密码选择自动生成密码。点击于下焦权限按钮继续。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i06

在权限界面,点击直接附加现有策略按钮,并从策略清单中,选择第一项AdministratorAccess。此时不要着急继续,还需要添加下一个策略。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i07

在搜索框中,输入关键字deny,也就是本文上一个步骤定义的策略名称,即组织当前用户修改留底账户的策略。然后点击下一步标签继续。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i08

在标签界面为可选输入。点击下一步继续。

在创建用户的最后一个界面,点击右下角创建按钮。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i09

创建用户完成后,即可获得登录地址、当前用户的密码以及用于API编程的Access Key ID、Secret Key。注意:为安全起见,这些信息只在第一次创建时候显示,创建之后不再显示。如果忘记,请重新创建用户。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i10

在记录下登录地址、用户名、密码、API的Access Key和Secret Key后,操作完成。

五、登录用户测试权限

现在使用admin01这个日常使用的管理员账户登录。登录后可看到:

  • 日常管理员操作各种权限资源正常;
  • 对留底账户创建的资源也可以正常操作,例如留底管理员创建的EC2,当前日常管理员admin01也可以删除之;

但是,当前日常操作管理员账户希望对留底的管理员账号做修改时候,例如修改留底管理员账户的密码、降低权限等行为,都将提示无权限操作。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/i11

由此过程可以看到,通过IAM策略设置Deny行为,即可确保日常操作管理员账户不能破坏留底账号。因此,留底账号需要妥善保管。

六、参考资料

IAM策略生成器:

https://awspolicygen.s3.amazonaws.com/policygen.html