一、背景
当系统规模不大时候,通常一个AWS Account(账户ID是12位数字)只有几个高权限管理员负责云平台运维,此时可能大家共享同一个登录用户名,由此带来审计不便,且存在安全风险。
由此,可考虑将根账户(root账户)或者一个最高权限的IAM用户作为留底账户保护起来,并额外创建几个新的管理员账号下发给团队。同时,新创建的管理员账号对留底账号和其他管理员账号没有修改权限,以避免各自串通和干扰,确保各自的独立性。
二、查询要留底和保护的账号ARN
IAM权限管理是通过资源(Resource)编号也叫做ARN进行管控的。因此,对于要留底的账户,首先要查看其ARN,用于后续Policy编写。
点击IAM界面左侧的用户(User)按钮,在右侧清单中点击要保护的用户名,可在上方看到用户ARN字符串,将其复制下来。如下截图。
三、编写禁止修改策略
进入IAM模块,进入左侧菜单点击策略(Policy),点击右侧创建策略按钮。如下截图。
在创建策略界面中,点击第二个标签页JSON
进入脚本编辑模式,粘贴如下脚本,并修改Resource
字段中复制下来的ARN为本文第一阶段复制下来的ARN。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAccessToAdmin",
"Action": "iam:*",
"Effect": "Deny",
"Resource": "arn:aws:iam::420029960458:user/pcman"
}
]
}
然后点击下一步标签按钮继续。如下截图。
在标签界面可选,点击下一步继续。如下截图。
在创建策略的最后一步,输入策略的名称,例如叫做deny-access-to-admin
,名称可以任意定义,请记住名称,后续创建用户时候将会使用。然后点击创建策略完成创建。如下截图。
创建策略完成。
四、创建用户
进入IAM模块,点击左侧的User用户,点击右上角按钮创建用户。输入用户名admin01
,选择允许编程访问
(会生成AccessKey)和AWS管理控制台访问
(允许Web登录到Console)。密码选择自动生成密码。点击于下焦权限按钮继续。如下截图。
在权限界面,点击直接附加现有策略
按钮,并从策略清单中,选择第一项AdministratorAccess
。此时不要着急继续,还需要添加下一个策略。如下截图。
在搜索框中,输入关键字deny
,也就是本文上一个步骤定义的策略名称,即组织当前用户修改留底账户的策略。然后点击下一步标签继续。如下截图。
在标签界面为可选输入。点击下一步继续。
在创建用户的最后一个界面,点击右下角创建按钮。如下截图。
创建用户完成后,即可获得登录地址、当前用户的密码以及用于API编程的Access Key ID、Secret Key。注意:为安全起见,这些信息只在第一次创建时候显示,创建之后不再显示。如果忘记,请重新创建用户。如下截图。
在记录下登录地址、用户名、密码、API的Access Key和Secret Key后,操作完成。
五、登录用户测试权限
现在使用admin01这个日常使用的管理员账户登录。登录后可看到:
- 日常管理员操作各种权限资源正常;
- 对留底账户创建的资源也可以正常操作,例如留底管理员创建的EC2,当前日常管理员admin01也可以删除之;
但是,当前日常操作管理员账户希望对留底的管理员账号做修改时候,例如修改留底管理员账户的密码、降低权限等行为,都将提示无权限操作。如下截图。
由此过程可以看到,通过IAM策略设置Deny行为,即可确保日常操作管理员账户不能破坏留底账号。因此,留底账号需要妥善保管。
六、参考资料
IAM策略生成器: