背景
对于规模比较大的企业,不同部门的ECS实例可能会分布在多个账号中。多个账号中ECS实例的补丁的集中管理成为摆在企业资产管理者面前的重要问题。本文将介绍如何通过补丁管理功能跨账号跨地域的集中修复ECS实例操作系统补丁。
实现原理
在跨账号补丁修复的场景中,阿里云账号分为两个角色。
管理账号
资源账号
其中资源账号可以有一个或者多个,管理账号本身也可以是一个资源账号。
通过在所有资源账号下创建管理账号可以扮演的RAM角色的方式,授权补丁修复所需要的相关权限。从而可以达到在管理账号内跨账号跨地域集中修复补丁的效果。
前置条件
如果需要设置自定义的补丁基线,可以通过 ALIYUN::OOS::PatchBaseline 或者 Terraform 统一管理所有资源账号下的自定义补丁基线。
操作步骤
在资源账号中创建RAM角色
需要在所有资源账号中都创建用于补丁管理的RAM角色,并授权管理账号扮演。步骤如下:
单击选择自动化任务>公共任务模板,选择 创建角色并授予自定义权限策略。
单击 创建执行。
单击下一步: 设置参数。
新建角色名称。可自定义角色名称,例如 PatchRole。
角色信任的云账号。填写管理账号的阿里云ID,默认 {{ ACS::AccountId }} 是授权给本账号。
新建并授予的自定义权限策略名称。可自定义权限策略名称,例如 PatchPolicy。
授权的自定义权限策略脚本。复制下方代码填入。
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInvocationResults", "ecs:DescribeInstances", "ecs:RunCommand", "ecs:RebootInstance", "ecs:DescribeCloudAssistantStatus", "ecs:DescribeInvocations" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "oos:ListInstancePatchStates" ], "Resource": "*", "Effect": "Allow" } ] }
单击确定,单击创建执行,等待执行完成。
补丁修复
使用附录中的模板创建跨账号执行模板来跨账号跨地域补丁修复。
执行模板。
accountRoleAndRegions。分别在资源账号下上海和北京地域运行补丁修复操作。
[ { "OOSAssumeRole": "|${资源账号uid}/PatchRole", "RegionId": "cn-shanghai" }, { "OOSAssumeRole": "|${资源账号uid}/PatchRole", "RegionId": "cn-beijing" } ]
templateName。选择ACS-ECS-BulkyApplyPatchBaseline。
templateParameters。模板参数参考《立即修复》,可以如下设置。
{ "regionId": "{{ regionId }}", "targets": { "Type": "All", "RegionId": "{{ regionId }}", "Parameters": { "RegionId": "{{ regionId }}", "Status": "Running" } }, "action": "install", "rebootIfNeed": true, "rateControl": { "Mode": "Concurrency", "MaxErrors": 0, "Concurrency": 10 }, "OOSAssumeRole": "", "timeout": 86400 }
单击 确定,单击 创建执行。
创建执行成功后,您可单击该执行的详情,查看执行日志,实时了解执行的进度和状态。
附录
跨账号跨地域执行模板:
FormatVersion: OOS-2019-06-01
Description:
en: Multi account to execute specified template
zh-cn: 跨账号执行指定模板
name-en: MultiAccountToExecuteTemplate
name-zh-cn: 跨账号执行指定模板
Parameters:
accountRoleAndRegions:
Type: Json
templateName:
Type: String
AssociationProperty: TemplateName
templateParameters:
Description:
en: Template paremeters to execute with.
zh-cn: 触发执行模板的参数。
Type: Json
AssociationProperty: TemplateParameter
AssociationPropertyMetadata:
TemplateName: $templateName
rateControl:
Description:
en: Concurrency ratio of task execution.
zh-cn: 任务执行的并发比率。
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 10
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: executeTemplate
Action: 'ACS::Template'
Description:
en: Execute template.
zh-cn: 执行模板。
Properties:
TemplateName: '{{ templateName }}'
Parameters:
'Fn::MergeMap':
- '{{ templateParameters }}'
- regionId:
'Fn::Select':
- RegionId
- '{{ACS::TaskLoopItem}}'
- OOSAssumeRole:
'Fn::Select':
- OOSAssumeRole
- '{{ACS::TaskLoopItem}}'
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ accountRoleAndRegions }}'