Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Dokumen ini menjelaskan cara mengintegrasikan Apigee dengan Google Security Operations (Google SecOps). Jika Anda menggunakan Google SecOps sebagai solusi SIEM, ikuti langkah-langkah dalam dokumen ini untuk mengonfigurasi Apigee agar mengirim data log ke SecOps.
Untuk memfasilitasi integrasi ini, Google SecOps mendukung parser Apigee untuk menyerap data log Apigee. Lihat juga Menyerap data Google Cloud ke Google Security Operations. Setelah Anda menyelesaikan langkah-langkah konfigurasi dalam dokumen ini, data log Apigee Anda akan mengalir ke Google SecOps.
Untuk mengetahui informasi tentang cara mengintegrasikan SecOps dengan solusi SIEM lainnya, lihat Mengintegrasikan Apigee dengan solusi SIEM Anda.
Audiens
Audiens untuk dokumen ini meliputi:
- Administrator API bertanggung jawab untuk memastikan keamanan API, mengelola konfigurasi platform, mendukung efisiensi operasional, dan mematuhi persyaratan kepatuhan keamanan.
- Analis keamanan berfokus pada pendeteksian dan penyelidikan insiden keamanan terkait API secara proaktif untuk meminimalkan risiko dan mengamankan data sensitif.
Ringkasan konfigurasi
Konfigurasi yang dibahas dalam dokumen ini menggunakan kebijakan MessageLogging Apigee untuk mengirim berbagai data log Apigee, termasuk variabel alur tertentu, ke SecOps.
Google SecOps menyediakan filter Cloud Logging khusus yang dapat mengirim jenis log tertentu, termasuk log Apigee, ke Google SecOps secara real time. Google SecOps mendukung parser Apigee untuk menyerap data log Apigee ke Google SecOps. Lihat juga Menyerap data Google Cloud ke Google Security Operations.
Prasyarat
Setelah prasyarat ini dipenuhi, ikuti petunjuk dalam dokumen ini untuk mengintegrasikan Apigee dengan instance SecOps Anda. Sebelum memulai integrasi, pastikan Anda memiliki hal berikut:
- Akun Apigee atau Apigee Hybrid dengan hak istimewa administratif untuk mengembangkan dan men-deploy proxy API
- Akun Google SecOps
- Cloud Logging diaktifkan dan memiliki pengalaman mengonfigurasi dan menggunakan Cloud Logging
- Pemahaman tentang variabel alur Apigee
- Pemahaman tentang kebijakan MessageLogging Apigee dan penggunaan serta konfigurasi kebijakan secara umum
- (Opsional) Pemahaman tentang cara parser Google SecOps digunakan untuk menafsirkan log yang di-ingest. Parser SecOps secara default dibuat untuk mem-parsing dan memahami log Apigee yang diserap oleh kebijakan MessageLogging.
- Izin IAM Google Cloud untuk menggunakan Cloud Logging API dan memberikan peran IAM ke akun layanan SecOps
Mengintegrasikan Apigee dengan SecOps
Jika Anda menggunakan Google SecOps sebagai solusi SIEM, ikuti langkah-langkah berikut untuk mengirim data log Apigee ke SecOps. Ada dua langkah dasar:
- Mengonfigurasi kebijakan MessageLogging untuk mengirim data log Apigee ke Cloud Logging
- Melampirkan kebijakan MessageLogging ke proxy Apigee
Setelah konfigurasi kebijakan MessageLogging yang dijelaskan di bagian ini selesai, data log Apigee yang dikirim ke Cloud Logging akan diuraikan oleh SecOps. Untuk mengetahui informasi mendetail tentang parser dan cara data variabel alur Apigee dipetakan ke kolom data SecOps, lihat Mengintegrasikan Apigee dengan Google SecOps SIEM. Lihat juga Mengumpulkan log Apigee.
Ikuti langkah-langkah berikut untuk mengintegrasikan Apigee dengan SecOps menggunakan kebijakan MessageLogging:
Konfigurasi kebijakan MessageLogging baru. Lihat Melampirkan dan mengonfigurasi kebijakan di UI.
Berikut adalah contoh kebijakan MessageLogging yang mengirim data ke Cloud Logging. Kebijakan menentukan sejumlah besar variabel alur yang akan dikirim ke Cloud Logging. Anda dapat menambahkan atau menghapus variabel alur sesuai keinginan, bergantung pada kolom yang Anda tentukan penting untuk analisis SecOps. Untuk mengetahui informasi tentang cara data variabel alur Apigee dipetakan ke kolom data SecOps, lihat Mengintegrasikan Apigee dengan Google SecOps SIEM.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <MessageLogging continueOnError="false" enabled="true" name="ML-CloudLoggingSecOps"> <DisplayName>ML-CloudLoggingSecOps</DisplayName> <CloudLogging> <LogName>projects/{organization.name}/logs/apigee-secops-integration-{environment.name}</LogName> <Message contentType="application/json">{ "apiproduct.name": "{apiproduct.name}", "app.name": "{developer.app.name}", "cachehit":"{cachehit}", "client.country": "{client.country}", "client.cn": "{client.cn}", "client.ip": "{proxy.client.ip}", "client.locality": "{client.locality}", "client.port": "{client.port}", "client.scheme": "{client.scheme}", "client.state": "{client.state}", "developer.email": "{developer.email}", "environment.name": "{environment.name}", "error":"{is.error}", "error.state":"{error.state}", "error.message":"{escapeJSON(error.message)}", "fault.name":"{fault.name}", "messageid":"{messageid}", "organization.name": "{organization.name}", "proxy.name": "{apiproxy.name}", "proxy.basepath": "{proxy.basepath}", "proxy.pathsuffix": "{proxy.pathsuffix}", "proxy.proxyendpoint.name": "{proxy.name}", "proxy.revision":"{apiproxy.revision}", "request.content-length":"{request_msg.header.content-length}", "request.content-type":"{request_msg.header.content-type}", "request.host":"{request_msg.header.host}", "request.httpversion": "{request.version}", "request.url": "{client.scheme}://{request_msg.header.host}{request_msg.uri}", "request.user-agent":"{request.header.user-agent}", "request.verb": "{request.verb}", "request.x-b3-traceid": "{request.header.x-b3-traceid}", "request.x-cloud-trace-context": "{request.header.x-cloud-trace-context}", "response.content-length":"{response.header.content-length}", "response.content-type":"{response.header.content-type}", "response.status.code": "{message.status.code}", "system.region.name": "{system.region.name}", "system.timestamp": "{system.timestamp}", "system.uuid": "{system.uuid}", "target.cn": "{target.cn}", "target.country": "{target.country}", "target.host": "{target.host}", "target.ip": "{target.ip}", "target.locality": "{target.locality}", "target.organization": "{target.organization}", "target.port": "{target.port}", "target.scheme": "{target.scheme}", "target.state": "{target.state}", "target.url": "{request.url}" } </Message> <ResourceType>api</ResourceType> </CloudLogging> </MessageLogging>
Lampirkan kebijakan sebagai langkah bersyarat di proxy API. Salah satu opsinya adalah melampirkan kebijakan dalam FaultRule di PostFlow, tempat kesalahan terkait keamanan biasanya terjadi. Contoh:
<PostFlow name="PostFlow"> <Request> <Step> <Condition>flow.isError == true)</Condition> <Name>ML-CloudLoggingSecOps</Name> </Step> </Request> </PostFlow>
Sekarang, saat proxy API yang menggunakan kebijakan ini dijalankan, data log Apigee akan mengalir ke Google SecOps.
Praktik umum lainnya adalah menempatkan kebijakan MessageLogging di PostClientFlow respons ProxyEndpoint.
Pertimbangkan saran berikut saat melampirkan kebijakan MessageLogging ke proxy API Anda:
- Tempatkan kebijakan di FaultRule. FaultRule adalah lokasi yang direkomendasikan untuk mencatat pengecualian keamanan dan pelanggaran kebijakan.
- Tempatkan kebijakan di PostFlow. PostFlow adalah lokasi lain yang sesuai untuk mencatat masalah keamanan.
- Hindari mencatat permintaan yang berhasil. Untuk pemantauan keamanan yang berfokus pada ancaman, Anda biasanya mencatat detail saat terjadi masalah (kesalahan muncul). Mencatat setiap permintaan yang berhasil dengan konten pesan lengkap dapat menghasilkan log yang berlebihan dan meningkatkan biaya.
- Pertimbangkan variabel kustom untuk kasus penggunaan tertentu. Misalnya, jika Anda perlu mengambil
URI permintaan asli dalam alur kesalahan, Anda dapat menggunakan kebijakan AssignMessage di PreFlow permintaan
untuk menyalinnya ke variabel kustom (seperti
original.request.uri
), lalu mencatat variabel tersebut dalam kebijakan MessageLogging.
Praktik terbaik
Pertimbangkan praktik terbaik berikut saat mengonfigurasi Apigee dengan Google SecOps:
- Fokus pada konteks keamanan: Hanya mencatat variabel alur yang memberikan konteks berharga untuk pemantauan keamanan dan deteksi ancaman. Hindari logging data yang tidak terkait dengan keamanan secara berlebihan.
- Gunakan format logging yang konsisten: Pertahankan format logging yang konsisten di seluruh proxy API Anda yang menggunakan SecOps.
- Gunakan akun layanan yang aman: Patuhi praktik terbaik keamanan untuk mengelola dan mengamankan akun layanan Google Cloud yang digunakan untuk penyerapan SecOps. Jika memungkinkan, batasi izin ke Pelihat Log.
- Pantau feed SecOps: Pantau secara rutin kondisi dan status feed SecOps Anda untuk memastikan log berhasil di-ingest dan tanpa error.
- Gunakan aturan dan dasbor SecOps: Setelah log yang relevan dengan keamanan berada di SecOps, kembangkan aturan dan dasbor tertentu untuk mendeteksi dan memvisualisasikan ancaman keamanan berdasarkan informasi mendetail yang Anda catat.
Pemecahan masalah
Bagian ini menjelaskan beberapa kemungkinan masalah yang mungkin Anda alami saat mengonfigurasi Apigee dengan SecOps dan hal-hal yang perlu diperiksa.
Masalah: Log peristiwa keamanan tidak muncul di Cloud Logging
Hal-hal yang perlu diperiksa:
- Periksa kembali apakah Kebijakan MessageLogging Anda dikonfigurasi dengan benar dengan
Condition
untuk dipicu saat peristiwa keamanan terjadi. - Pastikan kebijakan MessageLogging dilampirkan ke konteks alur yang sesuai, seperti FaultRule atau PostFlow.
- Pastikan Cloud Logging diaktifkan di project Google Cloud Anda.
- Tinjau pesan error apa pun di log proxy Apigee yang terkait dengan Kebijakan MessageLogging.
Masalah: Log peristiwa keamanan tidak muncul di SecOps
- Pastikan feed SecOps Anda dikonfigurasi dengan benar menggunakan project ID, filter log (pastikan filter log mengambil log dari kebijakan pencatatan aktivitas keamanan Anda), dan kredensial akun layanan yang benar.
- Periksa status feed SecOps Anda di UI SecOps untuk melihat apakah ada pesan error atau masalah penyerapan.
- Pastikan akun layanan yang digunakan oleh SecOps memiliki peran Pelihat Log di project Google Cloud Anda.
Kolom Terkait Keamanan Tidak Diuraikan dengan Benar di SecOps
- Tinjau struktur JSON log Anda di Cloud Logging untuk memastikan log tersebut disusun dengan baik dan berisi nama kolom yang diharapkan.
- Pastikan parser Google Cloud yang sesuai diaktifkan.
- Jika Anda mencurigai masalah parsing, periksa entri log sampel dalam data mentah SecOps untuk melihat cara penyerapan data sebelum parsing. Jika kolom tertentu tidak diekstrak seperti yang diharapkan, Anda mungkin perlu meninjau dokumentasi parser SecOps atau mempertimbangkan apakah parser kustom diperlukan.
Mengintegrasikan Apigee dengan SIEM Google SecOps
Tabel berikut memetakan nama variabel alur Apigee ke nama kolom SIEM Google SecOps yang setara. Misalnya, saat melihat data log Apigee di Cloud Logging, variabel alur client.id
dipetakan ke kolom SIEM SecOps yang disebut principle_ip
. Lihat juga Mengumpulkan log Apigee.
Variabel alur Apigee | Nama kolom SecOps SIEM | Deskripsi |
---|---|---|
client.country | principal.hostname | IP host HTTP yang terkait dengan permintaan yang diterima oleh ProxyEndpoint. |
client.host | principal.location.country_or_region | Negara dalam sertifikat TLS/SSL yang diberikan oleh aplikasi klien. Permintaan proxy
principal.location.country_or_region . |
client.ip | principle.ip | Alamat IP klien atau sistem yang mengirim pesan ke load balancer. Misalnya, ini bisa berupa IP klien asli atau IP load balancer. |
client.locality | principal.location.city | Lokalitas (Kota) dalam sertifikat TLS/SSL yang diberikan oleh klien. |
client.port | principal.port | Port HTTP yang terkait dengan permintaan klien asal ke ProxyEndpoint. |
client.state | principal.location.state | Status di sertifikat TLS/SSL yang ditampilkan oleh klien. |
organization.name | intermediary.cloud.project.name | Nama organisasi Apigee. |
proxy.client.ip | src.ip | Alamat X-Forwarded-For dari panggilan masuk, yang merupakan alamat IP yang diterima Apigee
dari handshake TCP eksternal terakhir. Ini bisa berupa klien yang memanggil atau load balancer. |
proxy.name | intermediary.resource.name | Atribut nama yang dikonfigurasi untuk ProxyEndpoint. |
proxy.pathsuffix | intermediary.resource.attribute.labels[pathsuffix] | "Nilai akhiran jalur di URL yang dikirim dari klien dan diterima di ProxyEndpoint. Basepath adalah komponen jalur paling kiri yang secara unik mengidentifikasi proxy API dalam Grup Lingkungan. Misalkan Anda telah mengonfigurasi endpoint Proxy API dengan basepath /v2/weatherapi. Dalam hal ini, permintaan yang dikirim ke https://myhost.example.net/v2/weatherapi/forecastrss?w=12797282, variabel proxy.pathsuffix akan menyimpan string /forecastrss." |
proxy.url | intermediary.url | "Mendapatkan URL lengkap yang terkait dengan permintaan proxy yang diterima oleh ProxyEndpoint, termasuk parameter kueri yang ada. Untuk contoh yang membuat URL permintaan menggunakan host permintaan asli (bukan host router yang digunakan di proxy.url), lihat Mengakses pesan permintaan." |
request.uri | target.resource.name | Nama domain layanan target yang menampilkan respons ke proxy API. |
request.verb | Kata kerja HTTP yang digunakan untuk permintaan. Misalnya, GET, PUT, dan DELETE. | |
response.content | Konten payload pesan respons yang ditampilkan oleh target. | |
response.status.code | Kode respons yang ditampilkan untuk permintaan. Anda dapat menggunakan variabel ini untuk mengganti kode status respons, yang disimpan dalam message.status.code. Untuk mengetahui informasi selengkapnya, lihat pesan. | |
system.region.name | intermediary.location.name | Nama region pusat data tempat proxy berjalan. |
system.timestamp | Bilangan bulat 64-bit (long) yang merepresentasikan waktu saat variabel ini dibaca. Nilainya adalah jumlah milidetik yang berlalu sejak tengah malam, pada 1 Januari 1970 UTC. Misalnya, 1534783015000. | |
system.uuid | intermediary.process.pid atau intermediary.process.product_specific_process_id | UUID pemroses pesan yang menangani proxy. |
target.country | target.location.country_or_region | Negara sertifikat TLS/SSL yang diberikan oleh server target |
target.host | Nama domain layanan target yang menampilkan respons ke proxy API. | |
target.ip | Alamat IP layanan target yang menampilkan respons ke proxy API. | |
target.locality | target.location.city | Lokalitas (kota) sertifikat TLS/SSL yang diberikan oleh server target |
target.organization | Organisasi sertifikat TLS/SSL yang diberikan oleh server target. | |
target.port | Nomor port layanan target yang menampilkan respons ke proxy API. | |
target.scheme | Menampilkan HTTP atau HTTPS, bergantung pada pesan permintaan. | |
target.state | target.location.state | Status sertifikat TLS/SSL yang diberikan oleh server target. |
target.url | URL yang dikonfigurasi dalam file XML TargetEndpoint atau URL target dinamis (jika target.url
ditetapkan selama alur pesan). Variabel tidak menyertakan elemen jalur tambahan
atau parameter kueri. Menampilkan null jika dipanggil di luar cakupan atau tidak disetel. Catatan: Gunakan kebijakan JavaScript yang dilampirkan ke TargetEndpoint untuk menetapkan variabel ini. |