使用OOS实现跨账号跨地域执行命令

实现原理:

在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.使用附录中的模板创建跨账号执行模板来跨账号跨地域执行命令。image.png

3.执行跨账号执行模板。

image.png

image.png

参数说明:

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 }}'