當您選擇從模板建立規則或自訂建立規則時,均可以設定自訂修正,通過Function ComputeFC修正不合規資源。當該條規則綁定的資源被判定為不合規時,可以執行修正,快速修正不合規資源。
前提條件
請確保您已開通Function ComputeFC。具體操作,請參見開通服務。
背景資訊
本文以從模板選擇規則模板運行中的ECS執行個體未綁定公網地址建立規則為例,為您介紹設定自訂修正和執行修正的方法。
規則模板運行中的ECS執行個體未綁定公網地址用於檢測運行中的ECS執行個體是否直接綁定IPv4公網地址。如果ECS執行個體檢測結果為“不合規”(即綁定公網IP地址),則大量停止有公網IP的ECS執行個體。
操作步驟
登入配置審計控制台。
(可選)在左上方選擇目標帳號組。
僅資來源目錄下的管理帳號需要執行該操作。單個阿里雲帳號不涉及。
在左側導覽列,選擇
。在規則頁面,單擊建立規則。
在選擇建立方式頁面,先選擇基於模板建立,再從模板中選擇規則運行中的ECS執行個體未綁定公網地址,然後單擊下一步。
在設定基本屬性頁面,各參數均保持預設值,單擊下一步。
在設定生效範圍頁面,各參數均保持預設值,單擊下一步。
在修正設定頁面,開啟設定修正開關,先選擇自訂修正,再選擇觸發方式為手動觸發,然後選擇函數ARN,最後單擊提交。
重要由於自動修正會根據您的預設參數自動修改不合規資源的配置資訊,可能會影響業務的連續性,因此系統預設觸發方式為手動觸發,推薦您使用預設設定。
當您確保本次修正不會對業務造成影響時,可以選擇觸發方式為自動觸發,當配置審計檢測到不合規資源時,會自動執行修正。
單擊前往創建新的函數,在Function Compute控制台上建立服務和函數。具體操作,請參見快速建立函數。
建立函數時,函數類型選擇事件函數,運行環境選擇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,進入Function Compute控制台的目標函數的函數代碼頁簽。
相關文檔
在多帳號情境下,函數代碼及授權配置,請參見企業多帳號情境下實現不合規資源自動修正。