當您選擇從模板創建規則或自定義創建規則時,均可以設置自定義修正,通過函數計算FC修正不合規資源。當該條規則綁定的資源被判定為不合規時,可以執行修正,快速修正不合規資源。
前提條件
請確保您已開通函數計算FC。具體操作,請參見開通服務。
背景信息
本文以從模板選擇規則模板運行中的ECS實例未綁定公網地址創建規則為例,為您介紹設置自定義修正和執行修正的方法。
規則模板運行中的ECS實例未綁定公網地址用于檢測運行中的ECS實例是否直接綁定IPv4公網地址。如果ECS實例檢測結果為“不合規”(即綁定公網IP地址),則批量停止有公網IP的ECS實例。
操作步驟
登錄配置審計控制臺。
(可選)在左上角選擇目標賬號組。
僅資源目錄下的管理賬號需要執行該操作。單個阿里云賬號不涉及。
在左側導航欄,選擇
。在規則頁面,單擊新建規則。
在選擇創建方式頁面,先選擇基于模板創建,再從模板中選擇規則運行中的ECS實例未綁定公網地址,然后單擊下一步。
在設置基本屬性頁面,各參數均保持默認值,單擊下一步。
在設置生效范圍頁面,各參數均保持默認值,單擊下一步。
在修正設置頁面,打開設置修正開關,先選擇自定義修正,再選擇觸發方式為手動觸發,然后選擇函數ARN,最后單擊提交。
重要由于自動修正會根據您的預設參數自動修改不合規資源的配置信息,可能會影響業務的連續性,因此系統默認觸發方式為手動觸發,推薦您使用默認設置。
當您確保本次修正不會對業務造成影響時,可以選擇觸發方式為自動觸發,當配置審計檢測到不合規資源時,會自動執行修正。
單擊前往創建新的函數,在函數計算控制臺上創建服務和函數。具體操作,請參見快速創建函數。
創建函數時,函數類型選擇事件函數,運行環境選擇python 3,其他參數均可根據實際需求設置,函數代碼示例如下:
#!/usr/bin/env python # -*- encoding: utf-8 -*- import json from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkcore.auth.credentials import AccessKeyCredential from aliyunsdkcore.auth.credentials import StsTokenCredential from aliyunsdkecs.request.v20140526.StopInstanceRequest import StopInstanceRequest from aliyunsdkcore.auth.credentials import AccessKeyCredential from aliyunsdkcore.auth.credentials import StsTokenCredential from aliyunsdkkms.request.v20160120.DecryptRequest import DecryptRequest # -*- coding: utf-8 -*- import logging import json logger = logging.getLogger() def handler(event, context): get_resources_non_compliant(event, context) def get_resources_non_compliant(event, context): resources = parse_json(event) for resource in resources: remediation(resource, context) def parse_json(content): """ Parse string to json object :param content: json string content :return: Json object """ try: return json.loads(content) except Exception as e: logger.error('Parse content:{} to json error:{}.'.format(content, e)) return None def remediation(resource, context): logger.info(resource) region_id = resource['regionId'] account_id = resource['accountId'] resource_id = resource['resourceId'] resource_type = resource['resourceType'] config_rule_id = resource['configRuleId'] if resource_type == 'ACS::ECS::Instance' and config_rule_id == 'cr-f8a1626622af005d****': print(region_id, account_id, resource_id, resource_type, config_rule_id) stop_ecs_instance(context, region_id, resource_id) def stop_ecs_instance(context, resource_region_id, resource_id): logger.info("注意:開始停機操作{}{}".format(resource_region_id, resource_id)) creds = context.credentials client = AcsClient(creds.access_key_id, creds.access_key_secret, region_id=resource_region_id) request = StopInstanceRequest() request.set_accept_format('json') request.set_InstanceId("i-hp3f6lofgrnml5mt****") request.set_StoppedMode("KeepCharging") request.add_query_param('SecurityToken', creds.security_token) response = client.do_action_with_exception(request) logger.info(response)
說明自定義修正的最新函數代碼示例,請參見aliyun-config-remediation.py。
本函數代碼中的主要函數如下:
handler:為配置審計觸發的默認函數入口,即自定義修正觸發時調用的函數。
handler
在新建函數時進行設置。get_resources_non_compliant
:解析不合規資源。remediation
:為自定義修正入口,可以根據您的檢測需求設置。例如:規則模板“運行中的ECS實例未綁定公網地址”,如果檢測結果為“不合規”(即綁定公網IP地址),則修正為停機操作。
手動執行修正。
在規則頁面,單擊目標規則對應修正模板列的修正詳情。
在修正詳情頁簽,單擊修正詳情正后方的執行手動修正。
在執行結果列表區域,您可以查看修正執行結果。對于修正失敗的資源,您還可以查看失敗原因。
說明在修正詳情頁簽,單擊修正模板正后方的函數ARN,進入函數計算控制臺的目標函數的函數代碼頁簽。
相關文檔
在多賬號場景下,函數代碼及授權配置,請參見企業多賬號場景下實現不合規資源自動修正。