首页 级联资源自动标签同步方案

级联资源自动标签同步方案

更新时间: 2024-04-02 14:11:10

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

方案概述

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

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

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

方案优势

自动打标

传统维护资源标签需要人工处理,很容易出现误打。以网络资源为例,在VPC上面打了标签,但这个VPC下的Vswitch可能就误打了。而通过这个方案可以做到完全自动化,由程序处理,减轻维护打标签成本。

架构可扩展

基于阿里云提供的基础组件,提升了整体架构稳定性及扩展性。分析操作日志事件不仅可以用于打标签,还可以拿来做其他运维相关操作。覆盖更多类似场景。

客户场景

自动维护级联资源标签

场景描述

企业在管理云上资源时候,强烈依赖标签(Tag),用于日常运维或者财务分账。这个时候确保标签的准确性及有效性就显得特别重要。特别是处理有级联关系资源时,如何确保关联资源标签的一致性。是很多企业需要考虑的一个场景。

适用客户

  • 对标签有强烈需求的客户
  • 存在级联关系资源场景的客户

客户案例

客户背景

TogaLimited,国际大客户

客户诉求

希望使用VPC的标签功能,如果给VPC打了标签之后,就可以映射到该VPC下所有资源,实现VPC一键对其下资源打标签。

实施方案

给VPC打了标签之后,就可以映射到该VPC下所有资源,实现VPC一键对其下资源打标签。

客户收益

提升了产品易用性,客户能做到一键对VPC下资源打标签。

方案架构

为了更好地说明这个方案的架构实现。以VPC作为一个场景来说明架构方案。

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

实现以下两个目标

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

架构图

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

产品费用及名词

产品费用

产品名称

产品说明

产品费用

操作审计(ActionTrail)

操作审计(ActionTrail)操作审计(ActionTrail)帮助您监控并记录阿里云账号的活动,包括通过阿里云控制台、OpenAPI、开发者工具对云上产品和服务的访问和使用行为。您可以将这些行为事件下载或保存到日志服务或OSS存储空间,然后进行行为分析、安全分析、资源变更行为追踪和行为合规性审计等操作

免费,详情参见产品定价

事件总线(EventBridge)

事件总线(EventBridge)事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。

免费,详情参见产品定价

函数计算(Function Compute)

函数计算(Function Compute)函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。

收费,详情参见产品计费

名词解释

名称

说明

标签(Tag)

标签是云资源的标识,可以帮助您从不同维度对具有相同特征的云资源进行分类、搜索和聚合,让资源管理变得更加轻松。

安全性

为了在函数中给资源打标,我们必须赋予函数计算对VPC和Tag有以下权限:

配置的访问权限:

  • 授权范围整个云账号,然后选择权限策略。
  • 系统策略:从权限策略名称列表,选择需要的权限。

权限名称

说明

AliyunVPCReadOnlyAccess

只读访问专有网络(VPC)的权限

AliyunLogFullAccess

管理日志服务(Log)的权限

AliyunTagAdministratorAccess

管理标签服务(TAG)和所有阿里云产品标签的权限

注意事项

此方案不能完全替代对标签的审计。建议结合配置审计一起使用,以免出现遗漏打标的情况。

实施步骤

接下来我们逐步描述该方案的实施过程,为了成功实施该方案,以下条件必须首先满足:

  • 要有一个阿里云账号
  • 对于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. 打开 函数计算 → 服务&函数 → 选择VPCTagService。

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

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


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

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

创建函数func02

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

1. 打开 函数计算 → 服务&函数 → 选择VPCTagService。

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


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

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

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

事件总线(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添加为这个规则的目标。

故障排除

为什么对资源做了操作,但在操作审计中查询不到日志?

注意是否在同一个Region。

存量迁移方案

对于存量资源,需要触发操作事件,建议对标签做下修改操作,如先删除一个标签,再添加上。

相关内容