实现原理:
在123456账号下以RoleA身份扮演654321账号下的RoleB跨账号调用654321账号下的资源
准备工作
创建RAM角色:
在账号123456和账号654321下分别创建RAM角色:OOSServiceRole,具体操作参考为OOS服务设置RAM权限。
配置信任策略:
123456/OOSServiceRole:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"oos.aliyuncs.com"
]
}
}
],
"Version": "1"
}
654321/OOSServiceRole:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::123456:root"
]
}
}
],
"Version": "1"
}
权限配置:
1.授予123456/OOSServiceRole权限:AliyunSTSAssumeRoleAccess
2.授予654321/OOSServiceRole权限:执行命令所用到资源的相关权限,本文演示授予AliyunECSFullAccess
操作步骤
1.通过123456账号登录系统运维管理控制台。
2.使用附录中的模板创建跨账号执行模板来跨账号跨地域执行命令。
3.执行跨账号执行模板。
参数说明:
accountRoleAndRegions:
分别在654321账号下上海和北京地域运行中ECS上执行命令
[
{
"OOSAssumeRole": "OOSServiceRole|654321/OOSServiceRole",
"RegionId": "cn-shanghai"
},
{
"OOSAssumeRole": "OOSServiceRole|654321/OOSServiceRole",
"RegionId": "cn-beijing"
}
]
templateParameters:
targets说明:选择目标账号下目标地域运行中状态实例
{
"commandType": "RunShellScript",
"commandContent": "echo hello",
"workingDir": "",
"windowsPasswordName": "",
"rateControl": {
"MaxErrors": 0,
"Concurrency": 10,
"Mode": "Concurrency"
},
"enableParameter": false,
"targets": {
"Type": "All",
"Parameters": {
"Status": "Running",
"RegionId": "{{regionId}}"
},
"RegionId": "{{regionId}}"
},
"timeout": 600,
"username": ""
}
附录
跨账号跨地域执行模板:
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 parameters to execute with.
zh-cn: 触发执行模板的参数。
Type: Json
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 }}'
文档内容是否对您有帮助?