{"id":790,"date":"2026-08-05T09:56:58","date_gmt":"2026-08-05T02:56:58","guid":{"rendered":"https:\/\/komunitech.com\/blog\/?p=790"},"modified":"2026-08-05T10:02:20","modified_gmt":"2026-08-05T03:02:20","slug":"google-api-key-vs-service-account-vs-oauth-2-0-kapan-harus-pakai-yang-mana-2026","status":"publish","type":"post","link":"https:\/\/komunitech.com\/blog\/implementasi\/google-api-key-vs-service-account-vs-oauth-2-0-kapan-harus-pakai-yang-mana-2026\/","title":{"rendered":"Google API Key vs Service Account vs OAuth 2.0: Kapan Harus Pakai yang Mana? (2026)"},"content":{"rendered":"<p><strong>tl;dr:<\/strong> Google punya tiga cara autentikasi yang sering ketuker: <strong>API key<\/strong> buat akses data publik lewat skrip pribadi (paling simpel, tapi cuma nandain project buat billing\u2014bukan identitas), <strong>Service Account<\/strong> buat backend\/server yang akses data milik aplikasi sendiri (robot pegawai, pakai file JSON), dan <strong>OAuth 2.0<\/strong> buat aplikasi yang akses data milik <em>user<\/em> (Gmail\/Drive orang lain, butuh izin\/consent). Salah pilih = celah keamanan atau tagihan bengkak. Artikel ini bantu kamu tentuin kapan pakai yang mana, lengkap tabel banding + pohon keputusan.<\/p>\n<p>Kamu lagi bikin aplikasi atau AI agent yang nyambung ke layanan Google, terus mentok di Google Cloud Console: ada &#8220;API Key&#8221;, &#8220;OAuth Client ID&#8221;, &#8220;Service Account&#8221;\u2014harus pilih yang mana? Salah pilih bukan cuma bikin error, tapi bisa buka celah keamanan atau bikin tagihan meledak. Kabar baiknya: aturan mainnya sebenarnya sederhana kalau kamu paham <em>apa yang lagi diautentikasi<\/em>. Kalau kamu udah pernah <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-api-key-google-ai-studio-connect-ke-ai-agent-2026\/\">bikin API key di Google AI Studio<\/a>, kamu udah kenalan sama salah satunya\u2014sekarang kita bandingin ketiganya biar kamu gak salah pakai lagi.<\/p>\n<h2>Kenapa Google punya 3 cara autentikasi?<\/h2>\n<p>Pertanyaan wajar: kenapa gak satu aja biar simpel? Jawabannya karena tiga skenario ini beda banget kebutuhan keamanannya. Analogi gampangnya:<\/p>\n<ul>\n<li><strong>API Key = kartu member toko.<\/strong> Nunjukin kamu member (buat itung kuota\/tagihan), tapi gak bener-bener buktiin kamu siapa. Siapa aja yang pegang kartunya bisa pakai.<\/li>\n<li><strong>Service Account = robot pegawai.<\/strong> Punya identitas sendiri, kerja di backend atas nama aplikasi, akses gudang data milik aplikasi itu sendiri.<\/li>\n<li><strong>OAuth 2.0 = surat kuasa dari user.<\/strong> Kamu minta izin ke user, user setuju, baru kamu boleh akses data <em>milik user itu<\/em> (email dia, Drive dia) selama izin masih berlaku.<\/li>\n<\/ul>\n<p>Kunci membedakannya: <strong>data siapa yang mau kamu akses, dan apakah butuh persetujuan orang lain?<\/strong> Sisanya tinggal ngikut.<\/p>\n<h2>Google API Key: identifikasi project, bukan identitas<\/h2>\n<p>API key itu string panjang (formatnya kira-kira <code>AIzaSy\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022ewQe<\/code>\u2014diawali <code>AIzaSy<\/code>, ditutup beberapa karakter acak) yang gunanya <strong>ngaitin request ke sebuah project buat keperluan billing dan kuota<\/strong>. Perhatikan: API key <em>tidak<\/em> ngidentifikasi siapa yang manggil. Dia gak tau kamu &#8220;principal&#8221; mana\u2014makanya dia gak bisa dipakai buat cek izin akses (IAM) beneran. <em>(Catatan: jangan pernah tampilkan API key asli kamu secara utuh di mana pun\u2014termasuk di screenshot atau dokumentasi\u2014karena siapa pun yang melihatnya bisa langsung memakainya.)<\/em><\/p>\n<p><strong>Cocok buat:<\/strong><\/p>\n<ul>\n<li>Akses data yang emang publik (Maps, Translate, YouTube data publik).<\/li>\n<li>Skrip pribadi atau proyek kecil yang cuma manggil model AI (contohnya <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-api-key-google-ai-studio-connect-ke-ai-agent-2026\/\">Gemini via AI Studio<\/a>).<\/li>\n<li>Prototipe cepat yang gak nyimpen data sensitif user.<\/li>\n<\/ul>\n<p><strong>Bahayanya:<\/strong> karena &#8220;siapa yang pegang, dia yang bisa pakai&#8221;, API key yang bocor = orang lain bisa numpang kuota kamu dan bikin tagihan kamu bengkak. Ini kenapa API key <strong>wajib di-restrict<\/strong> (batasi API mana yang boleh dipakai + dari domain\/IP mana). API key gak dikenai biaya buat dibuat, tapi <em>pemakaian<\/em> API di baliknya bisa berbayar.<\/p>\n<h2>Service Account: robot backend yang akses data milik aplikasi<\/h2>\n<p>Service Account adalah akun khusus yang mewakili <em>aplikasi<\/em>, bukan manusia. Dia punya identitas sendiri (email format <code>nama@project.iam.gserviceaccount.com<\/code>) dan biasanya diautentikasi pakai <strong>file kunci JSON<\/strong> yang berisi private key.<\/p>\n<p><strong>Cocok buat:<\/strong><\/p>\n<ul>\n<li>Komunikasi server-to-server (backend kamu manggil API Google tanpa ada user yang login).<\/li>\n<li>Akses data milik aplikasi itu sendiri (misal spreadsheet yang kamu share ke email service account-nya).<\/li>\n<li>Otomasi backend\/cron job yang jalan 24\/7 tanpa interaksi manusia.<\/li>\n<li>Impersonation user di Google Workspace lewat <em>domain-wide delegation<\/em> (skenario enterprise).<\/li>\n<\/ul>\n<p><strong>Yang harus hati-hati:<\/strong> file JSON service account itu <em>ibarat kunci gudang<\/em>\u2014siapa yang pegang, dia punya semua akses yang dimiliki service account itu. Jangan pernah commit file ini ke GitHub. Banyak insiden kebocoran gara-gara file JSON ke-push ke repo publik. Kalau kamu pakai AI agent yang butuh baca-tulis data internal, alur ini mirip yang dibahas di panduan <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/tutorial-cara-kasih-akses-openclaw-biar-bisa-baca-tulis-google-drive-docs-dan-sheets-2026\/\">akses OpenClaw ke Google Drive<\/a>.<\/p>\n<h2>OAuth 2.0: izin atas nama user<\/h2>\n<p>OAuth 2.0 dipakai ketika aplikasi kamu perlu akses <strong>data milik user lain<\/strong>\u2014email mereka, file Drive mereka, kalender mereka. Bedanya paling fundamental: OAuth <em>butuh persetujuan (consent) dari user<\/em>. Alurnya: user diarahkan ke halaman login Google \u2192 user menyetujui izin yang diminta \u2192 aplikasi kamu dapat <em>access token<\/em> (+ refresh token buat perpanjang).<\/p>\n<p><strong>Cocok buat:<\/strong><\/p>\n<ul>\n<li>Aplikasi yang punya fitur &#8220;Login with Google&#8221;.<\/li>\n<li>Aplikasi yang akses Gmail\/Drive\/Calendar <em>milik user<\/em> (bukan milik aplikasi kamu).<\/li>\n<li>Skenario di mana kamu harus bisa buktiin &#8220;user X yang ngasih izin, bukan aplikasi yang maksa&#8221;.<\/li>\n<\/ul>\n<p>OAuth adalah yang paling aman untuk data user karena user pegang kendali\u2014mereka bisa cabut izin kapan aja. Tapi juga paling ribet setup-nya (butuh consent screen, redirect URI, penanganan token). Buat aplikasi yang jalan di banyak platform (web, Android, iOS), kamu perlu <em>Client ID<\/em> terpisah per platform.<\/p>\n<h2>Tabel banding: API Key vs Service Account vs OAuth 2.0<\/h2>\n<table>\n<thead>\n<tr>\n<th>Aspek<\/th>\n<th>API Key<\/th>\n<th>Service Account<\/th>\n<th>OAuth 2.0<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Yang diautentikasi<\/strong><\/td>\n<td>Project (buat billing\/kuota)<\/td>\n<td>Aplikasi (identitas robot)<\/td>\n<td>User (atas nama manusia)<\/td>\n<\/tr>\n<tr>\n<td><strong>Butuh consent user?<\/strong><\/td>\n<td>Tidak<\/td>\n<td>Tidak<\/td>\n<td>Ya (wajib)<\/td>\n<\/tr>\n<tr>\n<td><strong>Akses data siapa?<\/strong><\/td>\n<td>Data publik<\/td>\n<td>Data milik aplikasi<\/td>\n<td>Data milik user<\/td>\n<\/tr>\n<tr>\n<td><strong>Bentuk kredensial<\/strong><\/td>\n<td>String key<\/td>\n<td>File JSON (private key)<\/td>\n<td>Client ID + token<\/td>\n<\/tr>\n<tr>\n<td><strong>Tingkat keamanan<\/strong><\/td>\n<td>Paling lemah (siapa pegang bisa pakai)<\/td>\n<td>Menengah (JSON = kunci penuh)<\/td>\n<td>Paling kuat (user kendali)<\/td>\n<\/tr>\n<tr>\n<td><strong>Kerumitan setup<\/strong><\/td>\n<td>Paling gampang<\/td>\n<td>Menengah<\/td>\n<td>Paling ribet<\/td>\n<\/tr>\n<tr>\n<td><strong>Contoh nyata<\/strong><\/td>\n<td>Skrip panggil Gemini\/Maps<\/td>\n<td>Backend baca Google Sheets internal<\/td>\n<td>App &#8220;Login with Google&#8221; akses Gmail user<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Pohon keputusan: kapan pakai yang mana?<\/h2>\n<p>Jawab tiga pertanyaan ini berurutan:<\/p>\n<ol>\n<li><strong>Kamu mau akses data milik USER lain (email\/Drive mereka)?<\/strong><br \/>\u2192 Ya: <strong>OAuth 2.0<\/strong>. Stop di sini, gak ada opsi lain.<\/li>\n<li><strong>Kalau tidak\u2014kamu jalan di server\/backend tanpa user login, akses data milik aplikasi sendiri?<\/strong><br \/>\u2192 Ya: <strong>Service Account<\/strong>.<\/li>\n<li><strong>Kalau tidak\u2014cuma akses data publik atau panggil model AI dari skrip pribadi?<\/strong><br \/>\u2192 Ya: <strong>API Key<\/strong> (jangan lupa di-restrict).<\/li>\n<\/ol>\n<p>Patokan singkat: <em>data user \u2192 OAuth \u00b7 data aplikasi\/backend \u2192 Service Account \u00b7 data publik\/skrip \u2192 API Key.<\/em><\/p>\n<h2>Kesalahan umum yang bikin celah keamanan<\/h2>\n<ul>\n<li><strong>Pakai API key buat data user.<\/strong> API key gak tau siapa user-nya, jadi mustahil buat autentikasi identitas seseorang. Ini kerjaan OAuth.<\/li>\n<li><strong>Commit file JSON service account ke GitHub.<\/strong> Kesalahan klasik. Bot scanner nyari file ini di repo publik dalam hitungan menit. Selalu pakai <code>.gitignore<\/code> dan environment variable.<\/li>\n<li><strong>API key tanpa restriction.<\/strong> Key yang gak dibatasi = tiket gratis buat siapa pun yang nemuin. Batasi per API dan per domain\/IP.<\/li>\n<li><strong>Nyimpen kredensial hardcode di kode.<\/strong> Baik API key maupun kunci lain, jangan ditulis langsung di source code. Pakai <code>.env<\/code> atau secret manager.<\/li>\n<li><strong>Pakai OAuth buat backend cron job.<\/strong> OAuth butuh user consent\u2014gak cocok buat proses otomatis tanpa manusia. Itu ranah service account.<\/li>\n<\/ul>\n<p>Kalau kamu lagi mikirin apakah tetap pakai layanan API pihak ketiga atau pindah, pertimbangan keamanan kredensial ini juga masuk hitungan\u2014kami bahas terpisah di <a href=\"https:\/\/komunitech.com\/blog\/implementasi\/kapan-harus-berhenti-pakai-api-ai-pihak-ketiga-panduan-keputusan-2026\/\">panduan kapan berhenti pakai API AI pihak ketiga<\/a>.<\/p>\n<h2>Pertanyaan yang Sering Ditanya<\/h2>\n<h3>Apa perbedaan utama API key dan OAuth 2.0?<\/h3>\n<p>API key cuma ngaitin request ke project buat billing\/kuota dan dipakai untuk data publik\u2014dia gak ngidentifikasi user. OAuth 2.0 mengautentikasi user tertentu dengan persetujuan mereka, dan dipakai untuk akses data milik user (misal Gmail atau Drive mereka). Singkatnya: API key buat data publik\/skrip, OAuth buat data user.<\/p>\n<h3>Apakah Google API key gratis?<\/h3>\n<p>Membuat API key gratis dan tidak dikenai biaya. Yang bisa berbayar adalah <em>pemakaian<\/em> API di baliknya\u2014banyak API punya kuota gratis (free tier), tapi kalau lewat batas atau pakai API premium (misal Maps volume tinggi), kamu bakal ditagih sesuai penggunaan.<\/p>\n<h3>Kapan harus pakai Service Account, bukan OAuth?<\/h3>\n<p>Pakai Service Account kalau aplikasimu jalan di server\/backend tanpa ada user yang login, dan mengakses data milik aplikasi itu sendiri (bukan data user). Contoh: cron job yang baca spreadsheet internal 24\/7. OAuth dipakai kalau kamu butuh akses data milik user dengan persetujuan mereka.<\/p>\n<h3>Kenapa OAuth dianggap lebih aman daripada API key?<\/h3>\n<p>Karena OAuth mengautentikasi identitas user dan user memegang kendali\u2014mereka bisa mencabut izin kapan saja, dan aksesnya dibatasi scope tertentu. API key sebaliknya: siapa pun yang memegang key-nya bisa memakainya tanpa verifikasi identitas, sehingga lebih rawan disalahgunakan kalau bocor.<\/p>\n<h3>Apakah service account dan API key bisa dipakai bersamaan?<\/h3>\n<p>Bisa, dan malah umum di proyek kompleks. Google bahkan mendukung &#8220;authorization key&#8221;\u2014API key yang diikat ke service account\u2014sehingga request diproses seolah memakai identitas service account tersebut. Tapi untuk kasus sederhana, cukup pilih satu sesuai kebutuhan.<\/p>\n<h3>Bagaimana cara mencegah tagihan bengkak karena kredensial bocor?<\/h3>\n<p>Terapkan restriction pada API key (batasi API dan domain\/IP), simpan kredensial di environment variable atau secret manager (bukan hardcode\/GitHub), dan pasang billing alert serta quota limit di Google Cloud Console supaya kamu langsung tahu kalau ada lonjakan pemakaian mencurigakan.<\/p>\n<h2>Penutup<\/h2>\n<p>Tiga metode ini bukan soal mana yang &#8220;paling bagus&#8221;\u2014tapi mana yang <em>pas<\/em> buat skenario kamu. Salah satu penyebab paling sering aplikasi rentan atau tagihan bengkak adalah pakai metode yang salah: API key buat sesuatu yang harusnya OAuth, atau JSON service account yang bocor ke repo publik. Mulai dari pertanyaan &#8220;data siapa yang mau diakses?&#8221;, sisanya ngikut.<\/p>\n<p>Kalau kamu baru mulai dan cuma butuh nyambungin model AI ke agent atau skrip, mulai dari yang paling simpel dulu: <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-api-key-google-ai-studio-connect-ke-ai-agent-2026\/\">bikin API key gratis di Google AI Studio<\/a>. Buat yang mau serius bangun AI agent yang aman dari nol\u2014termasuk cara ngatur kredensial yang bener\u2014kamu bisa belajar terstruktur lewat <a href=\"https:\/\/komunitech.com\/blog\/\">workshop KomuniTech<\/a> (2 jam, langsung praktik bikin Karyawan AI sendiri).<\/p>\n<h2>Referensi<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/workspace\/guides\/create-credentials\" rel=\"noopener nofollow\" target=\"_blank\">Google Workspace \u2014 Create access credentials<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/docs\/authentication\/api-keys\" rel=\"noopener nofollow\" target=\"_blank\">Google Cloud \u2014 Manage API keys<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/identity\/protocols\/oauth2\" rel=\"noopener nofollow\" target=\"_blank\">Google \u2014 Using OAuth 2.0 to Access Google APIs<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/iam\/docs\/service-account-overview\" rel=\"noopener nofollow\" target=\"_blank\">Google Cloud IAM \u2014 Service accounts overview<\/a><\/li>\n<\/ul>\n<p><em>Disclaimer: Detail antarmuka Google Cloud Console dan kebijakan kuota bisa berubah sewaktu-waktu. Selalu cek dokumentasi resmi Google untuk informasi terkini.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>tl;dr: Google punya tiga cara autentikasi yang sering ketuker: API key buat akses data publik lewat skrip pribadi (paling simpel, tapi cuma nandain project buat billing\u2014bukan identitas), Service Account buat backend\/server yang akses data milik aplikasi sendiri (robot pegawai, pakai file JSON), dan OAuth 2.0 buat aplikasi yang akses data milik user (Gmail\/Drive orang lain, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":792,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[],"class_list":["post-790","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-implementasi"],"_links":{"self":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/comments?post=790"}],"version-history":[{"count":2,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/790\/revisions"}],"predecessor-version":[{"id":793,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/790\/revisions\/793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media\/792"}],"wp:attachment":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media?parent=790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/categories?post=790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/tags?post=790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}