Docker-ის უსაფრთხოება

ისწავლეთ Docker-ის უსაფრთხოების საუკეთესო პრაქტიკების, კონფიგურაციებისა და ინსტრუმენტების შესახებ

Docker-ის უსაფრთხოება

უსაფრთხოება კრიტიკულად მნიშვნელოვანია production-ში კონტეინერების გაშვებისას. კონტეინერების უსაფრთხოება მოითხოვს კომპლექსურ მიდგომას, რომელიც ეხება მოწყვლადობებს ყველა დონეზე - ჰოსტის სისტემიდან და კონტეინერის runtime-იდან აპლიკაციის კოდამდე და ქსელურ კომუნიკაციებამდე. ეს სახელმძღვანელო მოიცავს Docker გარემოსთვის აუცილებელ უსაფრთხოების პრაქტიკებსა და კონფიგურაციებს, რათა დაგეხმაროთ უსაფრთხო კონტეინერიზებული აპლიკაციების შექმნასა და შენარჩუნებაში.

უსაფრთხოების საფუძვლები

იზოლაცია

  • პროცესების იზოლაცია: კონტეინერები იზიარებენ ჰოსტის ბირთვს, მაგრამ მუშაობენ იზოლირებულ პროცესების სივრცეებში
  • ქსელის namespace-ის გამოყოფა: თითოეულ კონტეინერს აქვს საკუთარი ქსელის სტეკი
  • რესურსების შეზღუდვები: CPU-ს, მეხსიერების და სხვა რესურსების შეზღუდვა DoS-ის თავიდან ასაცილებლად
  • ფაილური სისტემის იზოლაცია: კონტეინერ-სპეციფიური ფაილური სისტემა ჰოსტზე კონტროლირებადი წვდომით
  • მომხმარებლის namespace-ის მიბმა: კონტეინერის მომხმარებლების მიბმა არა-პრივილეგირებულ ჰოსტის მომხმარებლებზე
  • Control groups (cgroups): ბირთვის ფუნქცია, რომელიც ზღუდავს და იზოლირებს რესურსების გამოყენებას
  • Namespaces: უზრუნველყოფს იზოლირებულ სამუშაო სივრცეს თითოეული კონტეინერისთვის (PID, NET, MNT, UTS, IPC)

წვდომის კონტროლი

  • მომხმარებლის უფლებები: მინიმალური პრივილეგიების პრინციპი კონტეინერის პროცესებისთვის
  • ჯგუფების მართვა: Linux ჯგუფების სწორი გამოყენება წვდომის კონტროლისთვის
  • როლზე დაფუძნებული წვდომის კონტროლი (RBAC): განსაზღვრეთ, ვის შეუძლია Docker რესურსებზე მოქმედებების შესრულება
  • API-ზე წვდომის შეზღუდვები: TLS ავთენტიფიკაცია და ავტორიზაცია Docker daemon-ისთვის
  • Registry-ის ავთენტიფიკაცია: უსაფრთხო წვდომა image registry-ებზე ავთენტიფიკაციით
  • საიდუმლოებების მართვა: რწმუნებათა სიგელებისა და მგრძნობიარე ინფორმაციის უსაფრთხო დამუშავება
  • კონტეინერის მომხმარებლის შეზღუდვები: კონტეინერების გაშვება არა-root მომხმარებლებით

რესურსების კონტროლი

  • CPU-ს ლიმიტები: კონტეინერების მიერ გადაჭარბებული CPU-ს მოხმარების თავიდან აცილება
  • მეხსიერების შეზღუდვები: მეხსიერების გამოყენების შეზღუდვა OOM მდგომარეობების თავიდან ასაცილებლად
  • საცავის კვოტები: დისკის გამოყენების კონტროლი ფაილური სისტემის შევსების თავიდან ასაცილებლად
  • ქსელის სიჩქარის შეზღუდვა: გამტარუნარიანობის ბოროტად გამოყენების თავიდან ასაცილებლად
  • პროცესების შეზღუდვები: პროცესების შექმნისა და შესაძლებლობების შეზღუდვა
  • Syscall-ების ფილტრაცია: ხელმისაწვდომი სისტემური გამოძახებების შეზღუდვა seccomp-ით
  • შესაძლებლობები: პრივილეგირებული ოპერაციების დეტალური კონტროლი

Docker-ის უსაფრთხოების საუკეთესო პრაქტიკები

Image-ის უსაფრთხოება

Image-ის უსაფრთხოება კონტეინერის უსაფრთხოების საფუძველია - მოწყვლადმა საბაზისო image-მა შეიძლება საფრთხე შეუქმნას თქვენს მთელ აპლიკაციას.

# image-ის სკანირება მოწყვლადობებზე Snyk ინტეგრაციით
docker scan my-image:latest

# სკანირება Trivy-ით (პოპულარული ღია კოდის სკანერი)
trivy image my-image:latest

# გამოიყენეთ კონკრეტული image-ის ვერსიები 'latest' თეგის ნაცვლად
docker pull nginx:1.21.6-alpine

# გამოიყენეთ მინიმალური საბაზისო image-ები თავდასხმის ზედაპირის შესამცირებლად
docker pull alpine:3.15.0

# image-ების ხელმოწერა და ვერიფიკაცია Docker Content Trust-ით
export DOCKER_CONTENT_TRUST=1
docker trust sign my-image:latest
docker trust inspect my-image:latest

# Verify image integrity with digest
docker pull nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767

უსაფრთხო image-ების საუკეთესო პრაქტიკები:

  1. გამოიყენეთ ოფიციალური ან დამოწმებული image-ები, როდესაც შესაძლებელია
  2. განაახლეთ საბაზისო image-ები უსაფრთხოების პატჩებით
  3. ააგეთ მინიმალური image-ებიდან, როგორიცაა Alpine ან distroless
  4. მიაბით კონკრეტული ვერსიები დაიჯესტებით უცვლელობისთვის
  5. დანერგეთ მოწყვლადობების სკანირება CI/CD მილსადენებში
  6. წაშალეთ არასაჭირო ინსტრუმენტები production image-ებიდან
  7. დააყენეთ image-ების ხელმოწერა მიწოდების ჯაჭვის უსაფრთხოებისთვის
  8. გამოიყენეთ მრავალეტაპიანი build-ები საბოლოო image-ის ზომის შესამცირებლად

კონტეინერის უსაფრთხოება

უსაფრთხოების კონფიგურაციები

უსაფრთხო კონტეინერის Runtime

შემდეგი Docker Compose კონფიგურაცია აჩვენებს უსაფრთხოების ყოვლისმომცველ გამკაცრებას:

version: '3.8'
services:
  secure-app:
    image: my-app:latest
    # პრივილეგიების ესკალაციის თავიდან აცილება
    security_opt:
      - no-new-privileges:true
      # მორგებული seccomp პროფილის გამოყენება syscall-ების შესაზღუდად
      - seccomp:security-profile.json
      # AppArmor პროფილის ჩართვა (Linux)
      - apparmor=docker-default
    # root ფაილური სისტემის მხოლოდ წაკითხვადად ქცევა
    read_only: true
    # ჩაწერადი დროებითი საცავის უზრუნველყოფა
    tmpfs:
      - /tmp:size=64M,mode=1777
      - /var/run:size=32M
      - /var/cache:size=32M
    # გაშვება არა-root მომხმარებლით
    user: non-root-user
    # ყველა შესაძლებლობის მოშორება ნაგულისხმევად
    cap_drop:
      - ALL
    # მხოლოდ აუცილებელი შესაძლებლობების დამატება
    cap_add:
      - NET_BIND_SERVICE  # 1024-ზე დაბალ პორტებზე მიბმის ნებართვა
    # რესურსების ლიმიტების დაყენება
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 256M
        reservations:
          memory: 128M
    # Health check მონიტორინგისთვის
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    # ლოგირების კონფიგურაცია
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    # გარემოს ცვლადების დაყენება
    environment:
      - NODE_ENV=production
    # ქსელზე წვდომის კონტროლი
    networks:
      - internal
    # სათანადო გადატვირთვის პოლიტიკა
    restart: unless-stopped

networks:
  internal:
    # შიდა ქსელი პირდაპირი გარე წვდომის გარეშე
    internal: true

თითოეულ ამ უსაფრთხოების კონფიგურაციას კონკრეტული დანიშნულება აქვს:

  • no-new-privileges ხელს უშლის პრივილეგიების ესკალაციის შეტევებს
  • Seccomp პროფილები ზღუდავს ხელმისაწვდომ სისტემურ გამოძახებებს
  • მხოლოდ წაკითხვადი ფაილური სისტემა ხელს უშლის მავნე მოდიფიკაციებს
  • არა-root მომხმარებლად გაშვება ამცირებს შეჭრისგან პოტენციურ ზიანს
  • შესაძლებლობების მოშორება ახორციელებს მინიმალური პრივილეგიების პრინციპს
  • რესურსების ლიმიტები ხელს უშლის DoS შეტევებს
  • Health check-ები საშუალებას იძლევა კომპრომეტირებული კონტეინერების ავტომატურ გამოვლენას

ქსელის უსაფრთხოება

ქსელის იზოლაცია

  • გამოიყენეთ მორგებული ქსელები კონტეინერების კომუნიკაციის იზოლირებისთვის
    # იზოლირებული ქსელის შექმნა
    docker network create --driver bridge isolated_network
    
    # კონტეინერის მიერთება იზოლირებულ ქსელთან
    docker run --network isolated_network my-app
    
  • შეზღუდეთ გარე წვდომა შიდა ქსელებით
    # docker-compose.yml-ში
    networks:
      backend:
        internal: true  # გამავალი კავშირის გარეშე
    
  • ჩართეთ TLS დაშიფრული კომუნიკაციებისთვის
    # TLS სერტიფიკატების გენერირება
    openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
    
  • დანერგეთ firewall-ები ჰოსტისა და კონტეინერის დონეზე
    # ჰოსტის firewall-ის კონფიგურაცია (ufw მაგალითი)
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw deny 8080/tcp
    
  • დააკვირდეთ ტრაფიკს ქსელის მონიტორინგის ინსტრუმენტებით
    # კონტეინერის ტრაფიკის დაჭერა
    docker run --net=container:target_container nicolaka/netshoot tcpdump -i eth0
    

წვდომის კონტროლი

  • პორტების მიბმის შეზღუდვები - გამოააშკარავეთ მხოლოდ აუცილებელი პორტები
    # მიბმა მხოლოდ კონკრეტულ ინტერფეისზე
    docker run -p 127.0.0.1:8080:80 nginx
    
  • სერვის-სპეციფიური ქსელები - გამოყავით frontend/backend
    services:
      frontend:
        networks: [frontend]
      backend:
        networks: [backend]
      database:
        networks: [backend]
    
  • ქსელის სეგმენტაცია მრავალი ქსელით
    docker network create frontend
    docker network create backend
    docker network create database
    
  • ტრაფიკის დაშიფვრა TLS-ით და VPN-ებით
    # Docker Swarm overlay ქსელი დაშიფვრით
    networks:
      secure_overlay:
        driver: overlay
        driver_opts:
          encrypted: "true"
    
  • Load balancer-ის უსაფრთხოება - TLS შეწყვეტა და WAF
    # მაგალითი Traefik-ით (უსაფრთხო ჰედერები)
    labels:
      - "traefik.http.middlewares.secure-headers.headers.sslRedirect=true"
      - "traefik.http.middlewares.secure-headers.headers.stsSeconds=31536000"
    

Docker Daemon-ის უსაფრთხოება

Docker daemon-ის დაცვა კრიტიკულია, რადგან ის მუშაობს root პრივილეგიებით და მართავს ყველა კონტეინერს.

# CA-სა და სერტიფიკატების გენერირება Docker daemon TLS-ისთვის
mkdir -p ~/.docker/tls
cd ~/.docker/tls

# სერტიფიკატის ავტორიტეტის შექმნა
openssl genrsa -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem

# სერვერის სერტიფიკატის შექმნა
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=docker-host" -new -key server-key.pem -out server.csr
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem

# კლიენტის სერტიფიკატის შექმნა
openssl genrsa -out key.pem 4096
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

# TLS-ის კონფიგურაცია Docker daemon-ისთვის
sudo dockerd \
  --tlsverify \
  --tlscacert=ca.pem \
  --tlscert=server-cert.pem \
  --tlskey=server-key.pem \
  -H=0.0.0.0:2376 \
  -H unix:///var/run/docker.sock

# Docker daemon-ის კონფიგურაციის განახლება daemon.json-ში
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "tls": true,
  "tlscacert": "/path/to/ca.pem",
  "tlscert": "/path/to/server-cert.pem",
  "tlskey": "/path/to/server-key.pem",
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
  "log-level": "info",
  "icc": false,
  "no-new-privileges": true,
  "userland-proxy": false,
  "live-restore": true,
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    }
  }
}
EOF

# Docker daemon-ის გადატვირთვა
sudo systemctl restart docker

# Docker სოკეტზე წვდომის შეზღუდვა
sudo chmod 660 /var/run/docker.sock
sudo chown root:docker /var/run/docker.sock

# Docker კლიენტის გამოყენება TLS-ით
docker --tlsverify \
  --tlscacert=ca.pem \
  --tlscert=cert.pem \
  --tlskey=key.pem \
  -H=docker-host:2376 version

Docker daemon-ის უსაფრთხოების ძირითადი კონფიგურაციები:

  • "icc": false - გამორთეთ კონტეინერებს შორის კომუნიკაცია ნაგულისხმევად
  • "no-new-privileges": true - თავიდან აიცილეთ პრივილეგიების ესკალაცია
  • "userland-proxy": false - გამოიყენეთ iptables პირდაპირ userland proxy-ის ნაცვლად
  • "live-restore": true - კონტეინერები აგრძელებენ მუშაობას, თუ daemon-ი მიუწვდომელია
  • "default-ulimits" - დააყენეთ გონივრული ნაგულისხმევი ulimit-ები ყველა კონტეინერისთვის

Content Trust და Image-ების ხელმოწერა

უსაფრთხოების ინსტრუმენტები და სკანირება

გავრცელებული უსაფრთხოების ინსტრუმენტები

უსაფრთხოების ინსტრუმენტები გვეხმარება მოწყვლადობების, არასწორი კონფიგურაციებისა და პოტენციური საფრთხეების იდენტიფიცირებაში თქვენს კონტეინერულ ეკოსისტემაში.

# Trivy - ყოვლისმომცველი მოწყვლადობის სკანერი
trivy image my-image:latest

# დეტალური სკანირება Trivy-ით
trivy image --severity HIGH,CRITICAL --format json --output results.json my-image:latest

# Clair scanner - სტატიკური მოწყვლადობის ანალიზატორი
clair-scanner --ip $(hostname -i) my-image:latest

# Docker Bench Security - ამოწმებს ათობით გავრცელებულ საუკეთესო პრაქტიკას
docker run -it --net host --pid host --userns host --cap-add audit_control \
    -v /var/lib:/var/lib \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/lib/systemd:/usr/lib/systemd \
    -v /etc:/etc --label docker_bench_security \
    docker/docker-bench-security

# Anchore Engine - image-ის ღრმა ინსპექტირება და პოლიტიკის შეფასება
docker run -d --name anchore-engine anchore/anchore-engine
docker exec anchore-engine anchore-cli image add my-image:latest
docker exec anchore-engine anchore-cli image wait my-image:latest
docker exec anchore-engine anchore-cli image vuln my-image:latest os

# Falco - runtime უსაფრთხოების მონიტორინგი
docker run -d --name falco --privileged \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /dev:/host/dev \
    -v /proc:/host/proc:ro \
    -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro \
    -v /usr:/host/usr:ro \
    falcosecurity/falco:latest

# Syft - SBOM (Software Bill of Materials) გენერატორი
syft my-image:latest

# Grype - მოწყვლადობის სკანერი SBOM-ზე დაფუძნებული
grype my-image:latest

უსაფრთხოების ინსტრუმენტების ინტეგრაცია CI/CD-ში

# GitHub Actions სამუშაო პროცესის მაგალითი უსაფრთხოების სკანირებით
name: Docker Security Scan

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: image-ის აგება
        run: docker build -t test-image:${{ github.sha }} .
      
      - name: სკანირება Trivy-ით
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'test-image:${{ github.sha }}'
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
      
      - name: Trivy სკანირების შედეგების ატვირთვა
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'

საიდუმლოებების მართვა

Docker Secrets

  • დაშიფრულია მოსვენებულ მდგომარეობაში - საიდუმლოებები ინახება დაშიფრულად Swarm Raft ლოგში
  • უსაფრთხო გადაცემა - გადაიცემა TLS-დაშიფრული ქსელებით
  • ვერსიების კონტროლი - ცვლილებების თვალყურის დევნა საიდუმლოების ვერსიონირებით
  • წვდომის შეზღუდვები - ხელმისაწვდომია მხოლოდ ავტორიზებული სერვისებისთვის
  • Runtime ინექცია - ხელმისაწვდომია როგორც ფაილები კონტეინერში runtime-ისას
  • ცენტრალიზებული მართვა - თანმიმდევრულია Docker Swarm კლასტერში
  • არამუდმივი - არ ინახება კონტეინერის image-ში ან ფაილურ სისტემაში

იმპლემენტაცია

# საიდუმლოს შექმნა ფაილიდან
docker secret create site_key ./site_key.pem

# საიდუმლოს შექმნა სტანდარტული შეყვანიდან
echo "my-secure-password" | docker secret create db_password -

# ხელმისაწვდომი საიდუმლოებების სია
docker secret ls

# საიდუმლოს შემოწმება (მხოლოდ მეტამონაცემები)
docker secret inspect db_password

# საიდუმლოს გამოყენება სერვისში
docker service create \
  --name secure-app \
  --secret db_password \
  --secret source=site_key,target=/etc/ssl/private/site.key,mode=0400 \
  my-app:latest

# კონტეინერის შიგნით, საიდუმლოებები ხელმისაწვდომია:
# /run/secrets/<secret_name>
# /run/secrets/site.key

# საიდუმლოს წაშლა
docker secret rm db_password

Docker Compose საიდუმლოებებით

version: '3.8'
services:
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
  
  web:
    image: nginx:alpine
    secrets:
      - source: site_certificate
        target: /etc/nginx/ssl/site.crt
        mode: 0444
      - source: site_key
        target: /etc/nginx/ssl/site.key
        mode: 0400

secrets:
  db_password:
    file: ./secrets/db_password.txt
  site_certificate:
    file: ./secrets/site.crt
  site_key:
    file: ./secrets/site.key

გარე საიდუმლოებების მართვა

# გარე საიდუმლოებების გამოყენება vault-დან
version: '3.8'
services:
  app:
    image: myapp:latest
    environment:
      - DB_PASSWORD=${DB_PASSWORD}  # ინექცია გარემოს საშუალებით

# docker-compose exec -e DB_PASSWORD=$(vault read -field=password secret/db)

შესაბამისობა და აუდიტი

უსაფრთხოების მონიტორინგი

მონიტორინგის ინსტრუმენტები და პრაქტიკები

უსაფრთხოების ყოვლისმომცველი მონიტორინგი საშუალებას იძლევა საეჭვო აქტივობებისა და პოტენციური უსაფრთხოების ინციდენტების გამოვლენას.

# Docker daemon-ის ლოგირების კონფიგურაცია
dockerd \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --log-level info

# daemon.json-ის კონფიგურაცია ლოგირებისთვის
cat <<EOF > /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5",
    "labels": "production_status",
    "env": "os,customer"
  },
  "debug": true,
  "experimental": false
}
EOF

# რეალურ დროში კონტეინერის მოვლენების მონიტორინგი
docker events --filter 'type=container' --format '{{.ID}} {{.Type}} {{.Action}}'

# კონტეინერის რესურსების გამოყენების შემოწმება დეტალური სტატისტიკით
docker stats --all --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"

# კონტეინერის სასიცოცხლო ციკლის მოვლენების მონიტორინგი
docker events --filter 'type=container' --filter 'event=start' --filter 'event=die'

# კონტეინერის ლოგირების კონფიგურაცია
docker run --log-driver=syslog --log-opt syslog-address=udp://syslog-server:514 nginx

# cAdvisor-ის გამოყენება კონტეინერის მონიტორინგისთვის
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --restart=always \
  google/cadvisor:latest

# Prometheus-ის გამოყენება მეტრიკების შესაგროვებლად
docker run -d \
  --name=prometheus \
  --publish=9090:9090 \
  --volume=/path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:latest

# Falco-ს გამოყენება runtime უსაფრთხოების მონიტორინგისთვის
docker run -d \
  --name falco \
  --privileged \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /dev:/host/dev \
  -v /proc:/host/proc:ro \
  -v /boot:/host/boot:ro \
  -v /lib/modules:/host/lib/modules:ro \
  -v /usr:/host/usr:ro \
  falcosecurity/falco:latest

Prometheus-ის კონფიგურაციის მაგალითი კონტეინერის მონიტორინგისთვის

# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']
  
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

Falco-ს წესების მაგალითი უსაფრთხოების მონიტორინგისთვის

# falco_rules.yaml
- rule: Container Shell Activity
  desc: კონტეინერში shell-ი გაეშვა
  condition: container.id != "" and proc.name = bash
  output: "Shell გაეშვა კონტეინერში (user=%user.name container=%container.name container_id=%container.id)"
  priority: WARNING

- rule: Unauthorized Files Access
  desc: მგრძნობიარე ფაილებზე წვდომის მცდელობების გამოვლენა
  condition: >
    container and
    (fd.name startswith "/etc/shadow" or
     fd.name startswith "/etc/passwd")
  output: "მგრძნობიარე ფაილზე წვდომა (user=%user.name file=%fd.name container=%container.name)"
  priority: ALERT

ინციდენტზე რეაგირება

გამოვლენა

  • ლოგების მონიტორინგი - შეაგროვეთ და გააანალიზეთ ლოგები ყველა კომპონენტიდან
    # Docker ლოგების ცენტრალიზაცია
    docker run \
      --name fluentd \
      -p 24224:24224 \
      -v /path/to/fluent.conf:/fluentd/etc/fluent.conf \
      fluent/fluentd:latest
    
  • რესურსების გამოყენების თვალყურის დევნა - გამოავლინეთ არანორმალური რესურსების ნიმუშები
    # შეტყობინებების დაყენება უჩვეულო რესურსების გამოყენებაზე
    docker run -d \
      -p 9090:9090 \
      -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
      -v /path/to/alerts.yml:/etc/prometheus/alerts.yml \
      prom/prometheus
    
  • შეტყობინება ანომალიებზე - დააკონფიგურირეთ შეტყობინებების სისტემები
    #
    

გაფართოებული უსაფრთხოების თემები

AppArmor პროფილები

version: '3.8'
services:
  app:
    security_opt:
      - apparmor:custom-profile

SELinux პოლიტიკები

# კონტეინერის გაშვება SELinux კონტექსტით
docker run --security-opt label=level:s0:c100,c200 my-app

Seccomp პროფილები

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "architectures": ["SCMP_ARCH_X86_64"],
  "syscalls": [
    {
      "names": ["accept", "bind", "listen"],
      "action": "SCMP_ACT_ALLOW"
    }
  ]
}

უსაფრთხოების ჩამონათვალი