使用阿里云操作审计(ActionTrail)自动继承父资源标签-阿里云开发者社区

开发者社区> 1813415299932863> 正文

使用阿里云操作审计(ActionTrail)自动继承父资源标签

简介: # 使用阿里云操作审计(ActionTrail)自动继承父资源标签 ## 背景 标签被广泛应用于许多云上管理场景,比如资源管理、财务管理、自动化运维和权限管理。有了标签,资源就容易被聚类或者被索引,然而,对于许多用户而言,管理大量标签始终是一个挑战。特别是,当用户需要给一系列关联资源统一打标时。 云资源管理过程中,有很多场景需要创建一个功能模块,这个模块包含一个父资源和多个子资源。比如说,当
+关注继续查看

使用阿里云操作审计(ActionTrail)自动继承父资源标签

背景

标签被广泛应用于许多云上管理场景,比如资源管理、财务管理、自动化运维和权限管理。有了标签,资源就容易被聚类或者被索引,然而,对于许多用户而言,管理大量标签始终是一个挑战。特别是,当用户需要给一系列关联资源统一打标时。

云资源管理过程中,有很多场景需要创建一个功能模块,这个模块包含一个父资源和多个子资源。比如说,当用户创建一个ECS时,他一定需要创建一个磁盘,有时也会创建一个镜像,同时,磁盘也可能存在快照。因为这些资源属于同一个父资源,用户希望,当给父资源打标签时,其所包含的子资源也要继承同样的标签,或者当用户在父资源下添加新的子资源时,用户希望子资源自动继承父资源已经有的标签。我们再举一个例子,专有网络(VPC)包含交换机、路由表、NAT网关和VPN网关作为子资源,弹性公网IP可以关联到NAT网关。我们时常听到用户反馈,当在VPC下创建新的子资源时,希望子资源能够自动继承VPC的标签。

在这篇文章中,我们将介绍子资源如何自动从父资源继承标签。我们将使用以上VPC的场景来讲解这个解决方案,但是这个方案并不局限于VPC,可以被应用在任何类似的场景。

目标

下图展示了VPC和子资源之间的关系

VPCTag_drawio

这篇文章中的解决方案将实现以下两个目标

  1. 当在VPC下创建子资源时,子资源自动继承父资源的标签
  2. 当给VPC添加新标签时,所有子资源自动继承新标签

解决方案概览

此解决方中使用到的云产品

这些云产品将按照下图的关系进行集成

arch_drawio

操作审计持续记录VPC和其子资源的操作,其中每一条记录都会被路由到事件总线(EventBridge),然后我们通过事件总线中的规则过滤出我们感兴趣的事件。我们会创建2条规则,规则一过滤出所有给VPC打标的操作(TagResources),规则二过滤出创建VPC子资源的操作。最后我们把两个规则分别连接到相应的函数,以实现自动打标的目标

解决方实施

接下来我们逐步描述该方案的实施过程

为了成功实施该方案,以下条件必须首先满足

  • 一个阿里云账号
  • 对于NodeJS有基本了解
  • 确保一下步骤都在同一个区域进行

操作审计(ActionTrail)

操作审计默认自动开启,此处无需额外操作和配置

创建一个阿里云服务

为了在函数中给资源打标,我们必须赋予函数VPC和Tag相应权限

  1. 打开访问控制→ 角色 → 创建角色
  2. 选择阿里云服务

  1. 角色命名为TagVPCRole
  2. 选择受信服务函数计算

  1. 点击完成
  2. 我们需要给这个角色赋予三个角色, AliyunVPCReadOnlyAccess, AliyunLogFullAccess and AliyunTagAdministratorAccess:

创建一个函数服务

接下来我们创建执行打标操作的函数

1.  打开 函数计算

2.  点击 服务及函数

3.  创建一个名为 VPCTagService 的服务

4.  在服务表中找到上面创建的服务

5.  点击 配置

6.  在角色配置部分, 选择 TagVPCRole

7.  保存

创建函数func01

当VPC增加新标签时,这个函数会自动给子资源打上同样的标签

1.  打开函数 函数计算 → 服务 → 函数

2.  点击 创建函数, 创建一个名为func01的函数

3.  创建完成后,你会被重定向到函数编辑页面. 点击 上传代码,选择 上传Zip文件


4.  Zip文件可以从这里获取 here

5.  上传成功后确保点击 保存和部署,使代码生效

_2021_10_28_11_50_58

创建函数func02

当VPC增加新的子资源时,这个函数会自动给子资源打上同样的标签

1.  打开函数 函数计算 → 服务 → 函数

2.  点击 创建函数, 创建一个名为func02的函数


3.  创建完成后,你会被重定向到函数编辑页面. 点击 上传代码,选择 上传Zip文件

4.  Zip文件可以从这里获取 here

5.  上传成功后确保点击 保存和部署,使代码生效

_2021_10_28_11_50_58

事件总线(EventBridge)

默认事件总线会监听有操作审计的事件,但是我们并不想因为任意事件触发一次函数执行。我们只关心两类事件,第一类,VPC打标事件,第二类创建VPC子资源事件。因此,我们创建两个规则,分别过滤这两类事件。

创建规则1

第一个规则命名为 TagVPC. 这个规则将用来过滤VPC上的 TagResources 事件。
1.  打开 事件总线->default->事件规则->创建规则
2.  定义事件模式

{
    "data": {
        "eventName": [
            "TagResources"
        ],
        "serviceName": [
            "Vpc"
        ]
    },
    "source": [
        "acs.vpc"
    ],
    "type": [
        "vpc:ActionTrail:AliyunServiceEvent",
        "vpc:ActionTrail:ApiCall",
        "vpc:ActionTrail:ConsoleOperation"
    ]
}

3.  下一步我们把规则的目标指向对应的函数
  选择 函数计算 作为服务类型,选择函数func01

创建规则 2

第二条规则命名为 CreateVPCResources. 这条规则用来过滤创建子资源事件

1.  打开 事件总线->default->事件规则->创建规则
2.  定义事件模式

{
    "data": {
        "resourceType": [
            "ACS::VPC::NatGateway",
            "ACS::VPNGateway::VpnGateway",
            "ACS::ECS::Instance;ACS::EIP::EipAddress",
            "ACS::VPC::VSwitch;ACS::VPC::VPC",
            "ACS::VPC::RouteTable;ACS::VPC::VPC",
            "ACS::VPC::VPC"
        ],
        "eventName": [
            "Create",
            "AssociateEipAddress",
            "CreateVSwitch",
            "CreateRouteTable"
        ]
    },
    "source": [
        "acs.vpc"
    ],
    "type": [
        "vpc:ActionTrail:AliyunServiceEvent",
        "vpc:ActionTrail:ApiCall",
        "vpc:ActionTrail:ConsoleOperation"
    ]
}

2. 按照上面的方法,把func02添加为这个规则的目标

总结

这篇文章讲述了如何从VPC向其子资源自动传播标签。此方案适用了ActionTrail, EventBridgeFunction Compute. 虽然我们使用了VPC作为例子,但这个方法同样适用于其他类似场景

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10073 0
react native插件 react-navigation使用心得
StackNavigator StackNavigator(screens,configs) const Stack = StackNavigator({ Home: { screen: Home, }, Profile: { screen: Profile } }.
1243 0
艾伟:[一步一步MVC]第一回:使用ActionSelector控制Action的选择
本系列文章导航 [一步一步MVC]第一回:使用ActionSelector控制Action的选择 [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 [一步一步MVC]第三回:MVC范例大观园 [一步一步MVC]第四回:漫谈ActionLink,有时“...
692 0
自定义Application使用示例——几个Activity共同操作某个变量
MainActivity如下: package cn.testapplication; import android.os.Bundle; import android.
671 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13882 0
【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱。      然而在使用的过程中会发现Intellij IDEA也有一些不尽如意的地方,难免会有些不爽:Intellij IDEA 的插件库远不及eclipse的丰富。
1744 0
1
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载