问题
需要给AWS的EC2水平自动扩展组AutoScaling Group(ASG)中的EC2自动定期打补丁。
创建自动化运行IAM角色
找到创建角色入口页面,如下图:
开始创建Systems Manager自动化运行的IAM角色,如下图:
设置AmazonSSMAutomationRole权限,如下图:
设置AmazonSSMAutomationRole角色名和角色描述,点击创建角色,如下图:
创建AWS-PatchAsgInstance自定义策略
找到策略入口页面,开始创建策略如下图:
AWS-PatchAsgInstance自动化文档,需要的权限内容,如下:
{"Version": "2012-10-17","Statement": [{"Sid": "Statement1","Effect": "Allow","Action": ["ssm:StartAutomationExecution","ssm:GetAutomationExecution","ssm:GetCommandInvocation","ssm:GetParameter","ssm:SendCommand","cloudformation:CreateStack","cloudformation:DeleteStack","cloudformation:DescribeStacks","ec2:CreateTags","ec2:DescribeInstances","ec2:RunInstances","iam:AttachRolePolicy","iam:CreateRole","iam:DeleteRole","iam:DeleteRolePolicy","iam:DetachRolePolicy","iam:GetRole","iam:PassRole","iam:PutRolePolicy","lambda:CreateFunction","lambda:DeleteFunction","lambda:GetFunction","lambda:InvokeFunction"],"Resource": "*"}]
}
将AWS-PatchAsgInstance需要的权限设置到策略中,如下图:
设置AWS-PatchAsgInstance策略名和描述,直接创建策略即可,如下图:
然后,将创建好的AWS-PatchAsgInstance自定义策略绑定给AmazonSSMAutomationRole自动化角色,结果如下图:
自动化角色设置PassRole权限角色为自己
找到自动化角色AmazonSSMAutomationRole,如下图:
策略内容如下:
{"Version": "2012-10-17","Statement": [{"Sid": "VisualEditor0","Effect": "Allow","Action": "iam:PassRole","Resource": "arn:aws-cn:iam::xxxxxxxxx:role/AmazonSSMAutomationRole"}]
}
将上述策略权限内容,复制策略编辑器中,如下图:
设置AmazonSSMAutomationRolePolicy策略名称,如下图:
最后AmazonSSMAutomationRole角色权限策略,如下图:
创建维护窗口
找到维护窗口创建页面入口,如下图:
设置维护窗口,如下图:
这里去掉“允许已注销目标”的勾选,意思没有被AWS SSM托管到的EC2目标,不会执行这个维护任务。
后面是设置每周六凌晨1点定时执行维护任务,维护窗持续时间为1个小时。如果在这1个小时内没有执行完,就不执行了(停止启动任务为0小时)。这里的时区为东八区。
最后点击“创建维护时段”。
注册维护目标
找到维护窗口,入口页面如下图:
找到注册目标入口页面,如下图:
设置注册目标,如下图:
这里主要通过EC2实例选择标签Name进行识别dev相关EC2实例。
注册维护任务
找到注册维护任务入口页面,如下图:
设置使用AWS-PatchAsgInstance自动注册任务,并且,设置上一步已经注册的目标组,而且,设置变量InstanceId为{{ TARGET_ID }}
,并且,这个任务是一个一个执行,执行完一个没有错误就执行下一个。设置之前的IAM服务角色。最后,点击注册自动化任务。如下图:
查看历史记录
找到查询历史记录网页入口,如下图:
查看到成功结果,即可,如下图:
注意
加入了定时维护窗口的AutoScaling组,需要禁用自动缩容策略,不然,这个自动任务可能找不到EC2实例;还有就是AutoScaling组所需EC2实例数,需要大于AutoScaling组最小EC2实例数。只有这个两个AutoScaling组条件满足,才能使用自动维护窗口。
总结
使用自动化维护任务打补丁,还算简单,只是对AutoScaling有自动缩容限制。第一步合规性就是每天扫描一次所有EC2是否合规,定时自定化维护任务,就是每周六半天打补丁。
参考:
- 方法 2:使用 IAM 为自动化配置角色
- 创建维护时段(控制台)
- 为维护时段分配任务(控制台)
- 注册维护时段任务时使用伪参数
- AutoScalingで1台ずつ自動的にパッチを当てるSSM Automationやってみた