,
Traefik은 컨테이너 환경에서 널리 사용되는 인기 있는 역방향 프록시 및 로드 밸런서입니다. Traefik은 많은 이점을 제공하지만 무단 액세스를 방지하고 공격으로부터 응용프로그램을 보호하도록 안전하게 구성해야 합니다. 이 블로그 게시물에서는 컨테이너형 환경에서 Traefik을 보호하기 위한 몇 가지 모범 사례에 대해 논의할 것입니다.
Traefik 대시보드는 애플리케이션과 서비스를 실시간으로 모니터링할 수 있는 강력한 도구입니다. 그러나 제대로 보안되지 않으면 취약성의 원천이 되기도 한다. 기본적으로 Traefik은 대시보드에 액세스 하는 데 인증이 필요하지 않으므로 무단 액세스를 방지하기 위해 인증 및 권한 부여를 설정하는 것이 중요합니다.
Traefik 대시보드를 보호하는 한 가지 방법은 기본 인증을 사용하는 것입니다. 각 사용자의 사용자 이름과 암호가 포함된 htpasswd 파일을 생성하여 이 작업을 수행할 수 있습니다. 그런 다음 Traefik static.yml 파일에 다음 구성을 추가하여 이 파일을 사용하도록 Traefik을 구성할 수 있습니다:
api:
dashboard: true
debug: true
basicAuth:
users:
- "user:$apr1$NndyPT9J$B1L6qlgZ/mxPZo8s4H4sE1"
이 예에서 htpasswd 파일에는 암호가 있는 사용자라는 단일 사용자가 포함되어 있습니다. 암호가 안전하게 저장되도록 apr1 알고리즘을 사용하여 해시됩니다.
HTTPS로 트래픽을 암호화하는 것은 Traefik을 포함한 모든 웹 응용 프로그램에 필수적인 보안 수단입니다. 기본적으로 Traefik은 HTTP를 사용하여 백엔드 서비스와 통신하지만 static.yml 파일에 몇 줄을 추가하여 HTTPS를 사용하도록 구성할 수 있습니다:
serversTransport:
insecureSkipVerify: true
rootCAs:
- /etc/traefik/ca.crt
certificatesResolvers:
myresolver:
acme:
email: john.doe@example.com
storage: acme.json
httpChallenge:
entryPoint: http
이 예에서는 암호화를 사용하여 SSL/TLS 인증서를 자동으로 가져옵니다. 인증서 요청과 연결할 전자 메일 주소와 인증서의 저장 위치를 지정합니다. 또한 HTTP 챌린지를 사용하여 도메인 소유권을 확인하고 진입점을 http로 지정합니다.
RBAC(Role-Based Access Control)는 개별 사용자 또는 그룹에 할당된 역할 및 사용 권한을 기준으로 리소스에 대한 액세스를 제어할 수 있는 보안 모델입니다. RBAC는 사용자가 작업을 수행하는 데 필요한 리소스에만 액세스 할 수 있도록 함으로써 최소 권한 원칙을 적용하는 데 도움이 됩니다.
트레이픽은 미들웨어를 통해 RBAC를 지원한다. 미들웨어는 RBAC와 같은 보안 기능을 포함하여 트래픽에 기능을 추가하는 데 사용할 수 있는 재사용 가능한 구성 요소 집합입니다.
Traefik에서 RBAC를 사용하려면 traefik.http.middleware 섹션을 사용하여 Traefik dynamic.yml 파일에서 역할 및 사용 권한을 정의할 수 있습니다. 다음은 두 가지 역할(관리자 및 사용자)과 관련 사용 권한을 정의하는 구성의 예입니다:
http:
middlewares:
admin@file:
users:
- "admin:$apr1$F.w1aOyM$OGzPnh7l4hJ4ti4X9/uxn0" # htpasswd entry for admin user
basicAuth:
realm: "Traefik Dashboard"
user@file:
users:
- "user:$apr1$F.w1aOyM$OGzPnh7l4hJ4ti4X9/uxn0" # htpasswd entry for user
basicAuth:
realm: "Traefik Dashboard"
routers:
traefik:
rule: Host(`traefik.example.com`)
service: api@internal
middlewares:
- admin@file # Only users with the admin role can access this router
app:
rule: Host(`app.example.com`)
service: app
middlewares:
- user@file # Only users with the user role can access this router
이 예에서는 HTTP 기본 인증을 사용하여 두 가지 역할(관리자 및 사용자)과 관련 권한을 정의합니다. 그런 다음 라우터 정의에서 미들웨어 필드를 사용하여 이러한 역할 및 권한을 특정 라우터에 적용합니다.
Traefik에서 RBAC를 사용하면 인증된 사용자만 리소스에 액세스할 수 있도록 하여 무단 액세스 및 공격 위험을 줄일 수 있습니다.
TLS 클라이언트 인증은 X.509 인증서를 사용하여 클라이언트를 인증할 수 있는 보안 기능입니다. 이렇게 하면 클라이언트가 신뢰할 수 있는 CA(인증 기관)에서 발급한 유효한 인증서를 가져야 하므로 기존의 사용자 이름 및 암호 인증을 넘어서는 추가적인 보안 계층을 제공합니다.
Traefik에서 TLS 클라이언트 인증을 사용하려면 Traefik dynamic.yml 파일에서 TLS 클라이언트 인증을 구성해야 합니다. 클라이언트 인증에 자체 서명 인증서를 사용하는 구성 예는 다음과 같습니다:
serversTransport:
insecureSkipVerify: true
rootCAs:
- /etc/traefik/ca.crt
clientCA:
files:
- /etc/traefik/client-ca.crt
이 예에서는 클라이언트 CA에 대해 자체 서명된 인증서를 사용합니다. 설정의 보안을 향상시키기 위해 신뢰할 수 있는 CA에서 발급한 인증서로 바꿀 수 있습니다.
Traefik 로그를 모니터링하는 것은 컨테이너화된 환경의 보안을 보장하는 데 중요한 단계입니다. Traefik 로그는 공격 및 의심스러운 활동에 대한 중요한 정보를 제공하여 보안 사고를 식별하고 대응하는 데 도움이 될 수 있습니다.
Traefik에서 로깅을 사용하려면 Traefik static.yml 파일에 다음 구성을 추가할 수 있습니다:
log:
level: INFO
format: json
filePath: /var/log/traefik/access.log
이 예에서는 로그에 JSON 형식을 사용하여 /var/log/traefik/access.log에 저장합니다. 필요에 따라 로그 수준 및 파일 경로를 사용자 정의할 수 있습니다.
Traefik 보안은 컨테이너화된 환경의 보안을 보장하는 데 필수적이다. 이 블로그 게시물에 설명된 모범 사례를 따르면 Traefik 설정의 보안을 개선하고 무단 액세스 및 공격 위험을 줄일 수 있습니다.