Skip to main content

Command Palette

Search for a command to run...

Bài 12: Bảo mật trong Docker

Published
3 min readView as Markdown

12.1. Các vấn đề bảo mật phổ biến trong Docker

Docker mang lại nhiều lợi ích nhưng cũng tiềm ẩn các rủi ro bảo mật nếu không được cấu hình đúng cách. Một số vấn đề phổ biến:

  1. Lỗ hổng trong Docker Image:

    • Các image chứa phần mềm lỗi thời hoặc không được cập nhật có thể bị khai thác.
  2. Lộ thông tin nhạy cảm:

    • Thông tin nhạy cảm như mật khẩu hoặc khóa API có thể bị lưu trữ trong image hoặc Dockerfile.
  3. Sử dụng quyền root:

    • Mặc định, container chạy với quyền root, gây nguy cơ bảo mật nếu bị khai thác.
  4. Kết nối mạng không an toàn:

    • Container giao tiếp qua mạng không mã hóa có thể bị nghe lén.

12.2. Sử dụng Non-Root User trong Docker Container

Chạy container với quyền non-root giúp giảm nguy cơ container bị lợi dụng để tấn công hệ thống.

Cách thực hiện:
  1. Tạo user trong Dockerfile:

     FROM openjdk:11-jre-slim
     RUN useradd -ms /bin/bash appuser
     USER appuser
     COPY target/app.jar /app/app.jar
     WORKDIR /app
     CMD ["java", "-jar", "app.jar"]
    
  2. Kiểm tra user trong container:

     docker exec -it <container_id> whoami
    

12.3. Quét Docker Image để tìm lỗ hổng bảo mật

Sử dụng các công cụ quét bảo mật để phát hiện lỗ hổng trong Docker Image.

Công cụ phổ biến:
  1. Trivy:

    • Cài đặt:

        brew install aquasecurity/trivy/trivy
      
    • Quét image:

        trivy image <image_name>
      
  2. Snyk:

    • Đăng ký tài khoản tại Snyk.

    • Cài đặt:

        npm install -g snyk
      
    • Quét image:

        snyk container test <image_name>
      
Kết quả:

Các công cụ sẽ cung cấp danh sách lỗ hổng, mức độ nghiêm trọng và hướng dẫn sửa lỗi.


12.4. Bảo mật secrets với Docker Secrets hoặc HashiCorp Vault

Docker Secrets:

Docker Secrets là cách lưu trữ và quản lý thông tin nhạy cảm như mật khẩu, khóa API.

  1. Tạo secret:

     echo "my_password" | docker secret create db_password -
    
  2. Sử dụng secret trong Docker Compose:

     version: '3.9'
     services:
       app:
         image: spring-boot-app
         secrets:
           - db_password
     secrets:
       db_password:
         external: true
    
HashiCorp Vault:

HashiCorp Vault cung cấp giải pháp quản lý secrets mạnh mẽ và an toàn.

  1. Cài đặt Vault: Vault Installation Guide.

  2. Cấu hình Vault trong ứng dụng Spring Boot: Thêm dependency:

     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-vault-config</artifactId>
     </dependency>
    

12.5. Thực hành: Bảo mật ứng dụng Spring Boot trong Docker

Bước 1: Tạo Dockerfile với non-root user
FROM openjdk:11-jre-slim
RUN useradd -ms /bin/bash appuser
USER appuser
COPY target/app.jar /app/app.jar
WORKDIR /app
CMD ["java", "-jar", "app.jar"]
Bước 2: Quét bảo mật Docker Image
  1. Build image:

     docker build -t spring-boot-app .
    
  2. Quét image với Trivy:

     trivy image spring-boot-app
    
Bước 3: Sử dụng Docker Secrets
  1. Tạo secret:

     echo "secure_password" | docker secret create db_password -
    
  2. Cập nhật docker-compose.yml:

     version: '3.9'
     services:
       springboot-app:
         image: spring-boot-app
         secrets:
           - db_password
     secrets:
       db_password:
         external: true
    
Bước 4: Kiểm tra bảo mật mạng
  1. Chạy container:

     docker-compose up
    
  2. Kiểm tra kết nối mạng an toàn (HTTPS).


Tóm tắt

  • Sử dụng non-root user để giảm nguy cơ bảo mật.

  • Quét Docker Image với Trivy hoặc Snyk để phát hiện lỗ hổng.

  • Bảo vệ thông tin nhạy cảm bằng Docker Secrets hoặc HashiCorp Vault.

More from this blog

hoangkim

366 posts