Skip to main content
BlogSecurity

Pulumi Neo Security: Read-Only Scans, Fixes Only as a PR

Pulumi Neo Security membaca cloud secara read-only dan hanya menulis diff usulan. Mengapa pemisahan itu pola yang layak ditiru, di mana ia gagal, dan langkah Senin.

Matthews Wong

Software Engineer

Oktober 202611 menit baca
Pulumi Neo Security: Read-Only Scans, Fixes Only as a PR

Ringkasan Utama

Pulumi Neo Security menunjukkan desain yang aman untuk agent infrastruktur: fase assessment read-only sepenuhnya, dan remediation hanya menulis usulan perubahan di repository. Setiap temuan yang terbukti menjadi diff, preview, dan pull request untuk manusia, sementara deployment tetap lewat workflow yang sudah ada dan ditinjau. Tiru pemisahannya, bukan produknya.

Kalimat yang membuat saya berhenti membaca pengumuman Neo Security dari Pulumi itu pendek: fase assessment read-only sepenuhnya. Kebanyakan demo agent yang saya lihat dimulai dari ujung sebaliknya, yaitu agent yang memegang kredensial deploy dan dipercaya untuk berhati-hati. Di sini agent yang mencari celah yang bisa dieksploitasi sama sekali tidak punya jalur tulis.

Pengungkapan dulu: Neo Security adalah research preview untuk pelanggan yang diundang dan saya belum menjalankannya. Tulisan ini adalah pembacaan teliti atas pengumuman Pulumi oleh Joe Duffy (28 Agustus 2026), post Context API, dan dokumentasi Neo tentang task mode, pull request, dan code review, ditambah dokumentasi branch protection GitHub untuk bagian yang bisa Anda bangun sendiri. Setiap klaim tentang Neo dirujuk ke halaman itu; kode pipeline adalah milik saya dan diberi label.

Polanya: dua lajur, dan hanya satu yang boleh menulis

Neo Security adalah agent yang mencari celah yang bisa dieksploitasi di infrastruktur cloud, lintas provider seperti AWS, Azure, Google Cloud, dan Kubernetes, apa pun cara infrastruktur itu dibuat. Post-nya membagi kerjanya menjadi dua lajur. Lajur assessment menyusun threat model, memetakan attack vector, dan mengujinya, dan post itu menyebut fase tersebut read-only sepenuhnya. Lajur remediation adalah satu-satunya langkah yang menulis, dan yang ditulis adalah usulan perubahan di repository.

Serah terima antar lajur itulah desainnya. Pulumi menulis bahwa temuan yang terbukti bisa menjadi diff usulan, preview perubahan, dan pull request untuk ditinjau manusia, dan deployment tetap di workflow yang sudah ada dan ditinjau. Agent tidak pernah melompat dari saya menemukannya ke saya menerapkannya. Manusia dan pipeline yang sudah Anda percaya berada di celah itu.

Apa yang sebenarnya dibaca oleh assessment read-only

Read-only bukan berarti dangkal. Pengumuman itu menyebut enam plane bukti yang disintesis Neo sebelum menyimpan sebuah temuan, dan tabel di bawah mengikuti urutan di post. Poin desainnya: setiap plane adalah pembacaan, yaitu daftar inventory, query graph, file source, log, hasil policy, dan pertanyaan ke provider cloud.

PlaneYang dijawabnyaCatatan yang disebut di post
Resource inventoryApa yang ada di seluruh account, region, dan tipeTermasuk resource yang dibuat di luar IaC
Reference graphWorkload mana membawa identity mana, identity mana menjangkau data mana, stack mana mengelola resource manaDibaca lewat Context API
IntentApa maksud penulisnya: kode IaC, komentar, penamaan, riwayat commit dan reviewDipakai bila tersedia
Runtime stateLog, metrik, uptime, boot log, dan lalu lintas jaringanLewat alat yang dipakai platform engineer
Policy dan complianceLebih dari 150 policy bawaan yang dipetakan ke CIS Controls, NIST SP 800-53, HITRUST CSF, dan PCI DSS, ditambah policy buatan pelangganDipakai untuk mencari risiko di luar pelanggaran yang sudah diketahui
Jawaban providerPertanyaan langsung ke cloud: Access Analyzer untuk keterjangkauan eksternal, pengecekan akses publik, simulasi policyMenyelesaikan permission efektif setelah aturan yang tumpang tindih dan SCP

Reference graph adalah plane yang bisa Anda coba hari ini tanpa undangan, jika paket Anda sesuai. Context API Pulumi adalah API read-only yang menghubungkan resource yang dikelola Pulumi maupun yang ditemukan, stack, dan relasinya menjadi sebuah graph. Query-nya adalah dokumen JSON dengan klausa anchor, traverse, dan return. Contoh dari post Context API menanyakan resource mana yang dikelola lewat provider AWS yang lebih tua dari 7.0.0.

// Context API query, copied from Pulumi's Context API post.
// Read-only: anchor picks the starting nodes, traverse follows edges,
// return chooses what comes back. Nothing here can change a stack.
{
  "anchor": {
    "nodeType": "resource",
    "match": {
      "type": "pulumi:providers:aws",
      "fields": { "provider_version": { "op": "lt", "value": "7.0.0" } }
    }
  },
  "traverse": [
    {
      "edgeTypes": ["provided_by"],
      "direction": "in",   // from the provider back to what it manages
      "alias": "managed"
    }
  ],
  "return": { "select": ["anchor", "managed"] }
}

// An agent that is not Neo can fetch the query grammar with:
//   pulumi api GetGraphQuerySchema

Akses adalah prasyarat, bukan pikiran belakangan. Post itu menyebut API ini public preview untuk organisasi Enterprise dan Business Critical, butuh Pulumi CLI v3.243.0 atau lebih baru dan role dengan permission resources:search, serta membatasi respons pada apa yang boleh dibaca pemanggil. Neo menjalankan query ini dengan permission pengguna yang memanggilnya, dan vocabulary serta batasnya bisa berubah selama preview.

Temuan yang terbukti, bukan dugaan

Lajur read-only punya standar kualitas. Neo membangun model, menguji tiap attack vector, dan menyimpan yang bertahan, diurutkan menurut severity dan confidence, serta berusaha membuang temuan yang terbantah atau tidak berdampak. Setiap temuan yang disimpan membawa buktinya dan, jika source tersedia, perbaikan kode yang spesifik. Filter itulah yang membuat satu pull request per temuan masih tertangani, bukan banjir.

Temuan (dari laporan anonim)SeverityConfidence
Role federation deployment memberi admin tanpa kondisi subject-claimcriticalhigh
Build role mempercayai OIDC source-control dengan wildcard branch claimhighconfirmed
Instance publik dengan IMDSv1 dan dugaan secret di user datahighmedium
Snapshot database dibagikan ke account di luar organisasimediumconfirmed
Tidak ada WAF di load balancer atau CDN yang menghadap internetlowhigh

Laporan di post memuat 14 temuan anonim; tabel menampilkan lima di antaranya. Perhatikan bahwa confidence punya kolomnya sendiri. Temuan dugaan secret berstatus severity tinggi namun confidence medium, yang memberi tahu reviewer untuk memeriksa sebelum mempercayainya. Pulumi menyebut Neo dijalankan di beberapa estate produksi nyata dan satu run merekonsiliasi ribuan resource terkelola dengan inventory yang ditemukan. Itu klaim vendor sendiri, dan post tidak memberi angka false positive.

Remediation hanya menulis satu hal: usulan perubahan

Dokumentasi Neo menjelaskan apa yang dihasilkan lajur tulis. Neo menawarkan membuka pull request setelah preview, dan tiap PR memuat judul, deskripsi masalah, daftar resource yang diubah, ringkasan output preview, dan tautan balik ke task Neo. Neo menemukan repository sebuah stack lewat git location tag yang ditambahkan ke stack saat dibuat.

Setelah pull request dibuka, tidak ada yang istimewa dari Neo. Jika dikonfigurasi, workflow yang sudah ada berjalan di atasnya, termasuk preview, security scan, policy check, dan test; check yang gagal bisa dikembalikan ke Neo, yang mendorong perbaikan ke PR yang sama; dan setiap perubahan melewati review manusia sebelum merge. Dokumentasi menyebut manfaatnya: review manusia, validasi CI/CD, kolaborasi, serta audit trail dengan rollback.

Itu sebabnya pola ini berlaku di luar Pulumi. Lajur tulis memakai ulang kontrol yang sudah Anda miliki: branch protection, required check, code owner. Agent tidak mendapat hak istimewa baru yang harus dipercaya, hanya penulis baru di tempat yang sudah terbiasa meninjau penulis.

Tombol otonomi yang disediakan Neo

Neo Security adalah ujung ketat dari rentang yang lebih luas. Dokumentasi Neo mendefinisikan tiga task mode yang bisa diubah kapan saja saat task berjalan, serta Plan Mode terpisah yang menunggu persetujuan eksplisit sebelum eksekusi apa pun dimulai. Task mode dan Plan Mode independen, jadi Anda bisa memasangkan Plan Mode dengan Auto mode untuk meninjau pendekatan dulu lalu membiarkan Neo berjalan tanpa berhenti.

AksiReview (default)BalancedAuto
pulumi previewPerlu persetujuanTidak perluTidak perlu
pulumi upPerlu persetujuanPerlu persetujuanTidak perlu
Membuka pull requestPerlu persetujuanTidak perluTidak perlu

Dua pernyataan lain di overview lebih penting daripada tabel. Pertama, Neo tidak pernah punya akses lebih banyak dari Anda, hanya lebih sedikit. Kedua, mode read-only menghilangkan kemampuannya mengubah apa pun, dan pengiriman berbasis PR membuat branch protection rule dan reviewer Anda tetap menjadi gerbang atas apa yang dirilis. Lajur assessment di Neo Security adalah postur read-only itu yang diterapkan secara desain, bukan dipilih per task.

Baca tabel itu sebagai tangga kepercayaan. Review mode menjaga tiga aksi, Balanced satu, Auto tidak ada. Mulai setiap agent baru dari anak tangga teratas dan turun hanya untuk jenis perubahan yang sudah berkali-kali Anda lihat berhasil.

Membangun pemisahan yang sama dengan alat yang sudah ada

Anda tidak butuh Neo untuk menerapkan pola ini pada agent apa pun yang menyentuh infrastruktur. Semua di bawah adalah sketsa saya sendiri, bukan konfigurasi Pulumi. Blok pertama adalah query Context API yang disalin dari post Pulumi: pertanyaan read-only dengan anchor, satu traversal, dan klausa return, bentuk yang akan dijalankan agent assessment sepanjang hari.

Blok kedua adalah gerbang lajur tulis: workflow yang mem-preview setiap perubahan di bawah infra pada pull request, siapa pun penulisnya. Workflow ini tidak punya langkah deploy. Blok permissions memberi job akses baca ke contents dan akses tulis ke pull requests hanya agar bisa mengomentari preview. Input-nya milik action pulumi/actions, yang rilis terbarunya saat saya cek adalah v7.0.0.

# .github/workflows/iac-preview.yml  (my sketch, not Pulumi's config)
# The write lane's gate: every pull request under infra/ gets a preview,
# whoever opened it. There is deliberately no "up" anywhere in this file.
name: iac-preview
on:
  pull_request:
    paths: ["infra/**"]

permissions:
  contents: read         # the job only reads the repo...
  pull-requests: write   # ...and comments the preview on the PR

jobs:
  preview:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - run: npm ci --prefix infra      # install your Pulumi program's deps
      - uses: pulumi/actions@v7
        with:
          command: preview
          stack-name: acme/prod
          work-dir: infra
          comment-on-pr: true
        env:
          PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
          # Cloud credentials for a preview should be read-only too.

Blok ketiga membuat review mengikat. Dokumentasi GitHub menyebut branch protection bisa mewajibkan sejumlah approving review, mewajibkan persetujuan code owner untuk kode yang punya owner, dan mewajibkan status check. Secara default pembatasan itu tidak berlaku untuk admin, makanya sketsa ini memasang enforce_admins. Identitas agent sebaiknya punya akses tulis ke branch dan pull request, tidak pernah hak untuk merge atau bypass.

# .github/CODEOWNERS: the people who must approve changes to sensitive paths
/infra/iam/       @acme/security
/infra/network/   @acme/platform

# Branch protection through the REST API. enforce_admins is the line people
# forget: without it the rules do not apply to anyone with admin permission.
gh api -X PUT repos/acme/infra/branches/main/protection --input - <<'EOF'
{
  "required_status_checks": { "strict": true, "contexts": ["preview"] },
  "enforce_admins": true,
  "required_pull_request_reviews": {
    "required_approving_review_count": 1,
    "require_code_owner_reviews": true,
    "dismiss_stale_reviews": true
  },
  "restrictions": null
}
EOF

Di mana pola ini gagal

Assessment read-only gagal secara diam-diam saat agent tidak bisa melihat source. Pulumi menyebut analisis intent berlaku bila tersedia dan perbaikan kode bergantung pada tersedianya source. Dokumentasi Neo menambahkan bahwa tanpa integrasi VCS Neo tidak bisa melihat IaC di balik sebuah stack dan usulannya tidak sepenuhnya kontekstual. Temuan tentang resource yang dibuat di luar IaC tidak punya file untuk ditambal, sehingga keluarannya berupa temuan, bukan diff.

Patahan kedua adalah VCS. Neo mendukung GitHub, Azure DevOps, GitLab, dan Bitbucket untuk membuka pull request, tetapi integrasi VCS kustom hanya memungkinkan clone dan push, bukan membuka pull request. Code review Neo lebih sempit lagi: hanya di GitHub.com, dan dokumentasi menyatakan Neo tidak memblokir merge. Agent yang mereview hanyalah saran, jadi gerbang yang memblokir harus berupa required check milik Anda sendiri, seperti pada sketsa di atas.

Auto mode dan bypass admin menghapus batas antar lajur. Di Auto mode Neo tidak meminta persetujuan apa pun, termasuk sebelum pulumi up, dan secara default branch protection tidak mengikat admin. Agent ditambah token admin kembali menjadi kredensial deploy. Tetap di Review mode dan terapkan aturan untuk admin.

Terakhir, batas ketersediaannya nyata dan buktinya tipis. Scan ini research preview untuk sekelompok kecil pelanggan yang diundang, dengan scan awal gratis selama preview, dan Pulumi menyebut estate multi-cloud dan multi-account sebagai yang paling cocok. Satu-satunya hasil yang dipublikasikan adalah milik vendor sendiri, tanpa pengukuran independen, jadi anggap desainnya terbukti dan produknya belum.

Yang dilakukan hari Senin

Anda bisa mengadopsi pola ini tanpa ikut preview. Kerjakan berurutan; masing-masing kecil dan masing-masing menutup satu cara bagi agent untuk menulis di tempat yang seharusnya hanya membaca.

  1. Daftar setiap agent atau bot yang memegang kredensial yang bisa mengubah infrastruktur, dan catat mana yang bisa menjalankan apply atau up tanpa manusia.
  2. Beri agent assessment identitas read-only terpisah tanpa izin tulis di mana pun, dan kirim temuannya ke tiket atau laporan.
  3. Arahkan setiap perbaikan yang diusulkan lewat pull request yang menjalankan preview dan policy check sebelum dilihat manusia.
  4. Aktifkan required review, code owner, dan required check, lalu aktifkan pengaturan yang menerapkannya ke admin.
  5. Jika memakai Neo, biarkan task di Review mode, pakai Plan Mode untuk pekerjaan multi-stack, dan naikkan satu jenis perubahan ke Balanced hanya setelah Anda mereview beberapa pull request-nya.

Aturan yang saya bawa pulang: agent infrastruktur boleh membaca semua yang bisa dijadikan bukti, dan hanya boleh menulis usulan ke tempat yang sudah diputuskan oleh manusia dan CI. Neo Security adalah implementasi vendor atas aturan itu, masih preview dan belum diukur siapa pun di luar Pulumi, tetapi aturannya berlaku untuk agent dan alat IaC apa pun.

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Apa itu Pulumi Neo Security?

Pulumi Neo Security adalah agent, dalam research preview untuk pelanggan yang diundang, yang mencari celah yang bisa dieksploitasi di infrastruktur cloud lintas provider seperti AWS, Azure, Google Cloud, dan Kubernetes. Ia menyusun threat model, menguji attack vector terhadap beberapa plane bukti, dan menyimpan temuan yang bertahan. Fase assessment-nya read-only sepenuhnya.

Apakah Pulumi Neo mengubah infrastruktur saya saat melakukan assessment?

Tidak. Pulumi menyatakan fase assessment read-only sepenuhnya, dan remediation adalah satu-satunya langkah yang menulis, hanya berupa usulan perubahan di repository. Setiap temuan yang terbukti menjadi diff, preview, dan pull request untuk ditinjau manusia, dan deployment tetap di workflow yang sudah ada dan ditinjau.

Apa saja task mode di Pulumi Neo?

Review mode adalah default dan membutuhkan persetujuan sebelum pulumi preview, pulumi up, dan membuka pull request. Balanced mode hanya meminta persetujuan sebelum pulumi up, dan Auto mode tidak meminta persetujuan apa pun. Plan Mode terpisah dan menunggu persetujuan eksplisit Anda sebelum eksekusi apa pun dimulai.

Bagaimana cara mencegah AI agent melakukan deploy tanpa review?

Beri agent identitas yang bisa mendorong branch dan membuka pull request tetapi tidak bisa merge atau melewati aturan. Lalu wajibkan approving review, persetujuan code owner, dan status check lewat branch protection, dan terapkan aturan itu juga untuk admin. Jalankan preview di setiap pull request agar reviewer melihat rencananya sebelum apa pun dirilis.

Apa itu Pulumi Context API?

Context API adalah API read-only yang menghubungkan resource yang dikelola Pulumi maupun yang ditemukan, stack, dan relasinya menjadi graph, dan di-query dengan dokumen JSON berisi klausa anchor, traverse, dan return. API ini public preview untuk organisasi Enterprise dan Business Critical, butuh Pulumi CLI v3.243.0 atau lebih baru, dan membatasi respons pada apa yang boleh dibaca pemanggil.