투명 암호화
투명 암호화 (Transparent Encryption)
Cilium이 IPsec, WireGuard®, 또는 ztunnel을 사용해 Cilium 관리 호스트 트래픽과 Cilium 관리 엔드포인트 간 트래픽을 투명하게 암호화하는 방법을 설명하는 문서예요.
본문
Cilium은 IPsec, WireGuard®, 또는 ztunnel을 사용해 Cilium 관리 호스트 트래픽과 Cilium 관리 엔드포인트 간의 트래픽을 투명하게 암호화하는 것을 지원해요.
- IPsec Transparent Encryption
- WireGuard Transparent Encryption
- Ztunnel Transparent Encryption (Beta)
Cilium Transparent Encryption 데모는 eCHO episode 79: Transparent Encryption with IPsec and WireGuard에서 볼 수도 있어요.
알려진 이슈와 해결 방법 (Known Issues and Workarounds)
아직 발견되지 않은 원격 엔드포인트로의 Egress 트래픽은 암호화되지 않을 수 있음
패킷을 암호화해야 하는지 결정하기 위해, 투명 암호화는 정책 시행과 동일한 메커니즘에 의존해 아웃바운드 패킷의 목적지가 원격 노드의 Cilium 관리 엔드포인트에 속하는지 판단해요. 즉, 엔드포인트가 클러스터 외부의 대상으로 트래픽을 시작하도록 허용된다면, Cilium이 특정 IP 주소가 원격 Cilium 관리 엔드포인트 또는 새로 합류한 원격 Cilium 호스트에 속한다는 것을 배우기 전에는 그 엔드포인트가 임의의 IP 주소로 패킷을 보낼 수 있어요. 이런 경우 Cilium이 목적지 IP 주소가 클러스터 외부에 있다고 가정해야 하므로, 초기 패킷을 암호화하지 않고 보내는 시간 창이 존재해요. 새로 생성된 엔드포인트에 대한 정보가 클러스터에 전파되고 Cilium이 그 IP 주소가 원격 노드의 엔드포인트라는 것을 알게 되면, 원격 노드의 암호화 키를 사용해 패킷을 암호화하기 시작해요.
이 문제의 한 가지 해결 방법은 엔드포인트가 클러스터 외부의 임의 대상에 암호화되지 않은 트래픽을 보내지 못하도록 하는 거예요. 이는 reserved:world 식별자로의 트래픽을 완전히 허용하지 않거나, toCIDR, toCIDRSet, toFQDN 규칙을 사용해 클러스터 외부 주소로의 egress 트래픽을 특정 신뢰 IP 주소 하위 집합으로만 허용하는 egress 정책을 정의해 달성할 수 있어요. 특정 엔드포인트로의 egress 트래픽을 제한하는 네트워크 정책을 작성하는 방법에 대한 자세한 내용은 네트워크 정책 장을 참고하세요.
이 문제를 완화하는 또 다른 방법은 encryption.strictMode.egress.enabled를 true로 설정하고 예상 파드 CIDR을 encryption.strictMode.egress.cidr로 설정하는 거예요. 이 암호화 스트릭트 모드 egress는 설정된 CIDR로 노드를 빠져나가는 트래픽이 항상 암호화되도록 강제해요. 새 파드 엔드포인트에 대한 정보가 노드에 전파된 후에야 노드가 그 파드로 트래픽을 보낼 수 있다는 점에 유의하세요.
암호화 스트릭트 모드 egress는 다음과 같은 제한 사항이 있어요.
- 파드 CIDR(따라서 암호화 스트릭트 모드 egress CIDR)은 IPv4여야 해요. IPv6 트래픽은 스트릭트 모드로 보호되지 않으며 유출될 수 있어요.
- 모든 동적 조회를 비활성화하려면 direct routing 모드를 사용해야 하고, 노드 CIDR과 파드 CIDR이 겹치지 않아야 해요. 그렇지 않으면
encryption.strictMode.egress.allowRemoteNodeIdentities를true로 설정해야 해요. 이는 노드 식별자와 연결된 IP 주소에서 보내거나 받는 암호화되지 않은 트래픽을 허용해요.
암호화 스트릭트 모드 ingress는 encryption.strictMode.ingress.enabled로 활성화할 수 있어요. 활성화하면 WireGuard 터널을 통해 노드에 도착하지 않은 클러스터 내부 ingress 트래픽이 모두 버려져, 암호화되지 않은 파드 트래픽이 로컬 엔드포인트에 도달하는 것을 막아요. 스트릭트 모드 ingress는 터널 및 네이티브 라우팅 모드 모두에서 지원되며, WireGuard 암호화를 요구해요(IPsec에서는 지원되지 않아요).
암호화 스트릭트 모드 ingress에는 다음과 같은 제한 사항이 있어요.
- WireGuard의 노드 간 암호화는 스트릭트 모드 ingress로 보호되지 않아요. 시행은 로컬 엔드포인트를 목적지로 하는 클러스터 내부 파드 트래픽에만 적용돼요.
- 시행은 Cilium의 BPF 프로그램이 모든 파드 라우팅 가능 네트워크 인터페이스에 연결되는 것에 의존해요. 노드에 Cilium이 관리하지 않는(따라서 BPF 프로그램이 연결되지 않은) 추가 인터페이스가 있다면, 공격자가 그 인터페이스를 통해 암호화되지 않은 파드 트래픽을 주입해 스트릭트 모드 ingress를 우회할 수 있어요. 파드 트래픽을 전송할 수 있는 모든 인터페이스가 Cilium이 관리하는지 확인하세요.
- 다른 CNI 플러그인 위에 Cilium을 체이닝할 때는 현재 지원되지 않아요. 자세한 내용은 GitHub issue 15596을 참고하세요.