全部产品
Search
文档中心

Cloud Config:Secara otomatis memperbaiki sumber daya yang tidak sesuai di seluruh akun dalam suatu perusahaan dengan menggunakan direktori sumber daya

更新时间:Jul 02, 2025

Topik ini menjelaskan cara secara otomatis memperbaiki sumber daya yang tidak sesuai di seluruh akun dalam suatu perusahaan. Topik ini menggunakan kemampuan manajemen sumber daya lintas akun dari direktori sumber daya dan fitur grup akun Cloud Config.

Prasyarat

  • Direktori sumber daya telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan Direktori Sumber Daya.

  • Function Compute telah diaktifkan. Untuk informasi lebih lanjut, lihat Langkah 1: Aktifkan Function Compute.

    Penting

    Saat menggunakan Function Compute, Anda akan dikenakan biaya untuk jumlah panggilan fungsi, penggunaan sumber daya, dan lalu lintas Internet keluar. Untuk informasi lebih lanjut, lihat Ikhtisar Penagihan.

Informasi latar belakang

Cloud Config dapat mendeteksi sumber daya yang tidak sesuai berdasarkan aturan. Anda dapat mengonfigurasi perbaikan kustom untuk sumber daya tersebut. Jika suatu perusahaan perlu memperbaiki sumber daya yang tidak sesuai di seluruh akun, perusahaan dapat menggunakan struktur organisasi dari direktori sumber daya untuk mengelola akun dan sumber daya. Untuk informasi lebih lanjut tentang direktori sumber daya, lihat Ikhtisar Direktori Sumber Daya. Dalam contoh ini, aturan ecs-instance-monitor-enabled digunakan untuk mendeteksi dan memperbaiki sumber daya yang tidak sesuai di seluruh akun. Akun A (ID: 100931896542****) adalah akun manajemen atau akun administrator yang didelegasikan dari direktori sumber daya. Akun B (ID: 178366182654****) dan Akun A adalah anggota dari direktori sumber daya yang sama. Akun B memiliki sumber daya yang tidak sesuai. Bagian berikut menjelaskan cara masuk ke Cloud Config sebagai Akun A dan mendeteksi serta memperbaiki sumber daya yang tidak sesuai di Akun B.

Langkah 1: Buat peran untuk akun manajemen dan lampirkan kebijakan ke peran tersebut

  1. Masuk ke Konsol Resource Access Management (RAM).

  2. Buat peran RAM.

    1. Di bilah navigasi sebelah kiri, pilih Identities > Roles.

    2. Di halaman Peran, klik Create Role. Di halaman Create Role, konfigurasikan parameter.

      1. Atur parameter Select Trusted Entity ke Alibaba Cloud Account dan klik Next.

      2. Masukkan nama peran RAM di bidang RAM Role Name. Dalam contoh ini, masukkan ConfigCustomRemediationRole. Atur parameter Select Trusted Alibaba Cloud Account ke Current Alibaba Cloud Account.

      3. Klik OK.

      4. Klik Close.

  3. Buat kebijakan izin.

    1. Di bilah navigasi sebelah kiri, pilih Permissions > Policies.

    2. Klik Create Policy. Halaman Create Policy muncul.

      1. Di tab JSON, masukkan skrip 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": "*"
            }
          ]
        }
      2. Klik Next to edit policy information. Di halaman yang muncul, masukkan nama kebijakan. Dalam contoh ini, masukkan ConfigCustomRemediationPolicy.

      3. Klik Save.

  4. Berikan izin kepada peran.

    1. Di bilah navigasi sebelah kiri, pilih Permissions > Grants.

    2. Di halaman Izin, klik Grant Permission. Di panel Grant Permission, berikan izin kepada peran yang Anda buat.

      1. Atur parameter Resource Scope ke Account.

      2. Di bagian Principal, masukkan ConfigCustomRemediationRole di kotak pencarian dan klik peran yang ditampilkan untuk memilih peran.

      3. Pilih Custom Policy dari daftar drop-down di bagian Policy. Masukkan ConfigCustomRemediationPolicy di kotak pencarian dan klik kebijakan yang ditampilkan untuk memilih kebijakan.

      4. Klik Grant permissions.

  5. Lampirkan kebijakan tepercaya ke peran.

    1. Di bilah navigasi sebelah kiri, pilih Identities > Roles.

    2. Di halaman Peran, cari peran ConfigCustomRemediationRole dan klik nama peran untuk masuk ke halaman konfigurasi peran.

    3. Di tab Trust Policy, klik Edit Trust Policy. Di halaman yang muncul, masukkan skrip kebijakan berikut.

      // Mengizinkan layanan Function Compute untuk mengasumsikan peran.
      { 
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::100931896542****:root"
              ]
            }
          },
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "fc.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
    4. Klik Save trust policy document.

Langkah 2: Buat peran untuk anggota dan lampirkan kebijakan ke peran tersebut

  1. Buat peran RAM dan berikan izin kepada peran tersebut.

    Untuk informasi lebih lanjut, lihat Sublangkah 1 hingga 4 di Langkah 1.

  2. Lampirkan kebijakan tepercaya ke peran.

    Untuk informasi lebih lanjut, lihat Sublangkah 5 di Langkah 1. Ganti skrip kebijakan dengan skrip contoh berikut.

    // Mengizinkan Akun A (ID: 100931896542****) untuk mengasumsikan peran.
    {
      "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 perbaikan kustom

  1. Masuk ke Konsol Function Compute.

  2. Buat layanan.

    1. Di bilah navigasi sebelah kiri, klik Services & Functions.

    2. Di halaman Layanan, klik Create Service. Panel Create Service muncul.

      1. Masukkan nama layanan di bidang Name. Dalam contoh ini, masukkan ConfigRemediationService.

      2. Klik Tampilkan Opsi Lanjutan dan atur parameter Service Role ke ConfigCustomRemediationRole.

      3. Klik OK.

  3. Buat fungsi perbaikan kustom.

    1. Di bilah navigasi sebelah kiri halaman detail layanan, klik Functions.

    2. Klik Create Function. Halaman Create Function muncul.

      1. Pilih Use Built-in Runtime.

      2. Di bagian Basic Settings, masukkan nama fungsi. Dalam contoh ini, parameter Nama Fungsi diatur ke ConfigRemediationFunction. Atur parameter Handler Type ke Event Handler.

      3. Di bagian Code, atur parameter Runtime ke Python 3.9 dan parameter Code Upload Method ke Use Sample Code.

      4. Klik Create untuk masuk ke halaman detail fungsi.

      5. Di tab Code, masukkan kode contoh berikut untuk fungsi perbaikan sumber daya.

        #!/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 digunakan untuk memperbaiki sumber daya yang tidak sesuai berdasarkan aturan ecs-instance-monitor-enabled. Anda dapat memodifikasi logika perbaikan berdasarkan 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):
            """
            Parse string menjadi objek json
            :param content: konten string json
            :return: Objek Json
            """
            try:
                return json.loads(content)
            except Exception as e:
                logger.error('Parse konten:{} ke 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':
                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 instal 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)
        
        # Asumsikan peran untuk mendapatkan Token Layanan Keamanan (STS) sementara. Ganti nama peran dalam kode contoh 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('assume_role_and_get_token response : {}.'.format(response))
        
            token = json.loads(response)
            logger.info('assume_role_and_get_token: {}, asumsi peran: {}.'.format(context.credentials, token))
            return token

Langkah 4: Buat aturan dan konfigurasikan perbaikan kustom

  1. Masuk ke Konsol Cloud Config.

  2. Buat grup akun dan tambahkan Akun A dan Akun B ke grup akun.

    Untuk informasi lebih lanjut, lihat Buat Grup Akun.

  3. Di sudut kiri atas Konsol Cloud Config, beralihlah ke grup akun yang Anda buat pada langkah sebelumnya.

  4. Buat aturan. Untuk informasi lebih lanjut, lihat Buat Aturan Berdasarkan Aturan Terkelola.

    1. Di langkah Select Create Method, pilih Based on managed rule, cari dan pilih aturan ecs-instance-monitor-enabled, lalu klik Next.

    2. Di langkah Set Basic Properties, konfigurasikan parameter Rule Name, Risk Level, Trigger, dan Description dan klik Next.

    3. Di langkah Set Effective Scope, pertahankan pengaturan default dan klik Next.

    4. Di langkah Set Remediation, aktifkan Set Remediation, atur parameter Invoke Type ke Automatic Remediation, lalu pilih fungsi Function Compute yang Anda buat di Langkah 3 di bagian Function ARN. Klik Submit.

      Catatan

      Jika fungsi perbaikan kustom sedang diuji, Anda dapat mengatur parameter Invoke Type ke Manual Remediation untuk mengamati dan men-debug fungsi. Setelah fungsi lolos uji, Anda dapat mengatur parameter Jenis Pemanggilan ke Automatic Remediation.

Langkah 5: Implementasikan perbaikan otomatis dan verifikasi hasil perbaikan

  1. Di halaman Rules, temukan aturan yang ingin Anda kelola, dan klik Remediation Detail di kolom Remediation Template.

  2. Di tab Remediation Detail, klik Perform Manual Remediation di sebelah Remediation Detail.

    Di bagian Execution Result List, Anda dapat melihat hasil perbaikan. Anda juga dapat melihat alasan mengapa sumber daya gagal diperbaiki.

    Catatan

    Di tab Remediation Detail, klik ARN fungsi di sebelah Remediation Template untuk masuk ke tab Code dari fungsi perbaikan di Konsol Function Compute.

Referensi