Skip to content

kimookoii/devsecops-week9

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

DevSecOps Week 9

DevSecOps Monitoring & Security Simulation

Docker Elastic Prometheus Grafana DevSecOps


Deskripsi Proyek

Repository ini berisi implementasi centralized logging dan system monitoring menggunakan ELK Stack serta Prometheus & Grafana.
Selain deployment monitoring, proyek ini juga mencakup simulasi skenario keamanan untuk menganalisis indikasi ancaman dan dampaknya terhadap sistem.


Arsitektur Monitoring

flowchart LR
    User -->|HTTP Request| FlaskApp
    FlaskApp -->|Application Logs| LogFile
    LogFile --> Filebeat
    Filebeat --> Elasticsearch
    Elasticsearch --> Kibana

    NodeExporter --> Prometheus
    Prometheus --> Grafana
Loading

Teknologi yang Digunakan

  • Docker & Docker Compose
  • Elasticsearch 8.11
  • Kibana 8.11
  • Flask (Python)
  • Prometheus
  • Node Exporter
  • Grafana

Struktur Direktori

devsecops-monitoring/
├── app/
│   └── app.log
│   └── app.py
├── Dockerfile
├── docker-compose.yml
└── prometheus.yml

Deploy Infrastruktur Monitoring

1. Jalankan Seluruh Service

docker compose up -d

2. Akses Service

Login Grafana:

username: admin
password: admin

Aplikasi Simulasi Log

File app.py digunakan untuk menghasilkan log aplikasi.

import logging
import os
from flask import Flask

app = Flask(__name__)

LOG_DIR = "/app"
LOG_FILE = "/app/app.log"

# pastikan folder log ada
os.makedirs(LOG_DIR, exist_ok=True)

logging.basicConfig(
    filename=LOG_FILE,
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)

@app.route("/")
def home():
    app.logger.info("User accessed home page")
    return "Hello DevSecOps"

@app.route("/login")
def login():
    app.logger.warning("Failed login attempt")
    return "Login failed"

@app.route("/error")
def error():
    app.logger.error("Application error occurred")
    return 1 / 0

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

Praktik 1 – Centralized Logging (ELK)

Kirim Log Aplikasi ke ELK

Log aplikasi Flask disimpan ke file app.log dan dikirim ke Elasticsearch menggunakan Filebeat (standalone).

Analisis di Kibana

Gunakan Kibana Discover untuk mencari log:

message : "Failed login attempt"
log.level : "error"

Praktik 2 – Metrics Monitoring (Prometheus & Grafana)

Tambahkan Data Source Prometheus di Grafana

URL:

http://prometheus:9090

Import Dashboard

Dashboard ID:

1860

Dashboard ini digunakan untuk memantau:

  • CPU Usage
  • Memory Usage
  • Load Average

Simulasi Skenario Keamanan

1. Error Aplikasi

Trigger error:

Invoke-WebRequest http://localhost:5000/error

Hasil:

  • Log level ERROR tercatat
  • Error terdeteksi di Kibana

2. Login Gagal Berulang (Brute Force)

Simulasi:

for ($i=1; $i -le 30; $i++) {
  Invoke-WebRequest http://localhost:5000/login -UseBasicParsing
}

Indikasi:

  • Banyak log login gagal dalam waktu singkat
  • Pola brute force attack

3. Beban Sistem Tinggi (CPU)

Simulasi CPU tinggi:

1..8 | ForEach-Object {
  Start-Job { while ($true) { } }
}

Hentikan simulasi:

Get-Job | Remove-Job -Force

Hasil:

  • Lonjakan CPU terlihat di Grafana
  • Sistem mengalami resource pressure

Analisis Keamanan

Indikasi Ancaman

  • Error aplikasi menunjukkan potensi bug atau eksploitasi
  • Login gagal berulang mengindikasikan brute force attack
  • Lonjakan CPU menunjukkan potensi denial of service

Dampak ke Sistem

  • Penurunan performa aplikasi
  • Risiko account takeover
  • Potensi downtime akibat resource exhaustion

Kesimpulan

Implementasi monitoring dengan ELK Stack serta Prometheus dan Grafana memungkinkan deteksi dini terhadap ancaman keamanan. Dengan melakukan simulasi error aplikasi, brute force login, dan beban sistem tinggi, sistem monitoring mampu memberikan visibilitas terhadap indikasi serangan dan dampaknya. Monitoring yang baik menjadi fondasi penting dalam penerapan DevSecOps untuk menjaga keamanan dan ketersediaan sistem.