Developer

Okta Bedrock AgentCore Governance: Cara Amankan Akses Agen AI

Bagaimana cara mengatur hak akses agen AI saat bertindak atas nama pengguna? AWS dan Okta membagikan arsitektur tata kelola identitas agen memakai token exchange dan Cedar policies.

Tim Engineering Classai

· 10 menit baca

Diagram arsitektur keamanan AI Okta Cross App Access dan Amazon Bedrock AgentCore Identity
Gambar: AWS

Inti singkat

  • Okta Cross App Access dan Amazon Bedrock AgentCore memisahkan governance plane dan execution plane untuk agen AI.
  • Rantai tiga token memastikan agen hanya bertindak atas nama pengguna aktif dengan hak akses grup yang sesuai.
  • Pencabutan akses pengguna di Okta langsung memblokir permintaan baru agen dalam waktu sekitar 1 detik.
  • Penerapan AgentCore Gateway dan Cedar policies memusatkan izin ribuan tool MCP tanpa mengutak-atik kode server.
Daftar isi8 bagian
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08

Integrasi Okta Cross App Access (XAA) dan Amazon Bedrock AgentCore memungkinkan tim developer membatasi serta mencabut izin agen AI yang bertindak atas nama pengguna dalam hitungan detik. Langkah ini memecahkan dilema klasik keamanan sistem otonom: bagaimana memastikan agen AI hanya mengakses aplikasi yang diizinkan tanpa membagikan service account bersama atau izin longgar yang berisiko. Arsitektur dan hasil pengujian teknis ini dibagikan langsung oleh AWS Machine Learning Blog Bagian 1 dan Bagian 2.

Ketika agen AI mulai kamu beri wewenang untuk membaca data pelanggan atau memodifikasi tiket proyek, agen tersebut sebenarnya bertindak mewakili pengguna manusia. Masalahnya, sistem OAuth tradisional dan akun bersama sering kali bikin tim keamanan bingung: siapa yang sebenarnya bertanggung jawab, agen mana yang boleh menyentuh aplikasi mana, dan bagaimana cara memutus aksesnya kalau karyawan tersebut pindah divisi? Yuk, kita bedah arsitektur gabungan Okta dan Bedrock AgentCore ini sampai tuntas.

Panduan gratis · gratis

Panduan Cepat API AI untuk Developer

Dari request pertama sampai siap produksi: contoh kode, streaming, kontrol biaya, keamanan API key, dan penanganan error.

  • Contoh request dengan cURL, Python, dan JavaScript
  • Streaming dan format OpenAI vs Anthropic
  • Cara mengontrol biaya token
  • Checklist keamanan dan siap produksi

Dengan mengirim, kamu setuju menerima email dari Classai sesuai Kebijakan Privasi. Bisa berhenti berlangganan kapan saja.

Masalah Akses Agen AI: Kenapa Perlu Tata Kelola Identitas Khusus?

Selama ini, banyak developer memberikan service account dengan izin luas langsung ke agen AI. Cara ini gampang di awal, tapi jadi bom waktu saat masuk skala produksi. Kalau agen dibobol atau melakukan tindakan ngawur, sistem target mencatat aktivitas itu sebagai aksi service account, bukan atas nama pengguna yang memintanya.

Sebaliknya, kalau meminta izin per aplikasi lewat persetujuan OAuth biasa, pengelolaannya bakal luar biasa ribet saat ada puluhan agen dan ribuan tool. Model delegasi biasa sering kali memperluas scope tanpa sengaja atau gagal membawa konteks grup pengguna ke tool hilir.

Arsitektur Okta Cross App Access (XAA) memposisikan Okta sebagai governance plane—pusat penentu kebijakan yang memutuskan agen mana yang boleh mewakili siapa, untuk menyentuh resource apa. Sementara itu, Amazon Bedrock AgentCore bertindak sebagai execution plane yang memegang kredensial agen, menukarkan token keputusan dari Okta, dan menyimpannya di brankas token (token vault) yang aman.

Okta governance plane and AgentCore Identity execution plane, with the agent and two MCP servers running on AgentCore runtime
Arsitektur pemisahan tugas: Okta sebagai governance plane dan AgentCore Identity sebagai execution plane yang menjalankan agen serta server MCP. · Sumber: AWS

Cara Kerja Rantai Tiga Token Okta XAA dan Amazon Bedrock AgentCore

Alih-alih cuma mengandalkan satu access token panjang umur, alur ini memakai rantai tiga token yang saling mengikat. Setiap token punya fungsi unik yang nggak bisa dipalsukan:

  1. ID Token Pengguna: Diterbitkan saat pengguna masuk ke web front end (BFF) lewat aplikasi Okta yang terhubung dengan agen.
  2. ID-JAG (Identity Assertion JWT Authorization Grant): BFF menukarkan ID token pengguna ke org authorization server Okta dengan protokol RFC 8693 token exchange. Okta memeriksa status agen, keterikatan pengguna, dan scope yang disetujui admin. Token ID-JAG ini hanya bisa dipakai sekali (single-use) dan kedaluwarsa dalam 5 menit.
  3. Access Token Target: Agen meminta access token ke AgentCore Identity. AgentCore Identity menukarkan ID-JAG di custom authorization server resource via RFC 7523 (JWT authorization grant). Hasilnya berupa access token berumur 5 menit yang mencantumkan identitas pengguna sekaligus identitas agen, lengkap dengan klaim grup pengguna.

Di dalam infrastruktur AWS sendiri, AgentCore runtime menerbitkan workload access token internal. Token ini cuma berputar di internal AWS untuk mengikat runtime agen ke pengguna, tanpa pernah bocor ke Okta maupun server resource luar.

Sequence of the three-token chain showing the ID token, ID-JAG, and access token, and the check each party makes
Diagram alur rantai tiga token dan validasi yang dijalankan oleh masing-masing pihak mulai dari login hingga pemanggilan server MCP. · Sumber: AWS

Dengan alur ini, tool hilir yang berbasis Model Context Protocol (MCP) server bisa memastikan dua hal sekaligus: apakah pemanggilnya benar-benar agen terdaftar, dan apakah pengguna manusia di belakangnya punya hak akses untuk mengeksekusi fungsi tersebut.

Langkah Pasang Okta Cross App Access dan AgentCore Identity

Untuk membangun fondasi ini, kamu butuh akun AWS dengan akses Amazon Bedrock AgentCore dan model Anthropic Claude di region US West (Oregon), akun Okta dengan fitur XAA dan API Access Management, serta AgentCore CLI dan SDK Python. Sampel dasarnya mengacu pada repositori resmi 08-okta-xaa-delegation-chain.

1. Daftarkan Agen di Okta Admin Console

Buka Okta Admin Console dan masuk ke menu Directory > AI Agents. Daftarkan agen AI secara manual dan buat OpenID Connect app terkait. Di sini, agen dan aplikasi bakal berbagi client ID yang sama.

Okta resource connection for the task agent, limited to the xaa:read and xaa:write scopes
Tampilan konfigurasi resource connection agen di Okta yang dibatasi hanya untuk scope xaa:read dan xaa:write. · Sumber: AWS

Buat custom authorization server untuk aplikasi target (misalnya dengan audience api://task-manager), tambahkan custom scope xaa:read dan xaa:write, serta sertakan klaim groups yang difilter untuk grup berawalan xaa-. Sambungkan agen ke custom authorization server tersebut pada tab Resource connections dengan scope yang terbatas.

2. Konfigurasi Credential Provider di AgentCore Identity

AgentCore Identity bertugas menangani pertukaran token kedua. Kamu perlu mendaftarkan OAuth2 credential provider yang mengarah ke custom authorization server Okta dan memilih grant JWT_AUTHORIZATION_GRANT:

python
import boto3

control = boto3.client("bedrock-agentcore-control")
provider = control.create_oauth2_credential_provider(
    name="okta-xaa-obo",
    credentialProviderVendor="CustomOauth2",
    oauth2ProviderConfigInput={
        "customOauth2ProviderConfig": {
            "oauthDiscovery": {
                "discoveryUrl": f"{OKTA_ORG}/oauth2/{CUSTOM_AS_ID}/.well-known/openid-configuration"
            },
            "clientId": AGENT_CLIENT_ID,
            "clientSecret": AGENT_CLIENT_SECRET,
            "clientAuthenticationMethod": "CLIENT_SECRET_BASIC",
            "onBehalfOfTokenExchangeConfig": {
                "grantType": "JWT_AUTHORIZATION_GRANT"
            },
        }
    },
)

AgentCore Identity menyimpan rahasia klien di AWS Secrets Manager secara otomatis. Kode aplikasi agenmu sama sekali nggak bakal melihat rahasia klien ini atau menyentuh endpoint token Okta secara mentah.

AgentCore console view of the credential provider configured with the JWT authorization grant
Tampilan credential provider di konsol AgentCore yang disiapkan untuk autentikasi JWT authorization grant. · Sumber: AWS

3. Ambil Token di Kode Agen dan Lindungi Server MCP

Di dalam kode agen, jangan cari token di header permintaan biasa. Ambil workload token langsung dari context runtime AgentCore, lalu minta access token ke AgentCore Identity:

python
from bedrock_agentcore.runtime import BedrockAgentCoreContext
import boto3

identity = boto3.client("bedrock-agentcore")

def okta_access_token() -> str:
    workload_token = BedrockAgentCoreContext.get_workload_access_token()
    return identity.get_resource_oauth2_token(
        workloadIdentityToken=workload_token,
        resourceCredentialProviderName="okta-xaa-obo",
        scopes=["xaa:read", "xaa:write"],
        oauth2Flow="ON_BEHALF_OF_TOKEN_EXCHANGE",
    )["accessToken"]

Di sisi server MCP, lakukan verifikasi ganda. Pastikan klaim act atau cid mencantumkan ID agen yang terdaftar, dan periksa apakah grup pengguna memuat hak tulis sebelum mengizinkan modifikasi data:

python
REGISTERED_AGENTS = {"YOUR_AGENT_CLIENT_ID"}
WRITERS_GROUP = "xaa-writers"

def require_write(claims: dict) -> None:
    agent = (claims.get("act") or {}).get("sub")
    if agent not in REGISTERED_AGENTS or claims.get("cid") != agent:
        raise PermissionError("Akses ditolak: hanya menerima agen terdaftar Okta XAA.")
    
    user_groups = claims.get("groups", [])
    if WRITERS_GROUP not in user_groups or "xaa:write" not in claims.get("scp", []):
        raise PermissionError(f"Akses ditolak: butuh keanggotaan di '{WRITERS_GROUP}'.")

Kecepatan Respon dan Hasil Pengujian Keamanan di Lapangan

Dalam pengujian nyata yang dilakukan tim AWS terhadap tiga pengguna uji (Alice, Bob, dan Carol), delegasi identitas ini berhasil menyaring hak akses dengan sangat ketat:

Penggunacreate_tasklist_tasks
Alice (anggota xaa-readers)Ditolak (butuh keanggotaan xaa-writers)Diizinkan
Bob (anggota xaa-writers)Berhasil dibuatDiizinkan
Carol (tanpa grup xaa)Ditolak (tidak punya klaim groups)Diizinkan
Bob lalu Alice berurutanBerhasil untuk Bob, ditolak untuk AliceDiizinkan

Sistem juga langsung menolak berbagai skenario ancaman keamanan:

  • Token ID-JAG milik Agen B yang dikirim ke agen task langsung dicegat oleh JWT authorizer bawaan runtime dengan status HTTP 401.
  • Token ID-JAG yang ditahan selama 245 detik langsung ditolak HTTP 401 karena tersisa kurang dari 60 detik sebelum kedaluwarsa.
  • Upaya menukarkan satu ID-JAG sebanyak dua kali ditolak oleh Okta custom authorization server dengan pesan error the id-jag was already used.

Berapa latensi tambahannya? Dari total waktu eksekusi sekitar 30 detik (sebagian besar dihabiskan untuk komputasi model AI dan panggilan tool), AgentCore Identity cuma menambah waktu sekitar 0,6 detik. Median panggilan pertukaran token dari pengujian menunjukkan data berikut:

Jenis Panggilan APIMedian Latensi
Sign-in via authorization code flow1.205 ms
Tukar ID token jadi ID-JAG di Okta org AS216 ms
Ambil Workload Access Token via JWT135 ms
Ambil Resource OAuth2 Token di Okta custom AS508 ms

Menariknya, saat agen memanggil server MCP kedua dalam permintaan yang sama, brankas token (token vault) mengembalikan access token yang sudah ada dengan median latensi cuma 58 milidetik tanpa perlu menukar ID-JAG ulang.

6 Praktik Terbaik Supaya Delegasi Token Tetap Aman dan Anti Jebol

Dari eksperimen lapangan tersebut, ada enam praktik penting yang wajib kamu terapkan di lingkungan produksi:

  1. Terbitkan ID-JAG baru di setiap permintaan: Token ID-JAG bersifat sekali pakai dengan masa aktif 300 detik. Runtime bakal menolak token jika sisa umurnya di bawah 60 detik.
  2. Titipkan hak pengguna di klaim groups: Karena koneksi resource Okta memberikan scope seragam untuk semua pengguna agen, filter otorisasi per individu harus dibaca dari klaim groups.
  3. Kunci identitas agen di runtime dan tool: Gunakan parameter allowedClients di runtime authorizer untuk memeriksa client_id pada ID-JAG, dan validasi klaim act serta cid di dalam tool MCP.
  4. Uji ulang kegagalan exchange langsung ke endpoint Okta: AgentCore Identity menyamarkan pesan error scope dan client yang salah dengan kode umum HTTP status 400. Reproduksi langsung ke Okta untuk tahu penyebab pastinya.
  5. Beri izin role agen membaca secret provider: Pastikan IAM role runtime agen punya izin membaca AWS Secrets Manager tempat rahasia klien disimpan.
  6. Gunakan resource connection sebagai kill-switch darurat: Memutus resource connection di konsol Okta langsung membatalkan akses pada detik itu juga. Sebaliknya, proses deactivate agen di Okta beta API sempat tertahan antrean hingga 86 menit saat diuji.

Skala Besar: Pakai AgentCore Gateway dan Cedar Policies

Arsitektur di atas bekerja mulus untuk satu agen dan dua tool MCP. Namun, saat perusahaanmu punya puluhan agen dan ribuan tool, menaruh logika pengecekan grup di tiap kode server MCP bakal bikin pusing dan rentan inkonsistensi.

Part 1 solution extended with AgentCore Gateway, Policy, and Observability, a second agent on Amazon EKS, and the audit path
Perluasan arsitektur Part 2: Penambahan AgentCore Gateway, evaluasi Cedar policies, agen kedua di Amazon EKS, dan jejak audit CloudWatch. · Sumber: AWS

Di sinilah Amazon Bedrock AgentCore Gateway dan mesin kebijakan Cedar masuk. Alih-alih agen memanggil server MCP secara langsung, semua panggilan tool diarahkan lewat satu pintu gerbang: Gateway.

Gateway inbound authorizer accepting only ID-JAGs that Okta issued to the agent for the resource’s authorization server
Konfigurasi inbound authorizer di AgentCore Gateway yang hanya memvalidasi ID-JAG dari agen terdaftar. · Sumber: AWS

Gateway ini bertindak mengambil alih tugas pertukaran token ke AgentCore Identity. Sebelum meneruskan panggilan ke server target, Gateway mengevaluasi aturan akses memakai bahasa kebijakan Cedar yang bersifat default-deny.

Gateway target for the task manager configured to redeem the ID-JAG through the Part 1 credential provider
Konfigurasi target Gateway untuk task manager yang disiapkan menukarkan ID-JAG secara otomatis. · Sumber: AWS

Dengan pola ini, agen kedua yang berjalan di luar AWS runtime—misalnya agen pelaporan di Amazon Elastic Kubernetes Service (Amazon EKS)—bisa memakai pintu gerbang yang sama tanpa perlu mengubah konfigurasi server MCP.

Audit path where AgentCore spans and Okta’s System Log both reach CloudWatch and one Omni query joins them
Alur jejak audit lengkap: integrasi OpenTelemetry traces AgentCore dan Okta System Log yang bermuara di Amazon CloudWatch. · Sumber: AWS

Semua jejak keputusan otorisasi terekam lewat OpenTelemetry spans ke AgentCore Observability. Ditambah integrasi Okta System Log melalui Amazon EventBridge ke Amazon CloudWatch, tim audit bisa melihat seluruh riwayat keputusan dalam satu kueri terpusat.

Omni query result joining Alice’s ID-JAG grant in Okta’s System Log to the two downstream authorization decisions
Hasil kueri CloudWatch Omni yang menyatukan peristiwa penerbitan ID-JAG di Okta dengan dua keputusan otorisasi downstream. · Sumber: AWS
Single trace for Alice’s request from the agent’s tool call through the Gateway’s identity and Cedar checks to the MCP server’s deny
Detail satu trace permintaan Alice: mulai dari panggilan tool agen, verifikasi identitas Gateway, evaluasi Cedar, hingga penolakan izin di server MCP. · Sumber: AWS

Perbandingan antara pendekatan Okta Cross App Access dan persetujuan OAuth per pengguna (per-user consent) menunjukkan keunggulan kontrol terpusat ini secara nyata.

Comparison of Cross App Access and per-user OAuth consent, including the revocation behavior measured
Perbandingan komprehensif antara mekanisme Okta Cross App Access dan persetujuan OAuth per pengguna, termasuk kecepatan pencabutan izin. · Sumber: AWS

Dampak Buat Developer dan Arsitektur AI di Indonesia

Bagi tim developer dan enterprise di Indonesia—terutama sektor perbankan, fintech, kesehatan, dan e-commerce—pola arsitektur identitas ini jadi jawaban krusial untuk memenuhi standar kepatuhan regulasi, termasuk Undang-Undang Perlindungan Data Pribadi (UU PDP).

Prinsip least privilege dan akuntabilitas audit menjadi harga mati. Saat agen AI membaca data sensitif nasabah atau database internal, sistem wajib membuktikan bahwa agen tersebut benar-benar diperintah oleh staf yang memiliki wewenang sah pada menit tersebut. Rantai tiga token dan pencabutan hak akses di bawah 1 detik ini menutup celah kebocoran data akibat kredensial statis yang bocor.

Kamu juga bisa mempelajari pola arsitektur penghubung data agen AI lainnya lewat ulasan kami tentang MCP Server ECS Fargate untuk data lake atau panduan membangun remote agent koding aman di Bedrock AgentCore.

Eksperimen Model LLM Agen Pakai Classai Router

Saat membangun dan menguji alur otorisasi agen AI berbasis Bedrock AgentCore ini, kamu tentu butuh model reasoning yang mumpuni untuk membaca konteks tool call dengan presisi tinggi. Claude 3.5 Sonnet atau varian model frontier lainnya biasanya jadi pilihan utama untuk agen otonom.

Biar proses prototyping agenmu nggak boncos dan nggak ribet gonta-ganti konfigurasi API, kamu bisa memakai Classai Router. Satu API key di Classai Router kompatibel langsung dengan SDK Anthropic maupun OpenAI. Harganya dihitung transparan per 1 juta token dalam rupiah tanpa langganan wajib:

  • Claude Sonnet 4.6: Rp2.700 (input) / Rp13.500 (output)
  • Claude Sonnet 5: Rp3.210 (input) / Rp15.750 (output)
  • GPT-4o: Rp525 (input) / Rp2.700 (output)

Kamu bisa top up saldo mulai dari Rp10.000 via QRIS atau transfer bank lokal tanpa butuh kartu kredit luar negeri. Cukup arahkan base URL proyek agenmu ke router Classai untuk mulai bereksperimen.

Sumber & referensi

  1. 01
  2. 02

Artikel ini ditulis ulang oleh Tim Classai dengan bantuan AI berdasarkan sumber di atas — bukan terjemahan. Ada yang keliru? Kabari kami di [email protected].

Pertanyaan yang sering ditanyakan

Apa bedanya Okta Cross App Access dengan token exchange RFC 8693 biasa?

Token exchange biasa cuma meneruskan identitas pengguna tanpa mencantumkan identitas agen, dan rawan memperluas scope izin. Okta XAA menyematkan identitas agen di klaim act, mengunci scope sesuai izin admin, dan mencatat identitas agen di log audit.

Berapa lama waktu yang dibutuhkan sistem untuk mencabut akses agen AI?

Jika admin mencabut penugasan pengguna di Okta, permintaan baru agen langsung ditolak dalam waktu sekitar 1 detik. Sementara itu, access token yang sudah telanjur terbit bakal kedaluwarsa otomatis dalam durasi maksimal 5 menit.

Kenapa server MCP butuh verifikasi klaim groups selain scope OAuth?

Koneksi resource Okta memberikan scope yang sama untuk semua pengguna agen tersebut. Oleh karena itu, batasan hak akses per individu (misalnya izin baca saja vs izin tulis) harus dibaca dari klaim groups pengguna di dalam token.

Apakah agen AI bisa melihat client secret Okta saat menukar token?

Nggak bisa. Rahasia klien disimpan aman oleh Amazon Bedrock AgentCore Identity di dalam AWS Secrets Manager, sehingga kode agen hanya bertugas menerima token tanpa pernah membaca rahasia aslinya.

Luthfi

Classai Weekly

dari Luthfi · Setiap Senin, 06.30 WIB

Nggak sempat ngikutin berita AI? Biar aku yang rangkumin tiap Senin.

  • 5 berita AI paling penting minggu ini — udah disaring, nggak perlu baca puluhan situs
  • Kenapa itu penting buat kamu — plus opini jujur Luthfi soal arahnya
  • 1 prompt siap pakai yang bisa langsung dicoba
  • Pilihan kelas & model AI minggu ini — kadang ada promo khusus pelanggan

Dengan mengirim, kamu setuju menerima email dari Classai sesuai Kebijakan Privasi. Bisa berhenti berlangganan kapan saja.

Lihat contoh edisi

Bermanfaat? Bagikan ke tim atau temanmu.

Langkah berikutnya

Sudah paham teorinya. Sekarang praktikkan.

Daftar, isi saldo mulai puluhan ribu rupiah, dan panggil model AI pilihanmu dari kode yang sudah ada.

Ditulis oleh

Tim Engineering Classai

Pengembang Classai Router

Tim Engineering Classai membangun dan menjalankan Classai Router, gateway API AI yang kompatibel dengan format OpenAI dan Anthropic. Kami menulis panduan teknis dari pengalaman mengoperasikan API AI setiap hari.

Baca juga

Artikel terkait

Semua Developer