Mengumpulkan log Snipe-IT

Didukung di:

Dokumen ini menjelaskan cara menyerap log Snipe-IT ke Google Security Operations menggunakan Amazon S3.

Sebelum memulai

Pastikan Anda memenuhi prasyarat berikut:

  • Instance Google SecOps.
  • Akses istimewa ke tenant Snipe-IT.
  • Akses istimewa ke AWS (S3, Identity and Access Management (IAM), Lambda, EventBridge).

Kumpulkan prasyarat Snipe-IT (token API dan URL dasar)

  1. Login ke Snipe-IT.
  2. Buka menu pengguna Anda (avatar di kanan atas) dan klik Kelola kunci API.
  3. Klik Create New API Key:
    • Nama/Label: Masukkan label deskriptif (misalnya, Google SecOps export).
    • Klik Generate.
  4. Salin token API (hanya akan ditampilkan satu kali). Simpan dengan aman.
  5. Tentukan URL dasar API Anda, biasanya:
    • https://<your-domain>/api/v1
    • Contoh: https://snipeit.example.com/api/v1

Mengonfigurasi bucket AWS S3 dan IAM untuk Google SecOps

  1. Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
  2. Simpan Name dan Region bucket untuk referensi di masa mendatang (misalnya, snipe-it-logs).
  3. Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
  4. Pilih Pengguna yang dibuat.
  5. Pilih tab Kredensial keamanan.
  6. Klik Create Access Key di bagian Access Keys.
  7. Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
  8. Klik Berikutnya.
  9. Opsional: Tambahkan tag deskripsi.
  10. Klik Create access key.
  11. Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk referensi di masa mendatang.
  12. Klik Selesai.
  13. Pilih tab Permissions.
  14. Klik Tambahkan izin di bagian Kebijakan izin.
  15. Pilih Tambahkan izin.
  16. Pilih Lampirkan kebijakan secara langsung.
  17. Cari kebijakan AmazonS3FullAccess.
  18. Pilih kebijakan.
  19. Klik Berikutnya.
  20. Klik Add permissions.

Mengonfigurasi kebijakan dan peran IAM untuk upload S3

  1. Di konsol AWS, buka IAM > Policies.
  2. Klik Buat kebijakan > tab JSON.
  3. Salin dan tempel kebijakan berikut.
  4. Policy JSON (ganti snipe-it-logs jika Anda memasukkan nama bucket yang berbeda):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::snipe-it-logs/*"
        },
        {
          "Sid": "AllowGetStateObject",
          "Effect": "Allow",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::snipe-it-logs/snipeit/state.json"
        }
      ]
    }
    
  5. Klik Berikutnya > Buat kebijakan.

  6. Buka IAM > Roles > Create role > AWS service > Lambda.

  7. Lampirkan kebijakan yang baru dibuat.

  8. Beri nama peran SnipeITToS3Role, lalu klik Buat peran.

Buat fungsi Lambda

  1. Di Konsol AWS, buka Lambda > Functions > Create function.
  2. Klik Buat dari awal.
  3. Berikan detail konfigurasi berikut:

    Setelan Nilai
    Nama snipeit_assets_to_s3
    Runtime Python 3.13
    Arsitektur x86_64
    Peran eksekusi SnipeITToS3Role
  4. Setelah fungsi dibuat, buka tab Code, hapus stub, dan tempelkan kode berikut (snipeit_assets_to_s3.py).

    #!/usr/bin/env python3
    # Lambda: Pull Snipe-IT hardware (assets) via REST API and write raw JSON pages to S3 (no transform)
    
    import os, json, time, urllib.parse
    from urllib.request import Request, urlopen
    import boto3
    
    BASE = os.environ["SNIPE_BASE_URL"].rstrip("/")  # e.g. https://snipeit.example.com/api/v1
    TOKEN = os.environ["SNIPE_API_TOKEN"]
    BUCKET = os.environ["S3_BUCKET"]
    PREFIX = os.environ.get("S3_PREFIX", "snipeit/assets/")
    PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "500"))  # Snipe-IT max 500 per request
    MAX_PAGES = int(os.environ.get("MAX_PAGES", "200"))
    
    s3 = boto3.client("s3")
    
    def _headers():
        return {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"}
    
    def fetch_page(offset: int) -> dict:
        params = {"limit": PAGE_SIZE, "offset": offset, "sort": "id", "order": "asc"}
        qs = urllib.parse.urlencode(params)
        url = f"{BASE}/hardware?{qs}"
        req = Request(url, method="GET", headers=_headers())
        with urlopen(req, timeout=60) as r:
            return json.loads(r.read().decode("utf-8"))
    
    def write_page(payload: dict, ts: float, page: int) -> str:
        key = f"{PREFIX}/{time.strftime('%Y/%m/%d', time.gmtime(ts))}/snipeit-hardware-{page:05d}.json"
        body = json.dumps(payload, separators=(",", ":")).encode("utf-8")
        s3.put_object(Bucket=BUCKET, Key=key, Body=body, ContentType="application/json")
        return key
    
    def lambda_handler(event=None, context=None):
        ts = time.time()
        offset = 0
        page = 0
        total = 0
    
        while page < MAX_PAGES:
            data = fetch_page(offset)
            rows = data.get("rows") or data.get("data") or []
            write_page(data, ts, page)
            total += len(rows)
            if len(rows) < PAGE_SIZE:
                break
            page += 1
            offset += PAGE_SIZE
    
        return {"ok": True, "pages": page + 1, "objects": total}
    
    if __name__ == "__main__":
        print(lambda_handler())
    
  5. Buka Configuration > Environment variables.

  6. Klik Edit > Tambahkan variabel lingkungan baru.

  7. Masukkan variabel lingkungan yang diberikan dalam tabel berikut dengan mengganti nilai contoh dengan nilai Anda.

    Variabel lingkungan

    Kunci Nilai contoh
    S3_BUCKET snipe-it-logs
    S3_PREFIX snipeit/assets/
    SNIPE_BASE_URL https://snipeit.example.com/api/v1
    SNIPE_API_TOKEN <your-api-token>
    PAGE_SIZE 500
    MAX_PAGES 200
  8. Setelah fungsi dibuat, tetap buka halamannya (atau buka Lambda > Functions > your-function).

  9. Pilih tab Configuration

  10. Di panel Konfigurasi umum, klik Edit.

  11. Ubah Waktu Tunggu menjadi 5 menit (300 detik), lalu klik Simpan.

Membuat jadwal EventBridge

  1. Buka Amazon EventBridge > Scheduler > Create schedule.
  2. Berikan detail konfigurasi berikut:
    • Jadwal berulang: Tarif (1 hour).
    • Target: Fungsi Lambda Anda snipeit_assets_to_s3.
    • Name: snipeit_assets_to_s3-1h.
  3. Klik Buat jadwal.

(Opsional) Buat pengguna dan kunci IAM hanya baca untuk Google SecOps

  1. Buka Konsol AWS > IAM > Pengguna.
  2. Klik Add users.
  3. Berikan detail konfigurasi berikut:
    • Pengguna: Masukkan secops-reader.
    • Jenis akses: Pilih Kunci akses â€" Akses terprogram.
  4. Klik Buat pengguna.
  5. Lampirkan kebijakan baca minimal (kustom): Pengguna > secops-reader > Izin > Tambahkan izin > Lampirkan kebijakan secara langsung > Buat kebijakan.
  6. JSON:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::snipe-it-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::snipe-it-logs"
        }
      ]
    }
    
  7. Nama = secops-reader-policy.

  8. Klik Buat kebijakan > cari/pilih > Berikutnya > Tambahkan izin.

  9. Buat kunci akses untuk secops-reader: Kredensial keamanan > Kunci akses.

  10. Klik Create access key.

  11. Download .CSV. (Anda akan menempelkan nilai ini ke feed).

Mengonfigurasi feed di Google SecOps untuk menyerap log Snipe-IT

  1. Buka Setelan SIEM > Feed.
  2. Klik + Tambahkan Feed Baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Snipe-IT logs).
  4. Pilih Amazon S3 V2 sebagai Jenis sumber.
  5. Pilih Snipe-IT sebagai Jenis log.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:
    • URI S3: s3://snipe-it-logs/snipeit/assets/
    • Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda.
    • Usia File Maksimum: Menyertakan file yang diubah dalam jumlah hari terakhir. Defaultnya adalah 180 hari.
    • ID Kunci Akses: Kunci akses pengguna dengan akses ke bucket S3.
    • Kunci Akses Rahasia: Kunci rahasia pengguna dengan akses ke bucket S3.
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang diterapkan ke peristiwa dari feed ini.
  8. Klik Berikutnya.
  9. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.