当企业在云上有多个账号时,安全应急团队或运维团队需要实时了解整个企业的云上资源动态,订阅重要或高风险资源的配置变更信息,以便及时监控和维护这些资源。企业通过资源目录对多个账号中的资源进行统一管理后,可以通过配置审计将资源的配置变更事件投递到事件总线EventBridge,还可以通过函数计算中2.0的触发器将事件总线EventBridge中的资源配置变更事件投递到函数计算。
应用场景
某企业统一管理多账号中资源的配置变更事件的应用场景如下图所示。
某企业的管理账号通过一个成员(日志账号A)查看其他成员(业务账号B和业务账号C)中资源的配置变更事件,本文以查看前缀为sg-
的RAM角色的配置变更事件为例进行介绍。
前提条件
资源目录的管理账号已将日志账号A、业务账号B和业务账号C加入资源目录。具体操作,请参见创建成员或邀请阿里云账号加入资源目录。
请确保您已开通函数计算服务。具体操作,请参见快速创建函数。
请确保您已开通事件总线EventBridge服务。具体操作,请参见开通事件总线EventBridge并授权。
数据规划
本文以访问控制的RAM角色的配置变更事件为例,为您介绍通过配置审计、事件总线EventBridge和函数计算实现订阅资源的配置变更事件的方法,相关数据规划如下表所示。
云服务 | 操作账号 | 参数 | 示例 |
资源管理 | 管理账号 | 日志账号A(RAM用户) | - |
业务账号B(RAM用户) | - | ||
业务账号C(RAM用户) | - | ||
事件总线 | 业务账号B | 规则名称 | b-eb-filter-ram-role |
业务账号C | 规则名称 | c-eb-filter-ram-role | |
函数计算 | 日志账号A | 服务 | eb_event_action |
服务的系统模板权限 | AliyunFCDefaultRolePolicy | ||
函数 | eb_event_trigger | ||
触发器 | ConfigurationItemChangeTrigger | ||
访问控制 | 日志账号A | RAM角色 | account-eb-role |
业务账号B | RAM角色 | sg-01 | |
业务账号C | RAM角色 | sg-02 |
操作流程
企业在多账号场景下,订阅资源的配置变更事件的操作流程如下图所示。
步骤一:日志账号创建RAM角色
日志账号A通过事件总线EventBridge提供的跨账号事件路由的能力,将业务账号B和业务账号C的事件投递到日志账号A的事件总线EventBridge中,日志账号A可以集中查看业务账号B和业务账号C的资源配置变更事件。
首先日志账号A需要完成跨账号投递事件的角色授权,即创建RAM角色(account-eb-role),并授权事件总线EventBridge向业务账号A投递事件的权限。
创建RAM角色并授权事件总线EventBridge。
修改信任策略。
在角色页面,单击目标RAM角色名称。
单击信任策略页签,然后单击编辑信任策略。
修改信任策略内容。
业务账号B和业务账号C授信于日志账号A后,日志账号A的事件总线EventBridge可以扮演该RAM角色。信任策略示例如下:
{ "Statement":[ { "Action":"sts:AssumeRole", "Effect":"Allow", "Principal":{ "Service":[ "<业务账号B的ID>@eventbridge.aliyuncs.com", "<业务账号C的ID>@eventbridge.aliyuncs.com" ] } } ], "Version":"1" }
单击保存信任策略。
步骤二:业务账号配置事件总线
业务账号B创建事件总线规则b-eb-filter-ram-role,业务账号C创建事件总线规则c-eb-filter-ram-role。业务账号B和业务账号C中的资源变更事件通过角色account-eb-role路由到日志账号A的事件总线EventBridge中。
在左侧导航栏,单击事件总线。
在顶部菜单栏,选择地域,例如:华东2(上海)。
在事件总线页面,单击云服务专用事件总线区域的创建规则。
在创建规则页面,设置事件总线规则的相关参数。
在配置基本信息页面,输入事件总线名称,单击下一步。
在配置事件模式页面,事件源类型选择阿里云官方事件源、事件源选择acs.ram访问控制、事件类型选择ram:Config:ConfigurationItemChangeNotification(访问控制配置变更通知)、模式内容输入以下信息,然后单击下一步。
仅当访问控制中前缀为
sg-
的资源(RAM角色或RAM用户)的配置变更时,事件总线EventBridge才会记录事件。事件模式内容如下:{ "source": [ "acs.ram" ], "data": { "resourceName": [ { "prefix": "sg-" } ] }, "type": [ "ram:Config:ConfigurationItemChangeNotification" ] }
在配置事件目标页面,服务类型选择EventBridge事件总线、目标类型选择跨账号总线、选择地域、账号ID输入日志账号A的ID、总线名称输入default、角色配置输入account-eb-role、事件为完整事件,然后单击创建。
步骤三:日志账号配置函数计算
日志账号A在函数计算中创建函数,并通过触发器将资源的配置变更事件投递到函数计算中。
新建服务。
登录函数计算控制台。
在左侧导航栏,单击服务及函数。
在顶部菜单栏,选择地域,例如:华东2(上海)。
在服务列表页面,单击创建服务。
在创建服务面板,名称输入eb_event_action。
单击确定。
创建函数。
在服务eb_event_action的函数管理页面,单击创建函数。
在创建函数页面,设置函数的基本信息和触发器。
在基本信息区域:函数名称输入eb_event_trigger,运行环境选择Python 3.6,其他参数保持默认值。
在配置触发器区域:触发器类型选择云产品事件触发器下的访问控制,名称输入ConfigurationItemChangeTrigger,事件类型选择选中全部事件类型。事件模式内容如下:
{ "source": [ "acs.ram" ], "type": [ "ram:ActionTrail:AliyunServiceEvent", "ram:ActionTrail:ApiCall", "ram:ActionTrail:ConsoleOperation", "ram:Config:ConfigurationItemChangeNotification", "ram:Config:NonCompliantNotification" ] }
其他参数保持默认值。
说明如果函数计算初次访问事件总线EventBridge,则需要根据提示授权,允许事件总线EventBridge访问函数计算。
单击创建。
显示函数调用日志。
在函数eb_event_trigger的函数代码页签,将文件index.py中的
logger.info('hello world')
修改为logger.info(event)
。单击左上角的部署代码。
步骤四:业务账号变更资源
业务账号B创建一个RAM角色sg-01,业务账号C创建一个RAM角色sg-02。具体操作,请参见创建可信实体为阿里云账号的RAM角色。
步骤五:日志账号查看资源的配置变更事件
日志账号A查看业务账号B和业务账号C资源的配置变更事件。查看方式如下:
通过事件总线EventBridge控制台查看
在顶部菜单栏,选择地域,例如:华东2(上海)。
在左侧导航栏,单击事件总线。
单击default对应操作列的事件追踪。
选择目标时间范围、事件源为acs.ram访问控制和事件类型为ram:Config:ConfigurationItemChangeNotification,单击查询。
单击目标事件对应操作列的事件详情。
业务账号B创建的RAM角色sg-01的事件详情。
业务账号C创建的RAM角色sg-02的事件详情。
通过函数计算控制台查看
登录函数计算控制台。
在顶部菜单栏,选择地域,例如:华东2(上海)。
在左侧导航栏,单击服务及函数。
单击目标服务名称eb_event_action。
单击目标函数名称eb_event_trigger。
在函数日志页签,选择目标时间范围。
说明当您初次查看函数的调用日志时,需要单击一键启用,启用日志功能。
业务账号B创建的RAM角色sg-01的事件详情。
业务账号C创建的RAM角色sg-02的事件详情。