시크릿은 데이터를 Base64로 인코딩해 가지고 있다가 환경 변수나 마운트된 볼륨으로 파드에 전달하기 전에 디코딩된다. 간혹 시크릿을 보안 기능으로 착각하기도 하지만 Base64는 암호화 기법이 사용된 인코딩이 아니며 보안 측면에서 평문과 동일하다. 그렇다면 왜 시크릿이 컨피그맵보다 안전하다고 할까? 시크릿은 보안을 유지하기 위한 구현 세부사항이 많다. 끊임없이 개선이 이루어지는 중이지만 현재 시점에서는 크게,
1. 시크릿은 자신에게 접근한 파드가 실행 중인 노드에만 배포된다.
2. 노드에서 시크릿은 tmpfs 메모리에 저장되며, 실제 스토리지에는 기록되지 않고 파드가 제거될 때 함께 제거된다.
3. 시크릿은 etcd에 암호화된 형태로 저장된다.
그러나 이런 주요 구현과 상관없이 루트 사용자로 시크릿에 접근하거나, 파드를 생성해서 시크릿에 마운트하는 등 다양한 방법으로 시크릿을 읽을 수 있다. 따라서 민감한 정보는 애플리케이션 레벨에서 별도의 암호화가 필요하다.
쿠버네티스 Secret 자원은 얼마나 안전할까? 그리고 ConfigMap보다 어떤 점에서 안전하다고 볼 수 있을까?
쿠버네티스 Secret 자원은 상대적으로 안전한 자원입니다. Secret 자원은 Kubernetes에서 제공하는 암호화된 방식으로 저장되며, 기본적으로 메모리 내에만 저장되며, 노드나 Pod에 대한 로깅과 같은 기능으로 보호됩니다. 또한, Secret 자원을 사용하는 컨테이너가 실행되는 노드에서만 액세스 가능하며, 컨테이너 내에서 암호화된 형태로만 사용되기 때문에 데이터가 보호됩니다.
ConfigMap과 비교하여 Secret 자원은 보안적인 측면에서 더 안전하다고 볼 수 있습니다.
ConfigMap은 기본적으로 암호화되지 않은 평문으로 저장되며,
ConfigMap에 저장된 데이터는 컨테이너 내에서 별도의 암호화 처리를 수행하지 않으면 노출될 수 있습니다. 따라서
ConfigMap에 저장된 민감한 정보를 사용하는 경우, 해당 정보를 보호하기 위해 별도의 보안 처리가 필요합니다.
그러나 Secret 자원도 완전히 안전한 것은 아닙니다. Secret 자원을 사용하는 컨테이너나 Pod가 해킹되면, Secret 자원에 저장된 민감한 정보가 노출될 수 있습니다. 따라서 Secret 자원을 사용할 때는 보안적인 측면을 고려하여 사용해야 합니다.
쿠버네티스 Secret은 Base64로 인코딩해 가지고 있을 뿐이라면 보안 측면에서 평문과 똑같은 것이 아닐까?
쿠버네티스 Secret은 기본적으로 Base64 인코딩된 형태로 저장되어 있다. 따라서 Secret에 저장된 데이터는 실제로 암호화되어 저장되는 것이 아니라, Base64로 인코딩된 평문 형태로 저장되는 것이다.
그러나 이는 단순히 인코딩된 형태일 뿐, Base64로 인코딩된 데이터는 평문으로 보이지만 인코딩된 형태이기 때문에 인코딩을 해제하지 않는 이상 데이터를 읽을 수 없다. 따라서 Secret을 사용하는 컨테이너나 Pod가 해킹되더라도, Base64로 인코딩된 데이터를 해독하지 못한다면 노출될 가능성이 낮아지게 된다.
하지만 이는 보안을 위한 완벽한 방법이 아니다. 따라서 민감한 데이터를 저장하는 경우, Secret 자원을 사용하기 전에 암호화를 수행하고, 사용 시에도 별도의 보안 처리를 추가하는 것이 좋다. 이를 통해 보안성을 더욱 강화할 수 있다.