Tradicionalno, sigurnost je često bila naknadna misao u životnom ciklusu razvoja softvera, implementirana na kraju procesa, što je dovodilo do kašnjenja i skupih popravki. DevSecOps menja ovu paradigmu integrišući sigurnosne prakse i razmatranja u svaku fazu DevOps pipeline-a, od planiranja i razvoja, preko testiranja i deploymenta, do monitoringa u produkciji. Cilj DevSecOps-a je da se sigurnost tretira kao zajednička odgovornost celog tima, a ne samo izolovanog sigurnosnog tima. Za DevOps inženjera, razumevanje DevSecOps principa i alata je ključno za izgradnju sigurnih i otpornih aplikacija. Ovaj tutorijal će vas provesti kroz ključne koncepte DevSecOps-a, alate i najbolje prakse.
DevSecOps se zasniva na nekoliko ključnih principa:
Integracija sigurnosnih alata u CI/CD pipeline je ključna za automatizaciju DevSecOps-a. Evo nekih uobičajenih tipova sigurnosnih testova:
SAST alati analiziraju izvorni kod, bajtkod ili binarni kod aplikacije bez njenog pokretanja. Cilj je pronaći ranjivosti kao što su SQL Injection, Cross-Site Scripting (XSS), nebezbedna upotreba kriptografije, itd.
DAST alati testiraju aplikaciju dok je pokrenuta, simulirajući napade na nju. Oni traže ranjivosti koje se manifestuju u runtime okruženju, kao što su problemi sa autentifikacijom, sesijama, logičke greške.
SCA alati identifikuju open-source komponente (biblioteke, frejmvorke) koje se koriste u aplikaciji i proveravaju poznate ranjivosti u tim komponentama. Većina modernih aplikacija koristi veliki broj open-source zavisnosti, koje mogu sadržati sigurnosne propuste.
Ovo uključuje skeniranje ranjivosti servera, mrežnih uređaja, baza podataka i cloud resursa.
GitLab nudi ugrađene mogućnosti za DevSecOps. Evo primera .gitlab-ci.yml koji uključuje SAST, DAST i Dependency Scanning:
include:
- template: Security/SAST.gitlab-ci.yml
- template: Security/DAST.gitlab-ci.yml
- template: Security/Dependency-Scanning.gitlab-ci.yml
stages:
- build
- test
- deploy
- dast
build_job:
stage: build
script:
- echo "Building application..."
test_job:
stage: test
script:
- echo "Running unit tests..."
# DAST zahteva pokrenutu aplikaciju, pa se pokreće nakon deploya
dast_job:
stage: dast
variables:
DAST_WEBSITE: http://your-deployed-app.com # Promenite URLOvaj primer pokazuje kako se lako mogu integrisati sigurnosni skenovi u GitLab CI/CD pipeline. Rezultati skenova će biti prikazani direktno u GitLab UI.
Tajne (secrets) su osetljive informacije kao što su lozinke, API ključevi, sertifikati i tokeni. Sigurno upravljanje tajnama je kritično za bezbednost aplikacija.
Secret za skladištenje osetljivih podataka. Iako su base64 kodirani, nisu enkriptovani po defaultu i zahtevaju dodatne mere sigurnosti (npr. eksterni secret store ili enkripcija na nivou etcd-a).Kreiranje tajne u AWS Secrets Manager-u:
my-app/database-credentials).Pristup tajni iz aplikacije (Python primer):
import boto3
import json
def get_secret():
secret_name = "my-app/database-credentials"
region_name = "us-east-1" # Promenite region
# Kreiranje Secrets Manager klijenta
session = boto3.session.Session()
client = session.client(
service_name=\'secretsmanager\',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
except Exception as e:
raise e
# Tajna je vraćena kao string, potrebno je parsirati je kao JSON
if \'SecretString\' in get_secret_value_response:
secret = get_secret_value_response[\'SecretString\']
return json.loads(secret)
else:
# Ako je tajna binarna, dekodirajte je
return get_secret_value_response[\'SecretBinary\']
if __name__ == "__main__":
db_credentials = get_secret()
print(f"Korisničko ime: {db_credentials[\'username\']}")
print(f"Lozinka: {db_credentials[\'password\']}")Kontejneri i Kubernetes donose nove sigurnosne izazove, ali i moćne mehanizme za njihovo rešavanje.
Ova Network Policy dozvoljava samo saobraćaj sa Podova sa labelom app: frontend da pristupi Podovima sa labelom app: backend na portu 80.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80DevSecOps je neophodan pristup za izgradnju sigurnih i otpornih softverskih sistema u modernom DevOps okruženju. Integracijom sigurnosti u svaku fazu životnog ciklusa softvera, automatizacijom sigurnosnih provera i podsticanjem kulture sigurnosti, timovi mogu značajno smanjiti rizik od ranjivosti i incidenata. Kao DevOps inženjer, vaša uloga u implementaciji DevSecOps principa i korišćenju odgovarajućih alata je ključna za uspeh vaše organizacije. Kontinuirano učenje o novim pretnjama, alatima i najboljim praksama u oblasti sigurnosti je od vitalnog značaja.
Autor: Manus AI Datum: 27. jul 2025.