Mengumpulkan log Resource Microsoft Azure

Didukung di:

Dokumen ini menjelaskan cara mengumpulkan log Microsoft Azure Resource dengan menyiapkan feed Google Security Operations menggunakan Microsoft Azure Blob Storage V2.

Log resource Azure memberikan insight tentang operasi yang dilakukan dalam resource Azure. Log ini mencatat informasi mendetail tentang operasi resource, status, dan metrik performa. Konten bervariasi menurut jenis resource dan mencakup data seperti peristiwa autentikasi, perubahan konfigurasi, upaya akses, dan metrik operasional.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Akses istimewa ke portal Microsoft Azure dengan izin untuk:

    • Membuat Akun Penyimpanan
    • Mengonfigurasi Setelan Diagnostik untuk resource Azure
    • Mengelola kunci akses

Mengonfigurasi Akun Azure Storage

Buat Akun Penyimpanan

  1. Di portal Azure, cari Storage accounts.
  2. Klik + Create.
  3. Berikan detail konfigurasi berikut:

    Setelan Nilai
    Langganan Pilih langganan Azure Anda
    Grup resource Pilih yang sudah ada atau buat yang baru
    Nama akun penyimpanan Masukkan nama unik (misalnya, azureresourcelogs)
    Region Pilih region (misalnya, East US)
    Performa Standar (direkomendasikan)
    Redundansi GRS (Geo-redundant storage) atau LRS (Locally redundant storage)
  4. Klik Review + create.

  5. Tinjau ringkasan akun, lalu klik Buat.

  6. Tunggu hingga deployment selesai.

Mendapatkan kredensial Akun Penyimpanan

  1. Buka Akun Penyimpanan yang baru saja Anda buat.
  2. Di navigasi kiri, pilih Kunci akses di bagian Keamanan + jaringan.
  3. Klik Tampilkan kunci.
  4. Salin dan simpan hal berikut untuk digunakan nanti:

    • Nama akun penyimpanan: azureresourcelogs
    • Kunci 1 atau Kunci 2: Kunci akses bersama (string acak 512-bit dalam encoding base-64)

Mendapatkan endpoint Blob Service

  1. Di Akun Penyimpanan yang sama, pilih Endpoints dari navigasi kiri.
  2. Salin dan simpan URL endpoint Blob service.
    • Contoh: https://azureresourcelogs.blob.core.windows.net/

Mengonfigurasi Setelan Diagnostik Resource Azure

Log resource Azure tidak dikumpulkan secara default. Anda harus membuat setelan diagnostik untuk setiap resource Azure guna merutekan log ke akun penyimpanan.

  1. Di portal Azure, buka resource Azure yang ingin Anda pantau.
  2. Di navigasi kiri, pilih Setelan diagnostik di bagian Monitoring.
  3. Klik + Tambahkan setelan diagnostik.
  4. Berikan detail konfigurasi berikut:
    • Nama setelan diagnostik: Masukkan nama deskriptif (misalnya, export-to-secops).
    • Di bagian Log, pilih kategori log yang ingin Anda kumpulkan. Kategori yang tersedia bervariasi menurut jenis resource. Kategori umum mencakup:
      • Administratif (untuk Log Aktivitas)
      • Keamanan (untuk Log Aktivitas)
      • AuditEvent (untuk Key Vault)
      • ApplicationGatewayAccessLog (untuk Application Gateway)
      • ApplicationGatewayFirewallLog (untuk Application Gateway)
      • NetworkSecurityGroupEvent (untuk Network Security Groups)
    • Di bagian Metrics (opsional), pilih AllMetrics untuk mengirim metrik platform ke akun penyimpanan.
    • Di bagian Destination details, centang kotak Archive to a storage account.
    • Subscription: Pilih langganan yang berisi akun penyimpanan Anda.
    • Akun penyimpanan: Pilih akun penyimpanan yang Anda buat (misalnya, azureresourcelogs).
  5. Klik Simpan.

Setelah konfigurasi, log akan otomatis diekspor ke penampung di akun penyimpanan. Azure membuat container menggunakan pola penamaan insights-logs-<log-category-name>. Contoh:

  • Log audit Key Vault: insights-logs-auditevent
  • Log akses Application Gateway: insights-logs-applicationgatewayaccesslog
  • Log firewall Application Gateway: insights-logs-applicationgatewayfirewalllog
  • Peristiwa Network Security Group: insights-logs-networksecuritygroupevent

Mengonfigurasi feed di Google SecOps untuk menyerap log Azure Resource

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Azure Resource Logs - Key Vault).
  5. Pilih Microsoft Azure Blob Storage V2 sebagai Jenis sumber.
  6. Pilih Microsoft Azure Resource sebagai Log type.
  7. Klik Berikutnya.
  8. Tentukan nilai untuk parameter input berikut:

    • URI Azure: Masukkan URL endpoint Blob Service dengan jalur kontainer:
    https://azureresourcelogs.blob.core.windows.net/insights-logs-auditevent/
    
    • Ganti kode berikut:
      • azureresourcelogs: Nama akun penyimpanan Azure Anda.
      • insights-logs-auditevent: Nama container blob tempat log disimpan (berbeda menurut jenis resource dan kategori log).
    • Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:

      • Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer.
      • Hapus file yang ditransfer: Menghapus file setelah transfer berhasil.
      • Hapus file yang ditransfer dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
    • Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir. Defaultnya adalah 180 hari.

    • Shared key: Masukkan nilai kunci bersama (kunci akses) yang Anda ambil dari Akun Penyimpanan di langkah 3.

    • Namespace aset: Namespace aset.

    • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.

  9. Klik Berikutnya.

  10. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Konfigurasi firewall Azure Storage (jika diaktifkan)

Jika Akun Azure Storage Anda menggunakan firewall, Anda harus menambahkan rentang IP Google SecOps.

  1. Di portal Azure, buka Akun Penyimpanan Anda (misalnya, azureresourcelogs).
  2. Pilih Networking di bagian Security + networking.
  3. Di bagian Firewalls and virtual networks, pilih Enabled from selected virtual networks and IP addresses.
  4. Di bagian Firewall, di bagian Rentang alamat, klik + Tambahkan rentang IP.
  5. Tambahkan setiap rentang IP Google SecOps dalam notasi CIDR.

  6. Klik Simpan.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
berbagai kolom _labelfield* tambahan additional.fields Digabungkan dari berbagai kolom tambahanfield*_label
authenticationMethod extensions.auth.mechanism Ditetapkan ke USERNAME_PASSWORD jika authenticationMethod adalah Password
category, event_type extensions.auth.type Disetel ke MACHINE untuk SQLSecurityAuditEvents; SSO untuk kategori tertentu; AUTHTYPE_UNSPECIFIED untuk kategori lainnya
properties.partialipaddress intermediary.ip Nilai dari properties.partialipaddress jika tidak kosong
properties.event_time, stage_time, risk_time, last_update_time, time metadata.collected_timestamp Dikonversi menggunakan ISO8601 dari properties.event_time, atau dari stage_time, atau dari risk_time, atau dari last_update_time, atau dari time dengan grok penggantian
properties.message, properties.activity, properties.log.stage metadata.description Nilai dari properties.message jika tidak kosong; jika tidak, dari properties.activity; jika tidak, dari properties.log.stage
event_type metadata.event_type Nilai dari event_type jika tidak kosong, atau GENERIC_EVENT
category, record.category metadata.product_event_type Nilai disalin langsung dari kategori atau record.category
properties.event_id, properties.log.auditID metadata.product_log_id Nilai dari properties.event_id jika tidak kosong; jika tidak, dari properties.log.auditID
properties.log.apiVersion metadata.product_version Nilai disalin langsung dari properties.log.apiVersion
protokol network.application_protocol Nilai disalin langsung dari protokol
properties.log.verb network.dhcp.opcode Nilai disalin langsung dari properties.log.verb (huruf besar)
properties.CsMethod, record.properties.CsMethod network.http.method Nilai disalin langsung dari properties.CsMethod atau record.properties.CsMethod
user_agent network.http.parsed_user_agent Dikonversi dari user_agent
properties.Referer, uri network.http.referral_url Nilai dari properties.Referer jika tidak kosong; jika tidak, dari uri
properties.ScStatus, record.properties.ScStatus, properties.statusCode, record.properties.statusCode, responseStatus.code network.http.response_code Dikonversi menjadi bilangan bulat dari properties.ScStatus, record.properties.ScStatus, properties.statusCode, record.properties.statusCode, atau responseStatus.code
user_agent network.http.user_agent Nilai disalin langsung dari user_agent
properties.ScBytes, record.properties.ScBytes, properties.responseLength network.received_bytes Dikonversi menjadi uinteger dari properties.ScBytes, record.properties.ScBytes, atau properties.responseLength
properties.CsBytes, record.properties.CsBytes, properties.requestLength network.sent_bytes Dikonversi menjadi uinteger dari properties.CsBytes, record.properties.CsBytes, atau properties.requestLength
properties.session_id network.session_id Nilai disalin langsung dari properties.session_id (dikonversi menjadi string)
properties.tlsVersion network.tls.version Nilai disalin langsung dari properties.tlsVersion
domain_name_value principal.administrative_domain Nilai disalin langsung dari domain_name_value
properties.clientAppUsed, target_application principal.application Nilai dari properties.clientAppUsed jika tidak kosong; jika tidak, dari target_application
prop_device_id principal.asset.asset_id Disetel ke ID Perangkat: diikuti dengan prop_device_id jika tidak null
hardware principal.asset.hardware Digabungkan dari hardware
properties.host_name, properties.CIp, record.properties.CIp, properties.ComputerName, record.properties.ComputerName, properties.CsHost, record.properties.CsHost, properties.server_instance_name, record.properties.server_instance_name, server_name principal.asset.hostname Nilai dari properties.host_name jika tidak kosong; jika tidak, dari properties.CIp (grok IP), record.properties.CIp (grok IP), properties.ComputerName, record.properties.ComputerName, properties.CsHost, record.properties.CsHost, properties.server_instance_name, record.properties.server_instance_name, atau server_name
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.asset.ip Nilai dari src_ip, src_ip1, properties.client_ip (grok IP), record.properties.clientIpAddress, properties.clientIpAddress (grok IP), record.properties.clientIpAddress, callerIpAddress (grok IP), properties.ipAddress, atau ip
properties.host_name, properties.CsHost, record.properties.CsHost principal.hostname Nilai dari properties.host_name jika tidak kosong; jika tidak, nilai dari properties.CsHost atau record.properties.CsHost
src_ip, src_ip1, properties.client_ip, record.properties.clientIpAddress, properties.clientIpAddress, callerIpAddress, properties.ipAddress, ip principal.ip Nilai dari src_ip, src_ip1, properties.client_ip (grok IP), record.properties.clientIpAddress, properties.clientIpAddress (grok IP), record.properties.clientIpAddress, callerIpAddress (grok IP), properties.ipAddress, atau ip
properties.location.city, provisioning_steps_city principal.location.city Nilai dari properties.location.city jika tidak kosong; jika tidak, dari provisioning_steps_city
properties.location.countryOrRegion, provisioning_steps_country, location, Region principal.location.country_or_region Nilai dari properties.location.countryOrRegion jika tidak kosong; jika tidak, dari provisioning_steps_country; jika tidak, dari location; jika tidak, dari Region
properties.location.geoCoordinates.latitude principal.location.region_latitude Nilai disalin langsung dari properties.location.geoCoordinates.latitude
properties.location.geoCoordinates.longitude principal.location.region_longitude Nilai disalin langsung dari properties.location.geoCoordinates.longitude
properties.location.state principal.location.state Nilai disalin langsung dari properties.location.state
prop_os principal.platform Setel ke WINDOWS jika prop_os cocok dengan (?i)Win; LINUX jika (?i)Lin; MAC jika (?i)Mac
properties.deviceDetail.operatingSystem principal.platform_version Nilai disalin langsung dari properties.deviceDetail.operatingSystem
src_port principal.port Dikonversi menjadi bilangan bulat dari src_port
is_compliant_label, is_managed_label, serice_type_label, serice_credential_label principal.resource.attribute.labels Digabungkan dari is_compliant_label, is_managed_label, serice_type_label, serice_credential_label
properties.sourceSystem.Name principal.resource.name Nilai disalin langsung dari properties.sourceSystem.Name
properties.sourceSystem.Id principal.resource.product_object_id Nilai disalin langsung dari properti.sourceSystem.Id
properties.server_principal_name, source_user_principal_name, user_principal_name, local_account_username_value principal.user.email_addresses Digabungkan dari properties.server_principal_name (jika cocok dengan email), source_user_principal_name (jika cocok dengan email), user_principal_name (jika cocok dengan email), atau local_account_username_value (jika cocok dengan email)
properties.sequence_group_id, grpname, properties.log.user.groups principal.user.group_identifiers Digabungkan dari properties.sequence_group_id, grpname, atau properties.log.user.groups
properties.sourceIdentity.details.id, properties.userId, details_id_not_present principal.user.product_object_id Nilai dari properties.sourceIdentity.details.id jika tidak kosong; jika tidak, dari properties.userId; jika tidak, dari details_id_not_present
properties.ServicePrincipalDisplayName, properties.servicePrincipalName, properties.sourceIdentity.details.DisplayName, properties.userDisplayName, record.properties.log.user.username principal.user.user_display_name Nilai dari properties.ServicePrincipalDisplayName jika tidak kosong; jika tidak, dari properties.servicePrincipalName; jika tidak, dari properties.sourceIdentity.details.DisplayName; jika tidak, dari properties.userDisplayName; jika tidak, dari record.properties.log.user.username
properties.servicePrincipalId, user_userPrincipalName, source_user_principal_name, details_user_principal_name, user_principal_name, properties.accountName, record.properties.log.user.uid principal.user.userid Nilai dari properties.servicePrincipalId jika tidak kosong; jika tidak, dari user_userPrincipalName; jika tidak, dari source_user_principal_name; jika tidak, dari details_user_principal_name; jika tidak, dari user_principal_name; jika tidak, dari properties.accountName; jika tidak, dari record.properties.log.user.uid
security_action, berhasil, statusText, resultType security_result.action Tetapkan ke ALLOW jika security_action adalah izinkan; jika tidak, tetapkan ke ALLOW jika berhasil benar atau statusText adalah Success atau resultType adalah success; jika tidak, tetapkan ke BLOCK jika berhasil salah atau statusText adalah failed atau resultType adalah failed
properties.action_name security_result.action_details Nilai disalin langsung dari properties.action_name
status_label security_result.about.resource.attribute.labels Digabungkan dari status_label
properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields security_result.detection_fields Digabungkan dari properties_log_label, corr_key_label, resultType_label, resultSignature_label, networkName_label, networkType_label, method_label, authentication_step_requirement_label, authentication_step_result_detail_label, stepdate_label, initiatedby_name_label, initiatedby_id_label, initiatedby_type_label, targetSystem_id_label, targetSystem_name_label, containerID_label, pod_label, authentication_label, api_name_label, scale_unit_label, namespace_name_label, subscription_id_label, activity_id_label_1, task_name_label, environment_label, cookie, additional_field_event_ip, additional_field_event_primary_stamp, additional_field_event_stamp_type, source, correlationId_field, activityDateTime_field, detectedDateTime_field, lastUpdatedDateTime_field, count_label, total_label, minimum_label, maximum_label, average_label, metricName_label, timeGrain_label, ApiName_label, Authentication_label, GeoType_label, old_label, new_label, add_label, keyId_label, sr_result.rule_name, sr_result.rule_id, resultField, sr_result.detection_fields
resultDescription, sec_result.description, properties.queryexecutionstatus security_result.description Nilai dari resultDescription (gsub newlines); jika tidak, dari sec_result.description; jika tidak, dari properties.queryexecutionstatus
policy_id_value security_result.rule_id Nilai disalin langsung dari policy_id_value
properties.Result, statusText, properties.queryexecutionstatus security_result.summary Nilai dari properties.Result jika tidak kosong; jika tidak, dari statusText; jika tidak, dari properties.queryexecutionstatus
target_application target.application Nilai dari target_application
properties.ComputerName, record.properties.ComputerName, properties.server_instance_name, record.properties.server_instance_name target.asset.hostname Nilai dari properties.ComputerName, record.properties.ComputerName, properties.server_instance_name, atau record.properties.server_instance_name
(hardcode) target.cloud.environment Tetapkan ke "MICROSOFT_AZURE"
properties.SPort, record.properties.SPort target.port Dikonversi menjadi bilangan bulat dari properties.SPort atau record.properties.SPort
properties.querytext.query target.process.command_line Nilai disalin langsung dari properties.querytext.query
properties.processId target.process.pid Dikonversi menjadi string dari properties.processId
subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label target.resource.attribute.labels Digabungkan dari subscription_id_label, resource_group_label, request_resource_type_label, request_resource_id_label, additional_objectKey, additional_clientRequestId, additional_RiskEventType, additional_tokenIssuerType, keyId_label, appid_label
properties_databasename, properties.resourceDisplayName, record.properties.databasename, record.properties.databaseName target.resource.name Nilai dari properties_databasename jika tidak kosong; jika tidak, dari properties.resourceDisplayName; jika tidak, dari record.properties.databasename; jika tidak, dari record.properties.databaseName
resourceId, properties.resourceId target.resource.product_object_id Nilai dari resourceId jika tidak kosong; jika tidak, dari properties.resourceId
properties_collectionname, properties.resourceDisplayName, record.properties.collectionname, record.properties.collectionName, properties.log.objectRef.resource target.resource.resource_subtype Nilai dari properties_collectionname jika tidak kosong; jika tidak, dari properties.resourceDisplayName; jika tidak, dari record.properties.collectionname; jika tidak, dari record.properties.collectionName; jika tidak, dari properties.log.objectRef.resource
resourceId, message target.resource.resource_type Disetel ke DATABASE jika resourceId cocok dengan pola; jika tidak, CLUSTER jika pesan cocok dengan MANAGEDCLUSTERS; jika tidak, VIRTUAL_MACHINE jika MANAGEDINSTANCES; jika tidak, DATABASE jika DATABASEACCOUNTS
resourceType target.resource.type Nilai disalin langsung dari resourceType
properties.CsUriStem, properties.log.requestURI, value (dari additionalInfo) target.url Nilai dari properties.CsUriStem jika tidak kosong; jika tidak, dari properties.log.requestURI; jika tidak, dari nilai (dari additionalInfo)
user_principal_name target.user.email_addresses Digabungkan dari user_principal_name (jika cocok dengan email)
properties.userId target.user.product_object_id Nilai disalin langsung dari properties.userId
properties.userDisplayName target.user.user_display_name Nilai disalin langsung dari properties.userDisplayName
user_principal_name, properties.userPrincipalName target.user.userid Nilai dari user_principal_name jika tidak kosong; jika kosong, nilai diambil dari properties.userPrincipalName
(hardcode) metadata.product_name Setel ke "Azure Resource Logs"
(hardcode) metadata.vendor_name Tetapkan ke "Microsoft"

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.