Consul 보안
Consul 보안 (Secure Consul)
Consul은 기본적으로 안전하지 않지만, 구성이 전혀 필요 없는 로컬 개발자 환경부터 ACL 인가와 mTLS 인증을 갖춘 프로덕션의 컨테이너 오케스트레이터에 이르기까지 다양한 사용 사례의 보안 요구 사항을 충족하도록 구성할 수 있어요.
출처: 문서
본문
Consul은 기본적으로 안전하지 않지만, 구성이 전혀 필요 없는 로컬 개발자 환경부터 ACL 인가와 mTLS 인증을 갖춘 프로덕션의 컨테이너 오케스트레이터에 이르기까지 광범위한 사용 사례의 보안 요구 사항을 충족하도록 구성할 수 있습니다.
보안 Consul 배포를 구성하고 운영하기 위한 요구 사항과 권장 사항은 의도한 워크로드, 운영 체제, 환경에 따라 크게 달라질 수 있습니다. 이 문서는 환경을 강화하기 위한 Consul 보안 모델 및 기능에 대한 높은 수준의 설명을 제공합니다.
서비스 메시 내에서 서비스 간 통신을 보호하는 방법에 대한 문서를 찾고 있다면 Connect workloads to Consul service mesh 및 Secure service mesh overview를 참조하세요.
Consul 보안 모델 (Consul security model)
Security models overview은 Consul의 보안을 높이는 데 도움이 되는 권장 구성을 이해하기 위한 좋은 출발점입니다. Threat model에서 강조된 요구 사항은 해결해야 할 Consul 설치의 민감한 영역에 대한 지침을 제공합니다.
아래 표는 다양한 Consul 작업과 해당 보안을 담당하는 Consul 기능에 대한 간소화된 개요를 제공합니다.
| Use Case | Gossip encryption | TLS encryption | ACLs |
|---|---|---|---|
| Gossip communication | ✅ | 🚫 | 🚫 |
| Raft communication | 🚫 | ✅ | 🚫 |
| RPC communication | 🚫 | ✅ | 🚫 |
| K/V Operations | 🚫 | ✅ | ✅ |
| API/CLI/UI Operations | 🚫 | ✅ | ✅ |
| Catalog Access | 🚫 | 🚫 | ✅ |
| DNS service discovery | 🚫 | 🚫 | ✅ |
| Add datacenter nodes | ✅ | ✅ | ✅ |
트래픽 암호화 (Traffic encryption)
Consul은 서로 다른 에이전트 간의 모든 네트워크 통신과 Consul API, CLI, UI 인터페이스에도 암호화를 사용할 수 있습니다.
Consul을 보호하기 위해 두 가지 별개의 암호화 시스템을 사용할 수 있으며, 암호화하는 트래픽에 따라 Gossip 암호화와 상호 TLS(mTLS) 암호화가 있습니다.
Gossip 암호화 (Gossip encryption)
Consul은 gossip 프로토콜을 사용하여 다음 클러스터 작업을 수행합니다:
- 데이터센터 구성원 식별.
- 실패한 구성원을 신속하게 감지하고 나머지 클러스터에 알림.
- 사용자 지정 워크플로우를 트리거할 수 있는 이벤트 및 쿼리 브로드캐스트.
gossip 프로토콜과 구성원 관리 및 메시지 브로드캐스팅 기능은 Serf 라이브러리를 사용합니다.
Consul 데이터센터에 gossip 암호화를 활성화하면 에이전트가 클러스터 상태를 유지하기 위해 브로드캐스트하는 모든 트래픽을 보호합니다.
Consul 데이터센터에서 gossip 암호화를 활성화하고 gossip 키를 회전하는 방법에 대한 자세한 내용은 manage gossip encryption을 참조하세요.
mTLS 암호화 (mTLS encryption)
Consul은 mTLS로 보호할 수 있는 여러 포트에서 여러 통신 프로토콜을 사용합니다:
- Consul 서버 간 데이터 일관성을 제공하는 합의 프로토콜.
- RPC(원격 프로시저 호출)는 클라이언트 에이전트에서 서버 에이전트로 요청을 전달합니다.
- 클라이언트가 Consul API, CLI, UI와 통신할 수 있게 하는 HTTP 또는 HTTPS 인터페이스.
- 에이전트 노드에 등록된 게이트웨이 및 Envoy 프록시에서 들어오는 트래픽을 수신하는 gRPC 인터페이스.
Consul은 mTLS를 사용하여 서버 및 클라이언트 에이전트의 신뢰성을 확인합니다. 모든 클라이언트와 서버가 단일 CA(인증 기관)에서 생성된 키 쌍을 보유해야 합니다. 다른 애플리케이션과 공유되지 않는 프라이빗 CA를 사용하는 것을 권장합니다.
Consul 데이터센터에서 mTLS를 활성화하는 방법에 대한 자세한 내용은 Manage mTLS encryption을 참조하세요.
액세스 제어 (Access control)
Consul은 ACL(액세스 제어 목록) 시스템을 구현하여 요청을 인증하고 리소스에 대한 액세스를 인가합니다. ACL은 Consul UI, API, CLI에 대한 액세스와 안전한 서비스 간 및 에이전트 간 통신도 제어합니다.
ACL 시스템에 대한 자세한 내용은 Access control list (ACL) 문서를 참조하세요.
추가 보안 모범 사례 (Additional security best practices)
enable_script_checks 구성 설정을 통해 스크립트 검사를 활성화하면 맬웨어가 표적으로 삼는 것으로 알려진 원격 실행 취약점이 발생할 수 있습니다. 대신 enable_local_script_checks를 사용하는 것을 강력히 권장합니다. 자세한 내용은 이 블로그 게시물을 참조하세요.
HTTP, HTTPS, DNS, gRPC API에 대해 클라이언트 에이전트가 localhost에 바인딩하도록 구성하세요. 이렇게 하면 이러한 API가 클라이언트 에이전트가 실행 중인 노드 외부에 노출되지 않습니다. addresses 및 client_addr 구성 옵션이 지정되지 않으면 Consul 클라이언트 에이전트는 기본적으로 localhost에 바인딩합니다.
환경에 배포된 Consul 버전에 관련 활성 CVE가 없는지 다음 페이지를 방문하여 확인하세요: Hashicorp Discuss: Consul Security
서비스 메시 내에서 서비스 간 통신을 허용하는 규칙을 정의하기 위해 Consul 의도(intentions)를 활용하세요.
기타 리소스 (Other resources)
auto_config로 보안 구성 자동화 (Automate security configuration with auto_config)
gossip 및 mTLS 모두에 대한 트래픽 암호화를 구성하고 에이전트 ACL 토큰을 만드는 것은 운영자가 수동으로 실행해야 하는 많은 작업을 포함합니다. auto_config를 사용하여 이러한 작업을 자동화할 수 있습니다. 자세한 내용은 Consul auto-config on Docker에서 확인하세요.
SSO(단일 로그온) 구현 (Implement Single Sign On (SSO))
사용자 토큰을 만드는 대신 OIDC 제공자를 사용하여 Consul에서 SSO(단일 로그온)를 구현할 수 있습니다. 이렇게 하면 네트워크에 Consul 통합이 간소화되고 모든 새 사용자에 대해 임시 자격 증명을 만드는 것을 피할 수 있습니다. 자세한 내용은 Enable Auth0 single sign-on (SSO)에서 확인하세요.
감사 로깅으로 API 요청 모니터링 (Monitor API request with audit logging)
Enterprise
Consul Enterprise는 HTTP API 엔드포인트에 대한 고급 모니터링을 제공합니다. 감사 로그를 사용하면 Consul API에 대해 수행된 인증된 요청의 명확하고 실행 가능한 로그를 캡처할 수 있습니다. 자세한 내용은 audit logging에서 확인하세요.
namespace로 리소스 분리 및 권한 위임 (Separate resources and delegate permissions with namespaces)
Enterprise
Namespace는 단일 조직 내 팀에 분리를 제공하여 충돌 없이 하나 이상의 Consul 데이터센터에 대한 액세스를 공유할 수 있게 합니다. 또한 ACL이 있는 Namespace를 사용하면 서비스, Connect 서비스 메시 프록시, 키/값 쌍, 세션을 포함한 데이터센터 내 특정 리소스에 대한 액세스 제어를 위임할 수 있습니다. 자세한 내용은 namespaces 문서에서 확인하세요.