使用阿裡雲操作審計(ActionTrail)自動繼承父資源标簽
背景
标簽被廣泛應用于許多雲上管理場景,比如資源管理、财務管理、自動化運維和權限管理。有了标簽,資源就容易被聚類或者被索引,然而,對于許多使用者而言,管理大量标簽始終是一個挑戰。特别是,當使用者需要給一系列關聯資源統一打标時。
雲資源管理過程中,有很多場景需要建立一個功能子產品,這個子產品包含一個父資源和多個子資源。比如說,當使用者建立一個ECS時,他一定需要建立一個磁盤,有時也會建立一個鏡像,同時,磁盤也可能存在快照。因為這些資源屬于同一個父資源,使用者希望,當給父資源打标簽時,其所包含的子資源也要繼承同樣的标簽,或者當使用者在父資源下添加新的子資源時,使用者希望子資源自動繼承父資源已經有的标簽。我們再舉一個例子,專有網絡(VPC)包含交換機、路由表、NAT網關和VPN網關作為子資源,彈性公網IP可以關聯到NAT網關。我們時常聽到使用者回報,當在VPC下建立新的子資源時,希望子資源能夠自動繼承VPC的标簽。
在這篇文章中,我們将介紹子資源如何自動從父資源繼承标簽。我們将使用以上VPC的場景來講解這個解決方案,但是這個方案并不局限于VPC,可以被應用在任何類似的場景。
目标
下圖展示了VPC和子資源之間的關系
這篇文章中的解決方案将實作以下兩個目标
- 當在VPC下建立子資源時,子資源自動繼承父資源的标簽
- 當給VPC添加新标簽時,所有子資源自動繼承新标簽
解決方案概覽
此解決方中使用到的雲産品
這些雲産品将按照下圖的關系進行內建
操作審計持續記錄VPC和其子資源的操作,其中每一條記錄都會被路由到事件總線(EventBridge),然後我們通過事件總線中的規則過濾出我們感興趣的事件。我們會建立2條規則,規則一過濾出所有給VPC打标的操作(TagResources),規則二過濾出建立VPC子資源的操作。最後我們把兩個規則分别連接配接到相應的函數,以實作自動打标的目标
解決方實施
接下來我們逐漸描述該方案的實施過程
為了成功實施該方案,以下條件必須首先滿足
- 一個阿裡雲賬号
- 對于NodeJS有基本了解
- 確定一下步驟都在同一個區域進行
操作審計預設自動開啟,此處無需額外操作和配置
建立一個阿裡雲服務
為了在函數中給資源打标,我們必須賦予函數VPC和Tag相應權限
- 打開通路控制→ 角色 → 建立角色
- 選擇阿裡雲服務
- 角色命名為TagVPCRole
- 選擇受信服務函數計算
- 點選完成
- 我們需要給這個角色賦予三個角色,
,AliyunVPCReadOnlyAccess
andAliyunLogFullAccess
:AliyunTagAdministratorAccess
建立一個函數服務
接下來我們建立執行打标操作的函數
1. 打開 函數計算
2. 點選 服務及函數
3. 建立一個名為 VPCTagService 的服務
4. 在服務表中找到上面建立的服務
5. 點選 配置
6. 在角色配置部分, 選擇 TagVPCRole
7. 儲存
建立函數func01
當VPC增加新标簽時,這個函數會自動給子資源打上同樣的标簽
1. 打開函數 函數計算 → 服務 → 函數
2. 點選 建立函數, 建立一個名為func01的函數
3. 建立完成後,你會被重定向到函數編輯頁面. 點選 上傳代碼,選擇 上傳Zip檔案
4. Zip檔案可以從這裡擷取
here5. 上傳成功後確定點選 儲存和部署,使代碼生效
建立函數func02
當VPC增加新的子資源時,這個函數會自動給子資源打上同樣的标簽
1. 打開函數 函數計算 → 服務 → 函數
2. 點選 建立函數, 建立一個名為func02的函數
預設事件總線會監聽有操作審計的事件,但是我們并不想因為任意事件觸發一次函數執行。我們隻關心兩類事件,第一類,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
. 這條規則用來過濾建立子資源事件
{
"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 EventBridge和
Function Compute. 雖然我們使用了VPC作為例子,但這個方法同樣适用于其他類似場景