
# Integrasi Pematuhan Berkuasa AI ke dalam Alur Kerja CI CD

Dalam landskap SaaS yang sangat kompetitif hari ini, **kelajuan** dan **kepercayaan** tidak lagi menjadi matlamat yang berasingan—kedua‑duanya mesti wujud bersama. Pasukan pembangunan menghantar kod berbilang kali setiap hari, manakala pasukan keselamatan dan pematuhan masih diminta menghasilkan bukti audit yang lengkap selepas setiap pelepasan utama. Gesekan yang terhasil mewujudkan titik kepotongan, melambatkan tawaran, dan meningkatkan risiko tidak mematuhi peraturan.

Masuklah **Procurize**, platform berkuasa AI yang memusatkan soal selidik keselamatan, dokumen polisi, dan bukti pematuhan. Walaupun ramai pelanggan sudah menggunakan Procurize untuk mengotomasi jawapan kepada audit luaran, satu sempadan baru sedang muncul: **menyematkan automasi itu secara langsung ke dalam saluran CI/CD (Integrasi Berterusan / Penyebaran Berterusan) anda**. Dengan menganggap pematuhan sebagai kod dan memanfaatkan bantuan AI masa‑nyata, organisasi dapat mencapai **jaminan keselamatan berterusan**—sama seperti mereka sudah mencapai penghantaran berterusan.

Artikel ini menerangkan mengapa mengintegrasikan automasi pematuhan ke dalam CI/CD penting, menggariskan pola seni bina yang menjadikannya mungkin, dan menyediakan panduan pelaksanaan langkah demi langkah lengkap dengan kepingan kod. Sama ada anda seorang pemimpin **DevSecOps**, **CISO**, atau pengurus produk, anda akan keluar dengan peta jalan praktikal untuk menjadikan pematuhan bukan sekadar semak selepas pelepasan, tetapi **penghalang sentiasa aktif**.

---

## Mengapa Pematuhan Tradisional Menjadi Halangan

| Pendekatan Tradisional | CI/CD Bersepadu AI |
|------------------------|--------------------|
| Pengisian soal selidik secara manual selepas pelepasan | Jawapan automatik berasaskan polisi dijana semasa waktu bina |
| Kemaskini repositori pusat dilakukan suku tahunan | Kemaskini polisi masa‑nyata disebarkan serta‑merta |
| Pemeriksa meminta bukti minggu selepas pelepasan | Artefak bukti dilampirkan pada setiap artefak bina |
| Pasukan pematuhan berperanan sebagai penjaga pintu, melambatkan penghantaran | Pematuhan menjadi tanggungjawab bersama yang terbenam dalam saluran |

**Titik sakit utama**:

1. **Kelewatan** – Bukti keselamatan sering dihasilkan minggu selepas pelepasan, meningkatkan kebarangkalian regresi.
2. **Kesilapan manusia** – Transkripsi manual jawapan polisi membawa kepada ketidakkonsistenan.
3. **Duplikasi** – Pasukan mengekalkan dokumen polisi berasingan untuk audit dan kegunaan dalaman.
4. **Kurangnya keterlihatan** – Jurutera jarang melihat status pematuhan sehingga permintaan audit muncul.

Dengan memindahkan pematuhan ke dalam alur CI/CD, anda mengurangkan isu‑isu ini, menjadikan pematuhan satu fungsi **ramalan, berasaskan data**.

---

## Konsep Teras: Polisi sebagai Kod, Jawapan Dijana AI, dan Bukti sebagai Artefak

1. **Polisi sebagai Kod** – Simpan polisi keselamatan anda (contoh: **[SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2)**, **[ISO 27001](https://www.iso.org/standard/27001)**, **[GDPR](https://gdpr.eu/)**) dalam repositori terkawal versi (contoh: Git). Setiap polisi diekspresikan dalam format boleh dibaca mesin (YAML/JSON) yang boleh diparse oleh alat.

2. **Jawapan Dijana AI** – Enjin model bahasa besar (LLM) Procurize dapat menyerap definisi polisi dan secara automatik menjana jawapan ringkas sedia audit untuk item soal selidik. AI juga memberikan skor keyakinan, menonjolkan bahagian yang masih memerlukan semakan manusia.

3. **Bukti Artefak** – Sebagai sebahagian daripada binaan, saluran menghasilkan bukti yang tidak boleh diubah (contoh: tangkapan konfigurasi, log akses, laporan ujian). Procurize memautkan artefak ini kepada jawapan yang dijana, mewujudkan **satu sumber kebenaran** untuk pemeriksa.

Ketiga‑tiga lapisan ini bersama‑sama membentuk **gelung maklum balas pematuhan berterusan**:

```
git push → Saluran CI → Penjanaan Jawapan AI → Lampiran Bukti → Kemas kini papan pemuka pematuhan
```

---

## Reka Bentuk Seni Bina

Berikut ialah diagram aras‑ tinggi bagaimana komponen berinteraksi. Diagram ini disampaikan dalam blok kod pseudo‑grafik agar artikel mudah alih.

```mermaid
graph LR
    A[Pembangun menghantar kod] --> B["Pelayan CI (Jenkins/GitHub Actions)"]
    B --> C["Repositori Polisi (Git)"]
    B --> D["Peringkat Bina & Uji"]
    D --> E["Jana Bukti Artefak"]
    C --> F["Enjin Polisi Procurize (API)"]
    E --> G["Perkhidmatan Jawapan AI Procurize (API)"]
    F --> G
    G --> H[Simpan Metadata Pematuhan]
    H --> I[Papan Pemuka Pematuhan / Pemeriksa]
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style I fill:#bbf,stroke:#333,stroke-width:2px
```

**Komponen**:

- **Repositori Polisi** – Repo Git pusat dengan definisi polisi (`policies/`).
- **Pelayan CI** – Menjalankan binaan, ujian, analisis statik, dan memicu langkah pematuhan.
- **Penjana Bukti** – Skrip yang mengeluarkan bukti JSON/YAML (contoh: `evidence/aws-iam.json`).
- **API Procurize** – Dua titik akhir:
  - `/policies` untuk memuat naik atau mengambil set polisi terkini.
  - `/answers` untuk menyerahkan bukti dan menerima jawapan soal selidik yang dijana AI.
- **Simpan Metadata Pematuhan** – DB ringan (contoh: DynamoDB) yang merekod status pematuhan setiap binaan.
- **Papan Pemuka** – UI Procurize sedia ada atau paparan tersuai yang menunjukkan pematuhan per pelepasan.

---

## Panduan Pelaksanaan Langkah‑ demi‑Langkah

### 1. Sediakan Repositori Polisi Anda

Cipta repo Git (atau sub‑modul) yang menyimpan setiap rangka kerja pematuhan sebagai fail YAML.

```yaml
# policies/soc2.yaml
framework: SOC 2
controls:
  - id: CC6.1
    description: "Penyulitan data pada simpanan"
    requirement: "Semua data produksi mesti disulitkan menggunakan AES‑256."
    evidence_type: "Konfigurasi Penyulitan"
  - id: CC6.2
    description: "Penyulitan data dalam transit"
    requirement: "TLS 1.2+ mesti dikuatkuasakan untuk semua komunikasi luar."
    evidence_type: "Konfigurasi TLS"
```

Commit repo dan lindungi cabang `main`; hanya pasukan pematuhan yang boleh menggabungkan perubahan. Pembangun menarik polisi terkini sebagai sebahagian daripada saluran.

### 2. Tambah Peringkat CI untuk Pengumpulan Bukti

Dalam konfigurasi CI anda (contoh menggunakan GitHub Actions), tambahkan pekerjaan yang dijalankan selepas ujian.

```yaml
name: CI
on:
  push:
    branches: [main]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Jalankan ujian unit
        run: npm test

  collect-evidence:
    needs: build-and-test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Eksport snapshot polisi IAM AWS
        run: |
          aws iam get-account-authorization-details > evidence/aws-iam.json
      - name: Eksport konfigurasi TLS
        run: |
          grep -i 'tls' /etc/nginx/nginx.conf > evidence/tls-config.txt
      - name: Muat naik bukti sebagai artefak
        uses: actions/upload-artifact@v3
        with:
          name: compliance-evidence
          path: evidence/
```

Pekerjaan ini menghasilkan folder `evidence/` dengan fail JSON atau teks yang memenuhi `evidence_type` yang dinyatakan dalam polisi.

### 3. Panggil Perkhidmatan Jawapan AI Procurize

Cipta skrip ringkas (`procurize-submit.sh`) yang membaca bukti, memanggil API Procurize, dan menulis jawapan AI ke fail JSON.

```bash
#!/usr/bin/env bash
set -euo pipefail

API_KEY="${PROCURIZE_API_KEY}"
POLICY_REPO="https://github.com/yourorg/compliance-policies.git"
EVIDENCE_DIR="evidence"

# Dapatkan polisi terkini (pilihan jika polisi belum di-checkout)
git clone "$POLICY_REPO" policies_tmp
tar -czf policies.tar.gz -C policies_tmp .

# Panggil API jawapan Procurize
curl -s -X POST "https://api.procurize.com/v1/answers" \
  -H "Authorization: Bearer $API_KEY" \
  -F "policies=@policies.tar.gz" \
  -F "evidence=@${EVIDENCE_DIR}" \
  -o answers.json

# Simpan jawapan sebagai artefak CI untuk peringkat seterusnya
jq . answers.json > compliance/answers-${GITHUB_SHA}.json
```

Tambah peringkat CI baru untuk menjalankan skrip ini dan memuat naik `answers-*.json` sebagai artefak.

```yaml
  generate-answers:
    needs: collect-evidence
    runs-on: ubuntu-latest
    env:
      PROCURIZE_API_KEY: ${{ secrets.PROCURIZE_API_KEY }}
    steps:
      - uses: actions/checkout@v3
      - name: Muat turun artefak bukti
        uses: actions/download-artifact@v3
        with:
          name: compliance-evidence
          path: evidence/
      - name: Jalankan skrip penyerahan Procurize
        run: ./procurize-submit.sh
      - name: Muat naik artefak jawapan
        uses: actions/upload-artifact@v3
        with:
          name: compliance-answers
          path: compliance/
```

### 4. Simpan Metadata Pematuhan

Deploy fungsi Lambda (atau fungsi serverless) yang dipicu pada acara muat naik artefak, mengurai `answers.json`, dan menulis rekod ke DynamoDB:

```python
import json, boto3, os

ddb = boto3.resource('dynamodb')
table = ddb.Table(os.getenv('COMPLIANCE_TABLE'))

def handler(event, context):
    # Anggap acara S3 dengan kunci objek jawapan JSON
    s3 = boto3.client('s3')
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    obj = s3.get_object(Bucket=bucket, Key=key)
    answers = json.loads(obj['Body'].read())

    record = {
        'build_id': answers['metadata']['build_id'],
        'status': 'COMPLIANT' if answers['overall_confidence'] > 0.9 else 'REVIEW_NEEDED',
        'timestamp': answers['metadata']['timestamp'],
        'summary': answers['summary']
    }
    table.put_item(Item=record)
    return {'statusCode': 200}
```

Sekarang setiap binaan mempunyai entri pematuhan yang boleh dilihat pada papan pemuka Procurize atau UI tersuai anda.

### 5. Terapkan Gerbang Pematuhan (Pilihan)

Jika anda mahu saluran **gagal** apabila keyakinan rendah, tambah peringkat akhir yang menanya DynamoDB dan menghentikan saluran jika status bukan `COMPLIANT`.

```yaml
  compliance-gate:
    needs: generate-answers
    runs-on: ubuntu-latest
    steps:
      - name: Periksa status pematuhan
        run: |
          STATUS=$(aws dynamodb get-item \
            --table-name ${{ secrets.COMPLIANCE_TABLE }} \
            --key '{"build_id": {"S": "${{ github.sha }}"}}' \
            --query 'Item.status.S')
          if [[ "$STATUS" != "COMPLIANT" ]]; then
            echo "Gerbang pematuhan gagal: $STATUS"
            exit 1
          fi
```

Apabila gerbang lulus, artefak diteruskan ke persekitaran produksi. Jika gagal, pembangun menerima maklum balas segera dan dapat menutup jurang polisi sebelum pelepasan.

---

## Manfaat yang Diperoleh

| Metrik | Proses Tradisional | Proses CI/CD Terintegrasi |
|--------|---------------------|---------------------------|
| Purata masa menjawab soal selidik | 10–14 hari | 2–4 jam |
| Usaha manual (jam orang) per pelepasan | 12–20 jam | ≤ 2 jam (selalunya semakan) |
| Keseluruhan bukti audit | 70‑80 % | 95‑100 % |
| Kekerapan halangan pelepasan berkaitan pematuhan | 1 per sprint | < 0.1 per sprint |

Selain kelajuan, integrasi **mengurangkan risiko** dengan memastikan setiap komit menilai terhadap set polisi terkini, dan **meningkatkan kebolehudit** melalui bukti yang tidak boleh diubah yang dipaut kepada setiap binaan.

---

## Halangan Umum & Cara Mengatasinya

1. **Cache Polisi Lapuk** – Pastikan pekerjaan CI sentiasa menarik repositori polisi terkini. Gunakan fail kunci atau checksum untuk mengesahkan kesegaran.
2. **Ketergantungan Berlebihan pada AI** – Konfigurasikan perkhidmatan AI supaya menandakan sebarang jawapan di bawah ambang keyakinan (contoh: 85 %). Penyemak manusia mesti menutup jurang tersebut.
3. **Ledakan Saiz Bukti** – Simpan bukti dalam arkib mampat dan buang artefak lama mengikut tempoh pengekalan yang ditetapkan oleh rangka kerja pematuhan anda.
4. **Keselamatan Kunci API** – Simpan kredensial Procurize dalam stor rahsia CI (contoh: GitHub Secrets, Azure Key Vault). Putar kunci secara berkala.

---

## Memperluas Corak: Dari CI ke Tadbir Urus CD

Setelah pematuhan dimasukkan ke dalam **CI**, anda boleh meluaskan penghalang yang sama ke dalam **CD** (penyebaran) dan pemantauan masa‑nyata:

- **Pengesahan polisi semasa penyebaran** – Sebelum carta Helm dikeluarkan, jalankan semakan polisi‑as‑code yang mengesahkan RBAC Kubernetes, polisi rangkaian, dan pengurusan rahsia berbanding definisi YAML yang sama digunakan semasa binaan.
- **Strim bukti masa‑nyata** – Gunakan agen (contoh: Falco, OpenTelemetry) untuk menstrim peristiwa keselamatan secara berterusan ke dalam simpanan bukti Procurize, menutup gelung pematuhan **berterusan**.
- **Portal pematuhan layan diri** – Dedahkan paparan hanya-baca papan pemuka pematuhan kepada pelanggan, menjadikan kedudukan pematuhan anda satu kelebihan kompetitif.

---

## TL;DR

- Simpan semua polisi keselamatan dalam Git sebagai **polisi‑as‑code** (YAML/JSON).  
- Tambah peringkat CI yang **mengumpul bukti tidak boleh diubah** dan hantar kepada **API jawapan AI Procurize**.  
- Simpan jawapan AI dan skor keyakinan dalam stor metadata.  
- Gunakan **gerbang pematuhan** untuk menyekat pelepasan yang tidak mencapai ambang keyakinan.  
- Dapatkan kebolehan audit hampir‑semasa, kurangkan usaha manual, dan percepatkan masa‑ke‑pasaran.

Dengan mengintegrasikan platform AI‑berkuasa Procurize ke dalam alur kerja CI/CD anda, anda mengubah pematuhan daripada titik semak berkala menjadi **penjaga berterusan yang diotomasi**—sama seperti DevOps memperlakukan ujian, keselamatan, dan pengawasan.

---

## Lihat Juga

- [Integrasi NIST CSF dengan Saluran CI/CD (NIST SP 800‑53)](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final)  
- [GitHub Actions untuk Rantaian Perisian Selamat](https://github.com/github/securitylab)  
- [Panduan Polisi Azure sebagai Kod](https://learn.microsoft.com/azure/governance/policy/)