Saat membuat aturan, konfigurasikan remediasi kustom menggunakan Function Compute untuk memperbaiki resource yang diidentifikasi sebagai Non-compliant.
Prasyarat
Latar Belakang
Topik ini menggunakan aturan terkelola ecs-running-instance-no-public-ip sebagai contoh untuk mengonfigurasi dan menjalankan remediasi kustom.
Aturan terkelola ecs-running-instance-no-public-ip mengidentifikasi instans ECS yang sedang berjalan dengan alamat IPv4 publik sebagai tidak sesuai (non-compliant). Remediasi tersebut kemudian menghentikan instans-instans tersebut.
Prosedur
Masuk ke Konsol Cloud Config.
Opsional. Di pojok kiri atas, pilih kelompok akun.
Langkah ini hanya diperlukan jika Anda menggunakan akun manajemen dari Direktori sumber daya. Jika tidak, lewati langkah ini.
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Rules, klik Create Rule.
-
Pada halaman Select Create Method, pilih Based on managed rule, pilih aturan ecs-running-instance-no-public-ip dari templat, lalu klik Next.
-
Pada halaman Set Basic Properties, pertahankan pengaturan parameter default, lalu klik Next.
-
Pada halaman Set Effective Scope, pertahankan pengaturan parameter default, lalu klik Next.
-
Pada halaman Set Correction, aktifkan sakelar Set Correction, pilih Function Compute, atur Invoke Type menjadi Manual Remediation, pilih Function ARN, lalu klik Submit.
Penting-
Remediasi otomatis memodifikasi resource yang tidak sesuai berdasarkan parameter yang telah Anda tetapkan sebelumnya, yang dapat mengganggu operasi bisnis Anda. Oleh karena itu, Invoke Type diatur ke Manual Remediation secara default. Kami menyarankan agar Anda mempertahankan pengaturan ini.
-
Jika Anda yakin bahwa remediasi tersebut tidak akan berdampak pada bisnis Anda, Anda dapat mengatur Invoke Type menjadi Automatic Remediation. Saat Cloud Config mendeteksi resource yang tidak sesuai, remediasi akan dieksekusi secara otomatis.
Klik Create New Function untuk membuat layanan dan fungsi di Konsol Function Compute. Buat fungsi dengan cepat.
Saat membuat fungsi, atur Function Type menjadi Event Function dan runtime menjadi python 3. Konfigurasikan parameter lain sesuai kebutuhan. Contoh kode:
#!/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): """ Mengurai string menjadi objek JSON :param content: konten string JSON :return: Objek JSON """ try: return json.loads(content) except Exception as e: logger.error('Gagal mengurai konten:{} menjadi JSON: {}.'.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("Menghentikan instans {}{}".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)CatatanKode contoh terbaru: aliyun-config-remediation.py.
Fungsi utama:
-
handler: Titik masuk default yang dipanggil saat Cloud Config memicu remediasi.
handlerditetapkan saat Anda membuat fungsi. -
get_resources_non_compliant: Mengurai resource yang tidak sesuai. -
remediation: Titik masuk untuk logika remediasi kustom. Konfigurasikan sesuai dengan persyaratan kepatuhan Anda. Untuk aturan "ecs-running-instance-no-public-ip", fungsi ini menghentikan instans yang memiliki alamat IP publik.
-
-
Jalankan remediasi secara manual.
-
Pada halaman Rules, temukan aturan target dan klik Remediation Detail di kolom Remediation Template.
-
Di tab Remediation Detail, klik Perform Manual Correction di samping Remediation Detail.
Bagian Execution Result List menampilkan hasil remediasi dan alasan kegagalan.
CatatanDi tab Remediation Detail, klik Function ARN di samping Remediation Template untuk membuka tab Function Code di Konsol Function Compute.
-
Dokumen Terkait
Untuk konfigurasi kode fungsi dan izin di lingkungan multi-akun, Terapkan remediasi kustom untuk resource yang tidak sesuai di lingkungan multi-akun menggunakan Resource Directory.