Anda dapat menggabungkan kemampuan manajemen lintas akun dari Resource Directory dengan fitur account group Cloud Config untuk menerapkan remediasi kustom pada resource yang tidak sesuai di beberapa akun.
Prasyarat
-
Direktori sumber daya telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan Direktori Sumber Daya.
-
Function Compute telah diaktifkan. Untuk informasi selengkapnya, lihat Langkah 1: Aktifkan Function Compute.
PentingSaat menggunakan Function Compute, Anda dikenai biaya berdasarkan jumlah pemanggilan fungsi, penggunaan sumber daya, dan lalu lintas Internet keluar. Untuk informasi selengkapnya, lihat Ikhtisar penagihan.
Informasi latar belakang
Cloud Config mendeteksi resource yang tidak sesuai dengan menjalankan aturan dan menerapkan remediasi kustom untuk memperbaikinya. Untuk melakukan remediasi terhadap resource yang tidak sesuai di beberapa akun, gunakan kemampuan manajemen akun dan sumber daya multi-level dari Resource Directory. Contoh berikut memeriksa apakah instans ECS memiliki Agen CloudMonitor yang terinstal, serta menunjukkan cara mendeteksi dan secara otomatis melakukan remediasi terhadap resource yang tidak sesuai di berbagai akun. Dalam contoh ini, Akun A (ID: 100931896542****) memiliki izin administrator di Resource Directory (atau merupakan akun administrator yang didelegasikan untuk Cloud Config), sedangkan Akun B (ID: 178366182654****) adalah akun anggota yang berisi resource yang tidak sesuai. Langkah-langkah berikut menjelaskan cara menggunakan Akun A untuk mendeteksi dan melakukan remediasi terhadap resource yang tidak sesuai di Akun B.
Langkah 1: Buat peran untuk akun manajemen dan sambungkan kebijakan ke peran tersebut
-
Masuk ke Konsol Resource Access Management (RAM).
-
Buat peran RAM.
-
Pada panel navigasi sebelah kiri, pilih Identities > Roles.
-
Klik Create Role. Pada panel Create Role, konfigurasikan parameter peran.
-
Untuk Select type of trusted entity, pilih Alibaba Cloud Account, lalu klik Next.
-
Masukkan Role Name, misalnya,
ConfigCustomRemediationRole. Untuk Select Trusted Alibaba Cloud Account, pilih Current Alibaba Cloud Account. -
Klik OK.
-
Klik Close.
-
-
-
Buat kebijakan izin.
-
Pada panel navigasi sebelah kiri, pilih Permissions > Policies.
-
Klik Create Policy untuk membuka halaman Create Policy.
-
Pada tab JSON, masukkan isi kebijakan berikut.
// Entitas yang mengasumsikan peran ini memiliki izin untuk menginstal Agen CloudMonitor. { "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cms:InstallMonitoringAgent", "Resource": "*" }, { "Action": "sts:AssumeRole", "Effect": "Allow", "Resource": "*" } ] } -
Klik OK, lalu masukkan nama kebijakan, misalnya,
ConfigCustomRemediationPolicy. -
Klik Save.
-
-
-
Berikan izin kepada peran tersebut.
-
Pada panel navigasi sebelah kiri, pilih Permissions > Grants.
-
Klik Grant Permission. Pada panel yang muncul, berikan izin baru kepada peran tersebut.
-
Untuk Grant Permission On, pilih Account.
-
Pada bidang Principal, masukkan
ConfigCustomRemediationRoledan pilih peran tersebut dari hasil pencarian. -
Pada bagian Select Policy, klik tab Custom policy. Masukkan
ConfigCustomRemediationPolicypada kotak pencarian dan pilih kebijakan tersebut dari hasil pencarian. -
Klik OK.
-
-
-
Sambungkan kebijakan kepercayaan ke peran tersebut.
-
Pada panel navigasi sebelah kiri, pilih Identities > Roles.
-
Pada halaman Roles, cari
ConfigCustomRemediationRoledan klik nama peran tersebut untuk membuka halaman detail peran. -
Pada tab Trust Policy Management, klik Edit Trust Policy dan ganti kebijakan yang ada dengan konten berikut.
// Izinkan layanan Function Compute untuk mengasumsikan peran ini. { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::100931896542****:root" ] } }, { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "fc.aliyuncs.com" ] } } ], "Version": "1" } -
Klik OK.
-
Langkah 2: Buat peran untuk anggota dan sambungkan kebijakan ke peran tersebut
-
Buat peran RAM dan berikan izin kepada peran tersebut.
Untuk informasi selengkapnya, lihat Langkah 1 hingga 4 dalam Langkah 1.
-
Sambungkan kebijakan kepercayaan ke peran tersebut.
Untuk informasi selengkapnya, lihat Langkah 5 dalam Langkah 1. Ganti skrip kebijakan dengan skrip contoh berikut.
// Izinkan Akun A (ID: 100931896542****) untuk mengasumsikan peran ini. { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::178366182654****:root" ] } }, { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::100931896542****:role/configcustomremediationrole" ] } } ], "Version": "1" }
Langkah 3: Buat fungsi remediasi kustom
-
Masuk ke Konsol Function Compute.
-
Pada panel navigasi sebelah kiri, klik Function.
-
Klik Create Function. Panel Create Function akan muncul.
-
Pilih Event Function.
-
Pada bagian Basic Configurations, masukkan FunctionName, misalnya,
ConfigRemediationService. -
Pertahankan nilai default untuk Specifications dan Instance Concurrency.
-
-
-
Pada pengaturan elastisitas, atur Elastic Mode ke Default mode: On-demand + Cold start.
-
Pada bagian Function Code, pilih Python 3.9 untuk Runtime dan Use Sample Code untuk Code Upload Method.
-
Klik Create untuk membuka halaman detail fungsi.
-
Pada tab Function Details, masukkan kode berikut untuk fungsi remediasi resource.
#!/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.request import CommonRequest from aliyunsdkcore.auth.credentials import StsTokenCredential from aliyunsdksts.request.v20150401.AssumeRoleRequest import AssumeRoleRequest import logging logger = logging.getLogger() # Kode contoh ini digunakan untuk melakukan remediasi terhadap resource yang tidak sesuai berdasarkan aturan ecs-instance-monitor-enabled. Anda dapat memodifikasi logika remediasi sesuai kebutuhan bisnis Anda. 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': logger.info("Memproses account_id: {}, resource_id: {}, config_rule_id: {}".format( account_id, resource_id, config_rule_id)) install_monitoring_agent(context, account_id, region_id, resource_id) def install_monitoring_agent(context, account_id, resource_region_id, resource_id): logger.info("Mulai menginstal agen {}: {}".format(resource_region_id, resource_id)) token = assume_role_and_get_token(context, account_id, resource_region_id) client = AcsClient(token['Credentials']['AccessKeyId'], token['Credentials']['AccessKeySecret'], region_id=resource_region_id) request = CommonRequest() request.set_accept_format('json') request.set_domain(f'metrics.{resource_region_id}.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') # https | http request.set_version('2019-01-01') request.set_action_name('InstallMonitoringAgent') request.add_query_param('InstanceIds.1', resource_id) request.add_query_param('Force', "true") request.add_query_param('SecurityToken', token['Credentials']['SecurityToken']) response = client.do_action_with_exception(request) logger.info(response) # Mengasumsikan peran untuk mendapatkan token Layanan Keamanan (STS) sementara. Ganti nama peran dalam kode contoh ini dengan peran aktual yang Anda gunakan. def assume_role_and_get_token(context, account_id, region_id): creds = context.credentials logger.info('assume_role_and_get_token dimulai.') credentials = StsTokenCredential(creds.access_key_id, creds.access_key_secret, creds.security_token) client = AcsClient(credential=credentials) request = AssumeRoleRequest() request.set_domain(f'sts-vpc.{region_id}.aliyuncs.com') request.set_accept_format('json') request.set_RoleArn(f'acs:ram::{account_id}:role/configcustomremediationrole') request.set_RoleSessionName("ConfigCustomRemediationRole") response = client.do_action_with_exception(request) logger.info('Tanggapan assume_role_and_get_token: {}.'.format(response)) token = json.loads(response) logger.info('assume_role_and_get_token: {}, mengasumsikan peran: {}.'.format(context.credentials, token)) return token
-
-
Klik Deploy Code.
Langkah 4: Buat aturan dan konfigurasikan remediasi kustom
-
Masuk ke Konsol Cloud Config.
-
Buat account group dan tambahkan Akun A serta Akun B ke dalam account group tersebut.
Untuk informasi selengkapnya, lihat Buat account group.
-
Pada pojok kiri atas Konsol Cloud Config, beralihlah ke account group yang Anda buat pada langkah sebelumnya.
-
Buat aturan. Untuk informasi selengkapnya, lihat Buat Aturan Berdasarkan Aturan Terkelola.
-
Pada halaman Select Create Method, pilih Based on managed rule. Cari dan pilih aturan yang memeriksa apakah Agen CloudMonitor telah diinstal pada instans ECS yang berjalan, lalu klik Next.
-
Pada halaman Set Basic Properties, tentukan Rule Name, Risk Level, Trigger, dan Description. Lalu, klik Next.
-
Pada halaman Set Effective Scope, pertahankan pengaturan default dan klik Next.
-
Pada halaman Set Correction, aktifkan sakelar Set Remediation. Pilih Function Compute. Atur Invoke Type ke Automatic Remediation, pilih Function ARN dari fungsi yang Anda buat pada Langkah 3, lalu klik Submit.
CatatanJika fungsi remediasi kustom Anda masih dalam tahap pengujian, Anda dapat mengatur Invoke Type ke Manual Remediation untuk debugging. Setelah pengujian selesai, Anda dapat mengubah Invoke Type menjadi Automatic Remediation.
-
Langkah 5: Terapkan remediasi otomatis dan verifikasi hasil remediasi
-
Pada halaman Rules, temukan aturan yang dituju dan klik Remediation Detail pada kolom Remediation Template.
-
Pada tab Remediation Detail, klik Perform Manual Correction di samping Remediation Detail.
Bagian Execution Result List menampilkan hasil remediasi dan alasan kegagalan.
CatatanPada tab Remediation Detail, klik Function ARN di samping Remediation Template untuk membuka tab Function Code di Konsol Function Compute.