Enterprise SaaS-to-MCP Gateway: Mengintegrasikan AI Agent dengan Google BigQuery secara Aman & Terukur
Rancangan arsitektur dan implementasi gateway Model Context Protocol (MCP) stateless kelas enterprise yang menghubungkan platform AI SaaS (Atlassian Rovo) ke Google BigQuery dengan guardrail keamanan kaku, RFC 7591 Dynamic Client Registration, OAuth 2.1 PKCE, dan cost control otomatis.
Protokol
MCP (SSE/HTTP) + RFC 7591
Keamanan
OAuth 2.1 PKCE + JWE Stateless
Guardrail
Max Bytes Billed & AST Filter
Ringkasan Eksekutif
Dalam era adopsi Agentic AI, integrasi antara platform agen cerdas enterprise (seperti Atlassian Rovo) dengan data warehouse analitik internal (Google BigQuery) membuka peluang akselerasi produktivitas bisnis yang masif. Pengguna bisnis dapat mengajukan pertanyaan bernuansa bahasa alami (natural language) dan langsung memperoleh agregasi data analitik secara instan.
Namun, menghubungkan LLM eksternal langsung ke database pergudangan data perusahaan menimbulkan serangkaian risiko kritis:
- Risiko Biaya Komputasi Liar (Runaway Query Costs): LLM rentan menghasilkan kueri SQL tanpa filter partisi tanggal atau klausa clustering, yang pada model on-demand BigQuery ($6.25 per TB) dapat memicu tagihan ratusan dolar dalam satu tarikan kueri.
- Ketiadaan Guardrail Keamanan & DDL/DML Injection: Risiko manipulasi tabel (destructive queries) atau akses ke data sensitif di luar domain tugas agen.
- Standarisasi Protokol & Identitas: Kebutuhan otentikasi federasi yang aman menggunakan standar terbuka tanpa harus mengekspos kredensial Google Service Account ke pihak SaaS eksternal.
Sebagai solusi menyeluruh, saya merancang dan membangun Enterprise SaaS-to-MCP Gateway—sebuah custom server berbasis standar Model Context Protocol (MCP) yang berperan sebagai Policy Enforcement Point (PEP) mandiri di Google Cloud Run. Meskipun pada akhirnya proyek ini berstatus Proof of Concept (PoC) / R&D sebelum implementasi skala luas korporat, arsitektur ini membuktikan kelayakan integrasi AI agent dengan tata kelola data (data governance) yang sangat ketat.
Arsitektur Sistem & Alur Interaksi
Gateway ini diposisikan di perbatasan jaringan (network boundary) antara ekosistem Atlassian Cloud dan Google Cloud Platform (GCP). Komunikasi dilindungi protokol OAuth 2.1 dengan PKCE, sementara akses kueri BigQuery dikontrol ketat melalui dua fase interaksi: Estimasi Biaya (Dry Run) dan Eksekusi Terbatas (Readonly Execution).
graph TD
subgraph Atlassian_Cloud [Atlassian Cloud]
Rovo[SERSAN Agent in Rovo]
end
subgraph Internet_Layer [Protected Ingress]
OAuth[HTTPS / OAuth 2.1 PKCE Flow]
end
subgraph GCP_Cloud_Run [Google Cloud Run Gateway]
MCPServer[Stateless MCP Gateway Engine<br/>TypeScript / Express]
PolicyEngine[SQL Policy & AST Validator]
AuthEngine[Stateless DCR & JWE Decryptor]
AuditLogger[Structured Audit Logger]
end
subgraph GCP_Data_Platform [Google Cloud Platform]
BigQuery[Google BigQuery Engine]
CloudLogging[Cloud Logging / Audit Sink]
Datasets[(Allowlisted Datasets)]
end
Rovo -->|1. Tool Call Request| OAuth
OAuth -->|2. Ingress HTTP/SSE| MCPServer
MCPServer -->|3. Validasi Token & Policy| PolicyEngine
PolicyEngine -->|4. Dry Run Estimate| BigQuery
PolicyEngine -->|5. Enforce Max Bytes Billed| BigQuery
BigQuery -->|6. Query Restricted Data| Datasets
MCPServer -->|7. Stream Audit Trail| CloudLogging
MCPServer -->|8. Return Aggregated Insights| Rovo
Alur Kerja Dua Fase: Estimasi & Eksekusi Kueri
Untuk mencegah pembengkakan biaya, sistem mewajibkan agen AI melakukan verifikasi bertahap. Agen dilarang langsung mengeksekusi kueri mentah sebelum mengestimasi pemindaian data:
sequenceDiagram
autonumber
actor User as Business User
participant Rovo as SERSAN Agent (Rovo)
participant MCP as MCP Gateway (Cloud Run)
participant BQ as BigQuery
User->>Rovo: Tanya: "Berapa total volume transaksi QRIS minggu lalu?"
Note over Rovo: Agent menginspeksi skema tabel <br/>& menyusun draft SELECT query
Rovo->>MCP: Call Tool: estimate_query_cost(sql)
Note over MCP: Validasi Policy:<br/>- Hapus SQL Comments (Anti-Bypass)<br/>- Cek Tabel di Allowlist<br/>- Cek Keyword DDL/DML Terlarang
MCP->>BQ: Dry Run Query (dryRun=true, 0 cost)
BQ-->>MCP: Return Bytes Scanned & Estimasi Biaya ($)
Note over MCP: Validasi batas biaya kueri
MCP-->>Rovo: Return Estimasi: 250 MB (~$0.0015 USD) - Status: APPROVED
rect rgb(240, 248, 255)
Note over Rovo: Jika disetujui, agen melanjutkan eksekusi
Rovo->>MCP: Call Tool: execute_readonly_query(sql)
MCP->>BQ: Eksekusi Query (Enforce maximumBytesBilled=10GB)
BQ-->>MCP: Mengembalikan baris data hasil agregasi
Note over MCP: Potong ke maksimal 1.000 baris<br/>Tulis Audit Log (User, SQL, Latency)
MCP-->>Rovo: Return Data JSON Agregat
end
Rovo->>User: Rangkuman wawasan bisnis & transparansi biaya
Pilar Rekayasa & Fitur Kunci
1. Dynamic Client Registration (RFC 7591) & Stateless OAuth 2.1
Platform SaaS modern seperti Atlassian Rovo memerlukan pendaftaran klien secara dinamis saat instalasi add-on. Gateway ini mengimplementasikan:
- RFC 7591 Dynamic Client Registration (DCR): Menerima pendaftaran
client_iddan redirect URI secara terprogram. - Arsitektur Stateless via JWE: Mengenkripsi konfigurasi klien pendaftaran ke dalam token JWE (JSON Web Encryption) yang ditandatangani. Dengan begitu, gateway tidak memerlukan database stateful tambahan untuk menyimpan kredensial klien, mengeliminasi titik kegagalan (single point of failure) dan menyederhanakan deployment nirserver.
- Opsi Firestore Persistence: Menyediakan opsi repositori stateful menggunakan Google Cloud Firestore jika audit pendaftaran klien terpusat diperlukan.
2. Engine Kebijakan Kueri SQL (Policy Enforcement Point)
Kueri yang diajukan oleh LLM tidak langsung diteruskan ke database, melainkan diproses oleh engine sanitasi berbasis ekspresi reguler dan tokenisasi kata kunci:
- Pembersihan Komentar SQL: Menghapus komentar baris (
--) dan blok (/* */) untuk mencegah teknik prompt injection yang menyamarkan klausa SQL di balik komentar. - Restriksi Hanya
SELECT/WITH ... SELECT: Memblokir seluruh instruksi DDL, DML, maupun procedural scripting (INSERT,UPDATE,DELETE,MERGE,DROP,ALTER,TRUNCATE,DECLARE,EXECUTE IMMEDIATE). - Verifikasi Tabel Allowlist: Memeriksa seluruh nama tabel yang disentuh oleh klausa
FROMatauJOIN. Jika agen mencoba menyentuh tabel di luar daftarALLOWLIST_TABLES, kueri langsung ditolak di level gateway tanpa menyentuh BigQuery.
// Implementasi Policy Validator pada BigQuery Driver
export const validateQuerySafety = (sql: string): { safe: boolean; reason?: string; detectedTables: string[] } => {
const cleanSql = sql.trim().toLowerCase();
// 1. Bersihkan seluruh komentar SQL guna mencegah bypass tokenisasi
const sqlWithoutComments = cleanSql.replace(/\/\*(?:\*[^\/]|[^*])*\*\/|--.*/g, '').trim();
const sqlCleaned = sqlWithoutComments.replace(/`/g, '');
// 2. Wajib berawalan SELECT atau Common Table Expression (WITH ... SELECT)
if (!sqlWithoutComments.startsWith('select') && !sqlWithoutComments.startsWith('with')) {
return { safe: false, reason: 'Hanya kueri SELECT atau WITH...SELECT yang diizinkan.', detectedTables: [] };
}
// 3. Blokir kata kunci modifikasi dan scripting
const forbiddenKeywords = [
'insert', 'update', 'delete', 'merge', 'create', 'drop', 'alter',
'truncate', 'grant', 'revoke', 'declare', 'execute immediate', 'call'
];
for (const word of forbiddenKeywords) {
if (new RegExp(String.raw`\b${word}\b`, 'i').test(sqlWithoutComments)) {
return { safe: false, reason: `Kueri mengandung keyword terlarang: "${word}"`, detectedTables: [] };
}
}
// 4. Validasi Allowlist Tabel
const detectedTables = extractTables(sqlCleaned);
for (const table of detectedTables) {
if (!isTableAllowlisted(table)) {
return { safe: false, reason: `Tabel "${table}" tidak terdaftar dalam allowlist resmi.`, detectedTables };
}
}
return { safe: true, detectedTables };
};
3. Proteksi Biaya Berlapis (Hard-Cap Maximum Bytes Billed)
Selain tahap estimasi dry run, gateway menerapkan batasan keras (hard cap) langsung pada BigQuery API Job parameter:
- Parameter
maximumBytesBilled: 10737418240(10 GB) dikirimkan di setiap job request. - Jika kueri yang dieksekusi secara tidak terduga memindai data melampaui batas tersebut, BigQuery secara otomatis membatalkan kueri sebelum tagihan terjadi (fail-fast protection).
- Capping baris keluaran (max 1.000 rows) guna melindungi memori agen dan menjaga latensi respon tetap di bawah 3 detik.
4. Metadata Penyadaran Partisi & Clustering
LLM sering kali membuat kueri yang lambat karena tidak mengetahui kolom mana yang menjadi partisi tabel. Tool describe_table dan search_allowed_tables memperkaya respon skema dengan metadata partisi (tipe partisi harian, field partisi, flag wajib partisi) dan kolom clustering. Informasi ini memandu agen AI untuk secara mandiri menyusun kueri berfilter tanggal yang efisien.
Perhitungan & Efisiensi Biaya Operasional
Berdasarkan analisis pemodelan arsitektur, implementasi gateway berbasis Cloud Run nirserver menghasilkan struktur biaya yang sangat ekonomis:
| Skenario Penggunaan | Beban Komputasi Bulanan | Estimasi Biaya Gateway | Keterangan |
|---|---|---|---|
| Fase PoC / Eksplorasi | 3–5 pengguna, ~1.000 kueri | ~$1 / bulan | CPU/RAM Cloud Run & 200 GB scan BigQuery masuk dalam batas free tier. |
| Fase Pilot Terbatas | 10–20 pengguna, ~5.000 kueri | ~$3 – $8 / bulan | Kueri teroptimasi partisi; biaya hanya mencakup logging dan kelebihan scan minimal. |
| Fase Produksi Penuh | 50–100 pengguna, ~15.000 kueri | ~$15 – $25 / bulan | Menggunakan arsitektur scale-to-zero untuk menekan idle instances. |
Hasil Pembelajaran & Nilai Strategis
- Kelayakan Integrasi Agen AI Korporat: Membuktikan secara nyata bahwa menghubungkan platform AI modern pihak ketiga (SaaS) dengan basis data pergudangan korporat dapat dilakukan dengan aman tanpa kompromi pada tata kelola data.
- Kepatuhan Protokol Standar Industri: Menguasai standar masa depan integrasi AI melalui Model Context Protocol (MCP), Dynamic Client Registration (RFC 7591), dan OAuth 2.1 PKCE.
- Pondasi Siap Pakai untuk Open Source: Seluruh modul dirancang modular dengan pemisahan Driver Manager, Policy Engine, dan Adapter Layer, siap diadaptasi untuk platform SaaS lainnya (seperti Slack AI, Claude Enterprise, atau Microsoft Copilot Studio).