쿠버네티스 curl 사용하기

쿠버네티스에서 클러스터내에서 Pod 에 데이터가 잘 나오는지를 확인하는 방법은 CURL 일 것이다. ClusterIP 로 IP 가 할당되면 클러스터내에서 접근이 가능한데 이때에 다음과 같이 사용하면 된다.

curl 을 비롯한 ping, nslookup 도 가능하다.

Calico Metrics 모니터링 하기

Calico 는 쿠버네티스(Kubernetes) 의 CNI 다. 쉽게 말해서 쿠버네티스의 네트워킹을 가능하게 해준다. 설치도 쉽게 할수 있는데, 프로메테우스에서 Calico 모니터링을 하기 위해서는 추가적인 작업이 필요한데 여기에 대해서 알아본다.

calicoctl

calicoctl 을 설치해야 한다. 이 파일은 바이너리이며 wget, curl 명령어를 이용해서 설치가 가능하다. 설치를 한 후에 이것을 사용하기 위해서는 다음과 같이 환경변수를 설정해 준다.

calicoctl 명령어는 다양한 질의를 할 수 있다.

Calico CRD

Calico 설치를 메니페스트로 설치를 하게 되면 CRD 가 생성되면서 CRD 에 정의된 오브젝트가 함께 생성된다.

이것을 언급하는 이유는 Calico 홈페이지에 보면 이에 대한 언급이 많이 되어 있지 않은채, API 를 언급하고 있다. 만일 API 조회를 해봤는데 없다면 CRD 를 살펴보고 찾으면 된다.

Monitor Calico component metrics

Felix configuration

이제 Calico 의 컴포넌트 메트릭을 활성화 해보자. 이를 위해서는 felixconfigurations 의 설정을 먼저 바꿔야 한다. 이를 위해서 calicoctl 명령어를 활용한다.

Creating a service to expose Felix metrics

이제 프로메테우스에서 메트릭 수집을 위한 서비스를 다음과 같이 만든다.

Felix 는 쿠버네티스 WorkerNode 에서 실행되는 CNI 를 말한다. 셀렉터를 보면 k8s-app: calico-node 를 설정하고 있는데, Calico Node 의 Pods 를 지정한 것이다.

또, 나중에 ServiceMonitor 설정을 위해서 Labels 를 잘 설정해줘야 한다.

Typha 설정은 하지 않는다. 50개 노드 이하로 설치를 했기 때문에 Typha 가 없다.

Confirm prometheus metrics port

쿠버네티스는 컨트롤 설정을 하나로 모아 놨다. 이 설정을 보면 여러가지 오브젝트에 대한 내용도 나오는데, 이 오브젝트에 대한 프로메테우스 엔드포인트는 9094로 정의 되어 있다. 이 포트를 이용하면 모든 메트릭의 엔드포이트를 가지고 올 수 있다.

Creating a service to expose kube-controllers metrics

앞에 Felix 는 Node 의 CNI 라고 한다면 이를 제어하는 것이 컨트롤러이다. 이를 위한 서비스를 다음과 같이 생성해 준다.

Calico-kube-controllers 의 Pods 를 찾기 위해서 셀렉터 k8s-app: calico-kube-controllers 지정해 준다. 그리고 ServiceMonitor 에서 찾을 수 있도록 Labels 를 설정해 줬다.

Prometheus ServiceMonitor 생성

나는 프로메테우스를 Operator 로 설치했다. Prometheus-Operator 설치를 할 경우에 메트릭 수집은 ServiceMonitor 를 통해서 이루어진다. 이 ServiceMonitor 는 Prometheus 의 설정을 함께 적용하면서 동작한다. Prometheus 의 Scape 을 ServiceMonitor 가 대신하는 것이라고 생각하면 쉽다.

Felix 를 위한 ServiceMonitor

Felix 를 위한 ServiceMonitor 는 다음과 같다.

셀렉터를 이용해서 Service 의 Felix 를 지정해줬고, 스크랩에서도 Felix 를 인식하도록 서비스 이름을 지정해 줬다.

Calico Kube Controller ServiceMonitor

Calico kube controller 를 위한 ServiceMonitor 는 다음과 같다.

위와같이 한 후에 프로메테우스를 살펴보면 다음과 같이 나온다.

쿠버네티스 secret 파일 저장하기

쿠버네티스의 Secret 은 암호화해서 데이터를 저장하는데, 파일도 저장할 수 있다. 바이너리 파일이던 텍스트 파일이던 모두 base64 인코딩 스트링으로 저장이된다. 이것을 파일로 저장하는 방법에 대해서 간단하게 알아본다.

Prometheus 설정 Secret

Pormetheus 를 오퍼레이터(Operator) 로 설치를 했을 경우에 다음과 같은 Secret 을 볼 수 있다.

data 필드를 보면 prometheus.yaml.gz 파일이름이 보이고 내용이 base64 스트링이 보인다. 이 prometheus.yaml.gz 파일을 받기 위해서는 간단히 bas64 스트링을 디코딩하고 나오는 스트링을 그냥 파일명으로 저장하면 된다.

간단하게 echo “<encoded-value>” | base64 -d prometheus.yaml.gz 으로 보면 된다.

압축을 해제하고 파일을 수정한 후에 다시 압축을 한다. 그리고 이것을 base64 로 인코딩 스트링을 만들면 되는데 다음과 같이 만들 수 있다.

이렇게 하게 되면 Base64 인코딩 스트링 나오는데, Secret 에 데이터부분에 이 스트링을 넣고 편집하면 된다.

curl 사용법

curl 사용법을 정리해 본다. curl 사용법을 정리하는 이유는 쿠버네티스(Kubernetes) 를 사용하면서 테스트를 위해서 많이 사용할 명령어이기 때문이다. 쿠버네티스에서 주로 사용하는 방법은 인증서를 지정해 인증을 받아 실행시키는 API 호출이다.

–cacert

TLS 연결을 위해 인증서 파일을 지정하는데 사용 한다. 이 파일은 다중 CA 인증서를 포함할 수 있다. 여기서 ‘다중 CA 인증서’ 는 인증서 체인(Certification Chain) 을 말한다. 인증서는 반드시 PEM 포맷이여야 한다.

–cert

TLS 연결을 위한 클라이언트 인증서 파일을 지정하는데 사용 한다. 인증서는 보안 전송(Secure Transport) 를 위해서는 PKCS#12 포맷을 다른 엔진을 위해서는 PEM 포맷을 사용이여야 한다. 이 옵션은 개인 키와 클라이언트 인증서가 연결된 인증서 파일로 가정 한다.

–key

개인 키 파일 이름

쿠버네티스 테스트

현재 쿠버네티스를 KVM 에 Hardway 로 설치를 했다. controller-manager, etcd, apiserver 등을 OS 프로세스등으로 작동한다. 이러다보니 이 서버에 연결을 위해서는 인증을 해야 하는데, 인증서가 필요한데 테스트를 다음과 같이 할 수 있다.

쿠버네티스의 경우에 인증을 위해서 대부분 인증서를 사용하는데, 위 명령어가 도움을 줄 수 있다.

대칭키, 비대칭키 개념

컴퓨터를 다룬다는 건 쉬운게 아니다. 컴퓨터 자체는 공학 개념이지만 그 컴퓨터에서 작동하는 수 많은 일들은 과학에 속한다. 이러한 컴퓨터 과학분야는 매우 다양해서 대충이라도 알고 있는 것과 모르는 것의 차이는 시간이 갈 수록 커질 수 밖에 없다.

그 대충이라도 알아야하는 것중에 하나가 암호화다. 컴퓨터 네트워크를 위해서 필요한 보안을 가능하게 해주는 암호화. 개인 정보의 중요성을 가져오지 않아도 과거부터 컴퓨터 네트워크에서 암호화는 필요 이상이였다.

암호화 방법에서 데이터를 암호화 하는 키가 어떤건지를 말하는 것으로 대칭키, 비대칭키라는 말이 있다. 오늘은 암호화의 기초, 용어에 대해서 알아본다.

대칭키(Symmetric Key)

대칭키는 영어로 Symmetric Key 라고 하는데, 직역 그 자체로 ‘대칭’ 이다. ‘대칭’ 이라는 용어의 사용은 동일한 형상이 상반된 위상에 존재하는 것을 말한다. 대칭은 자연상태에서 가장 많이 발견된다. 식물의 꽃의 경우 반으로 접었을때에 포개지는 것이 대표적이다. 자연이 가장 안전적인 상태가 대칭이라는 말이 있을 정도로 자연에서의 대칭은 흔하다.

암호화는 복호화도 포함한다. 어떤 평문을 암호화 했다면 반드시 해독이 가능하도록 평문으로 되돌릴 수 있어야 한다. 이를 복호화라고 하는데, 암호화 할때 사용하는 암호화 키와 복호화 할때 사용하는 복호화 키가 모두 동일한 경우를 대칭키 암호화라고 한다.

암호화 과정과 복호화 과정을 포개면 동일한 키가 딱 들어맞고 찾을 수 있다해서 대칭키라고 이름을 붙인 것으로 보인다. (이건 추정이다. 하지만 이름 하나는 딱 맞게 잘 지은 거 같다)

대칭키 암호화는 암호화, 복호화에 모두 동일한 키를 사용하기 때문에 복호화를 하는 사람도 결국 같은 키를 가지고 있어야 한다. 암호전문을 전송, 수신하는 양측 모두 같은 암호키를 가지고 있어야지만 암호화전문을 보내고 복호화해서 평문으로 내용을 확인할 수 있으니까..

암호화의 발전은 전쟁으로 인한 것이 였다. 1,2차 대전때에 전문통신을 암호화 해야할 필요가 있었는데, 이때 암호화를 위한 키 스트링을 사용했었다. 다시 복호화를 하기 위해서는 암호화 과정에서 사용했던 동일한 키 스트링을 이용해야만 했다. 대칭키 암호화를 활용한 것이다.

이러다보니 적군에게 스파이를 파견해 하는 일중에 최우선은 이 암호화 하는데 이용하는 키 스트링을 훔쳐오는 것이다. 그 키 스트링만 알면 적군의 암호전문통신을 중간에서 가로채서 해독할 수 있고 작전을 모두 알 수 있었기 때문이다.

이것은 결과적으로 대칭키 암호화에서 암호화 한 전문 보다는 암호화를 하는데 사용한 대칭키를 어떻게 보관하고 상대방에게 전달해야 하느냐 하는 문제로 이어진다.

컴퓨터 분야에서도 대칭키 암호화를 활용한적있다. 대표적으로 DES 암호화 알고리즘이 그것이다. DES 암호화 알고리즘은 IBM 이 만들어서 미국 NIST 에 제안해 채택되었다. 하지만 1998년에 대칭키를 몰라도 수학적으로 해독이 가능하다는 것이 증명됨에 따라 사용하지 않고 있다.

비대칭키(Asymmetric Key)

비대칭키 암호화는 암호화 하는데 사용하는 암호화 키와 복호화 하는데 사용하는 복호화 키가 다르다. 어떻게 암호화 키와 복호화 키가 다른데, 평문을 암호화도 되고 더군다나 그 암호화된 문장이 평문으로 복호화가 되나? 하겠지만, 매우 잘 된다.

비대칭키 암호화의 핵심은 복호화와 전달에 있다. 정확하게 말하면 암호화, 복호화 전체과정에서 가장 중요하게 보는 부분이 복호화일 뿐이다.

암호화를 하는 이유는 보안을 위한 것이다. 그 보안이라는 것은 타인이 내가 봐야하는 뭔가 은밀한 기밀을 들키지 않고 유지 하는 것을 말한다. 결국 그 은밀한 기밀은 나만 보아야 한다는 전제가 깔린 것이다.

비대칭키 암호화에서 가장 중요하게 보는 것은 복호화다. 암호화는 아무나 다 해도 된다. 하지만 그것을 볼 수 있는 사람은 오직 나 혼자여야 한다. 따라서 복호화를 위한 키는 나만 가지고 있으면 된다.

암호화를 하는 이유는 타인에게 정보를 전달하기 위한 것이다. 타인에게 정보를 전달도 하지 않을 거라면 나 혼자 아는 암호화 키로 암호화하고 보관하면 된다. 나만 알고 있는 키이기 때문에 다른 사람에게 유출될 일도 없다. 하지만 타인에게 정보를 전달하는 거라면 대칭키 암호화에서처럼 상대방도 내 암호화 키를 알고 있어야 하고 이 키를 전달하는데 많은 보안을 유지해야 한다.

하지만 암호화 된 전문을 나만 아는 키로 해독이 가능하면 대칭키 암호화 키 전달을 위한 추가적인 보안이 필요 없다.

비대칭키 암호화는 그 누구나 암호화를 할 수 있는 키가 존재하고 나만 복호화 할 수 있는 복호화 키, 이렇게 두가지로 존재한다. 이를 공개 키(Public Key), 개인 키(Private Key) 라고 부른다.

비대칭키 암호화를 사용하기 위해서 나는 공개 키와 개인 키 두개를 만든다. 그리고 공개 키를 세상에 그냥 뿌린다. 인터넷에 그냥 올려놔도 된다. 지구상에 모든 사람이 공개 키를 알아도 된다. 왜냐하면 공개 키로 암호화 한 전문은 오로지 나 혼자 가지고 있는 개인 키로만 평문으로 복호화가 가능하니까.

비대칭키 암호화에 대표는 RSA 이다. 론 리베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레오나르드 애들만(Leonard Adleman) 3명의 수학자의 앞 글자를 따서 지은 것이다.

이 3명의 수학자는 MIT 컴퓨터 사이언스 실험실 8층에서 함께 암호화 알고리즘 연구를 진행하던 중에 디피와 헬만이 발표한 비대칭키 암호화 알고리즘을 듣게 된다. 그리고 그들도 이 암호화 알고리즘 개발에 착수하는데, 1977년 4월에 론 리베스트가 수학 교과서를 읽다가 갑자기 아이디어가 떠올랐다고 한다. 그는 전광석화처럼 그날 밤에 논문을 작성하고 마쳤는데, 논문에 마지막에 자신을 포함한 연구실 사람 이름을 올렸다고 한다. 그래서 RSA 라고 부르게 되었다는 것.

SSH 키 접속

어느날 한번쯤은 ‘SSH 키 접속’ 이라는 것을 들어보거나 검색을 해봤을 것이다. SSH 는 서버에 접속을 위한 프로그램으로 SSH 서버에 접속을 위해서는 ID/Password 입력해 접속을 한다. 하지만 SSH 는 Key 방식으로 접속을 지원한다. 이때 SSH가 사용하는 Key 방식이 RSA 키 방식이다.

SSH 키 접속을 위해서는 암호화 키를 생성해야 하는데, 대충 다음과 같은 명령어로 생성이 된다.

두개의 파일이 생성되는데, id_rsa 는 개인키(Private Key) 이며 id_rsa.pub 는 공개키(Public Key) 다.

공개키를 접속하려고 하는 서버에 사용자 ID 홈디렉토리에 .ssh 디렉토리에 authorized_keys 파일로 전송한다. 그리고 접속할때에는 개인키를 이용해서 SSH 접속을 하면 된다.

도메인 인증서

RSA 암호화를 알아야 하는 이유는 SSH 뿐만 아니라 전자서명에도 사용하기 때문이다. 전자서명으로 대표적인 것이 도메인 인증서다.

HTTPS 를 위해서 반드시 필요한 인증서가 도메인 인증서인데, 이것이 RSA 암호화를 기반으로 한다. HTTPS 는 정확하게는 RSA 암호화와 대칭키 암호화를 혼합해 작동된다.

Ansible, 특정 동작 대기/확인 하기

Ansible 을 사용할때에 특정 동작에 대해서 대기한 후에 진행하도록 해야할 필요가 있다. 대표적인 것이 Tomcat 과 같은 경우인데, Tomcat 이 시작을 하게 되면 애플리케이션이 동작하기까지 몇 초의 시간이 더 걸린다. 웹 애플리케이션이 정상적으로 접속을 받기 전에 또 다른 작업을 하게 될 경우에 문제가 된다.

wait_for

Ansible 에서는 위와같은 경우를 위해서 wait_for 라는 것을 지원한다. 예제를 보면 단번에 이해할 수 있다.

포트 80 을 체크해 10초동안 딜레이를 가진다.

다음 예제를 보자.

tomcat.pid 파일이 생성되면 다음 스텝으로 진행 된다.

또 다음 예제를 보자.

tomcat.pid 파일이 삭제되면 다음을 진행한다.

위 예제2,3을 활용하면 Tomcat 웹 애플리케이션을 배포할때에 활용가능하다.

VcXsrv, 원격 X-Windows 클라이언트

집에서 테스트를 위해서 설치한 서버가 있는데, KVM 가상화를 해뒀다. OS 를 설치하기 위해서 virt-manager 를 자주 이용하는데, 노트북에 Mint 리눅스가 있기 때문에 이것을 이용하면 원격 X-Windows 에 접속해 GUI virt-manager 를 실행시킬 수 있다.

그런데, 매번 노트북을 켜서 하기도 귀찮고 그래서 윈도우즈에서 사용가능한 X-Windows 클라이언트를 필요했다. 이에 대해서 이미 NetSarang 에서 만든 XManager, Xming 이란것을 알고 있었다. XManager 는 사용이고, Xming 은 무료이지만 이전에 제대로 안되었던 기억이 있다. 혹시 다른게 있을까 싶어서 찾아보니 VcXsrv 를 알게되었는데 이것을 한번 사용해 보기로 했다.

설치

설치는 VcXsrv 를 다운받아서 설치를 하면 된다. SourceForge 에서 배포한다.

실행

설치가 마무리되면 Xlauch 라는 실행 아이콘이 생성된다. 이것을 클릭하면 실행이 된다.

실행을 하면 Xming 화면과 동일하다. Multiple windows 를 선택하고 다음..

원격 서버에 접속해 프로그램을 실행하기 위해서 ‘Start a program’ 을 선택한다.

원격에서 실행할 프로그램을 기재하고 원격 서버 로그인 정보를 작성해 준다.

위와같이 정보를 정확하게 기재하면 접속이 성공하게 된다. 기존의 Xming 과 사용방법은 똑같다.

Log4j 취약점, 한국 IT 보안에 대한 단상

몇일 전에 Apache 재단에서 제작해 배포하는 Log4j2 에 대해, 보안 취약점 등급 10등급으로 즉시 취약을 말하면서 보안설정과 패치를 하라는 권고를 했다. 이는 전 세계적인 현상으로 우리나라 뿐만 아니라 미국등에도 매우 심각한 현상임을 인지하고 뉴스에도 나올만큼 큰 뉴스거리가 되었다.

Log4j2 만 문제냐

하지만 이 업계에 10년 넘게 밥벌이를 하는 입장에서 별로 놀랍지도 않고 왜 그렇게 호들갑이냐 하는 생각이 먼저 든다. 모르는 사람이야 뉴스에도 나오고 전문가들이 심각하다고 하는데 ‘호들갑’ 이라고 말하니 내가 뭔가 잘못 말한것처럼 생각이 들겠지만 실상을 알고 나면 그렇지 않다는걸 깨닫게 된다.

먼저, 내가 현재 맡아서 하고 있는 것들을 한번 보자. 대략 다음과 같은 스펙으로 서비스되어지고 있다.

  1. RedHat Enterprise Linux 7.7
  2. Spring Boot 1.5
  3. Java 1.8
  4. WildFly 13

대충 이렇게 나열해 보면 이게 대체 뭐가 문제냐 하는 생각이 들 것이다.

KISA 정보에서 발행한 ‘주요정보통신기반시설 기술적 취약점 분석, 평가 방법 상세가이드’ 라는 것이 있다. 여기에는 특정 요소요소에 대해서 보안 설정을 어떻게 해야하는지를 가이드하고 있는데, 여기에 ‘U-42. 4.1 최신 보안패치 및 벤더 권고사항 적용’ 이란게 있다.

보안 가이드 패치권고

요약을 하자면 항상 최신의 패치 적용을 유지하라는 것이다.

그런데, RedHat Enterprise Linux 7.x 에 최신 버전은 7.9 이다. 더 최신은 RedHat Enterprise Linux 8.5 다. 시스템에 설치된 어떤 프로그램이 보안 취약점을 들어내고 있는지에 대해서 알지도 못하고 어짜피 네트워크가 단절되어 있어서 외부에 침입이 어렵다는 변명으로 운영체제(OS)에 대한 최신 패치 적용을 전혀 하지 않는다.

최신의 RHEL 을 사용하지 않는건 일단 내려놓더라도 쓰지도 않는 각종 프로그램들이 다 설치되어 있다. 대표적인게 gcc 컴파일러이다. 어디 gcc 컴파일러 뿐이랴.. g++ 도 있고 automake, autoconf, bison 등 C 소스코드를 컴파일 할 수 있도록 아주 다 깔려 있다.

크랙커가 가장 좋아라하는 시스템이 뚫어서 들어가보니 각종 컴파일러가 설치되어 있는 시스템이다. 컴파일러만 설치되어 있으면 마음대로 시스템을 가지고 놀수 있다. 그래서 될 수 있으면 컴파일러는 설치를 하지 말아야 한다. 아니 더 정확하게는 사용하지 않거나 불필요한 프로그램들과 명령어는 아예 설치를 하지 말아야 한다.

더 놀라운 것은 Java 시스템인데도 각종 gcc, g++ 컴파일러가 설치되어 있고 각종 라이브러리까지 아주 풍부하다는 것이다. 이에 대해서 이러면 안된다고 하면, 각종 보안 프로그램들이 철벽으로 작동하고 있고 ISMS 심사를 받았으니 됐다고 말한다.

Spring Boot 1.5 – 지원 끝

지원이 끝난 프레임워크다. 일단 지원이 끝났다면 될수 있는대로 빠르게 업데이트를 해야 한다. 하지만, 작동하는데 아무런 문제가 없으니까 계속 사용한다. 뭔가 문제가 생기면 그 라이브러리만 업데이트 하는 식이다.

Spring boot 1.5 전체를 패키지는 방대한데, 그중에서 자주 사용하는 일부가 문제가 생겼다는 뉴스가 나오면 그것만 바꾸는 식이다.

이렇다보니 Spring boot 2.x 에 대한 기술 습득은 꿈도 못꾼다. Reactive 가 뭐고 그래서 그게 뭐가 좋은지도 모르고 그것을 하면 뭐가 이득이 된다는 것은 둘째고 기술지원도 끝난 프레임워크를 그대로 고수하면서 DB 구조를 파악하고 데이터를 넣다 뺏다 하는 CRUD 프로그래밍으로 화면에 원하는 것을 이루게 되면 그것이 프로그래밍이 된 것이라는 사고방식에 젖어 있다.

고민따위는 안중에도 없고, 구글에서 검색해서 읽어본 기사에 뭘 좀 안다고 지식자랑하기에만 바쁘고 정작 책상에 앉아서 하는 일이라곤 지식자랑과는 한참 뒤처진 기술들을 다루고 있을 뿐이다.

지원이 끝났다는 것은 더 이상 보안관련 업데이트를 해주지 않는다는 것을 뜻한다. 물론 전 세계적으로 문제가 될 경우에 End Of Life 가 된 경우라도 업데이트를 제공해 주긴 한다. 하지만 지원이 끝난 것들은 더 이상 보안에 대해서 신경을 놔버리는 경우고 거들떠도 안보다는 사실을 알아야 한다.

아무도 신경을 안쓰는 거들떠보지도 않는 프레임워크로 일을 하는 것이 뭐 그리 대단한지, 단가 900 은 받아야겠다고 하는데 괜히 프리 경력이 정규직 경력을 인정받지 못하는게 아니다.

이렇게 글을 적어놓으면

프로젝트 오퍼를 낸 조직이 가이드를 내놓고 어떻게 하라고 해야지 그걸 왜 프리보고 뭐라 하냐?

이렇게 말할게 뻔하다. 그러니까 정규직 경력이 안되는 거다. 정규직에서는 적극적인 사람을 원하지 그렇게 수동적으로 뭐 가이드 안주면 못하겠다는 식의 사고를 가진 사람을 뽑으려 하지 않는다. 그것도 적어도 경력이 10년 이상이라면 이렇게 해서는 안된다, 이런 것쯤은 좀 바꿔야 한다는 정도도 있어야 하고 적극적으로 문제에 대해서 문제가 있으며 바꿔야 한다는 것을 적어도 어필 정도는 해줘야 하는데, 그런게 안되잖아..

더 큰 문제는 대충한다는데 있다. Spring Framework 3.x 처럼 오래된 것이긴 하지만 나름대로 프로그래밍 방법들이 존재한다. 과거에는 쓸만했던 것이여서 자료를 찾아보면 그때당시에 자료들도 상당하다. 그러면 Spring Framework 3.x 에 대한 그 때 당시에 쓸만했던 것을 지금에 쓰고 있느냐… 그냥 다 대충한다. 어짜피 딴데가면 안쓸거… 구형인데 뭐… 이거 열심해서 뭐하냐…. 아무도 열심히 안한다.

어짜피 구형이라 열심히 안하고 그렇다고 뭐 바꾸자는 제안조차 못하고… 그냥 돌아가게만 만들자식이란게 문제다.

Wildfly 13 – End Of Life

Wildfly 는 예전에 Jboss AS 라는 오픈소스 엔터프라이즈 자바 서버였다. 그러던 것이 Redhat 에서 프로젝트를 인수(?) 하고 자사의 상용 엔터프라이즈 자바 서버를 Jboss EAP 라는 이름을 붙이자 네이밍에 차이를 두기 위해서 Wildfly 로 이름을 바꾼다.

Wildfly 는 이름을 바꾼것만이 아니라 릴리즈 주기를 바꾸게 되는데, 분기마다 메이저 업데이트를 하는 정책으로 바꾼 것이다. (분기마다 인지 1년마다 인지… 정확하지는 않음. 몇달 주기로 메이저 업데이트를 하겠다는 정책임) 이러한 정책은 Wildfly 의 Long Term Support 버전이 없다는 것을 말한다.

업데이트를 못 쫓아가는건 당연하고 무엇보다 JEE 스펙도 버전이 올라감에 따라 달라지다 보니 Servlet 엔진을 필요로하는 경에 버전 호환성이 맞지 않는 경우가 생긴다. 그것조차도 그렇다 치더라도 Wildfly 13 도 지원이 끝나기는 마찬가지다.

이렇게 주기적인 메이저 업데이트를 하는 자바 서버에 경우에 주기적으로 업데이트를 할 수 없는 경우에는 선택을 하지 말았어야 했다. RHEL 도 한번 설치하면 업데이트를 안하고 버티는 경우가 부지기수인데, 주기적인 업데이트를 고려해서 이것을 선택햇을리는 만무하다.

금융권은 더 심각

현재 내가 하고 있는 프로젝트의 경우에 한정해서 말을 하다보면, “그건 니가 있는 곳이 ㅈ같은 경우지… 똥 밟은 너를 탓해라” 하는 인간들이 대다수다.

그렇다면 과거, 그것도 긴 과거가 아닌 올해 있었던 금융권 프로젝트를 예를들어보자.

  • RedHat Enterprise Linux 7.7
  • gcc, g++ 컴파이러, automake, autoconf
  • WebLogic 12.1.x
  • Spring Framework 3.x

이런 환경에서 마이데이터니 뭐니,, 모바일이니 뭐니 서비스하고 앉아 있는게 현실이다.

더 웃긴건, WebLogic 서버를 사용하는데 환경은 AWS 클라우드에 올렸다는데 있다. 이게 뭐가 문제가 되느냐 하겠지만 WebLogic 는 Admin 서버와 Managed 서버로 나뉘며 Admin 서버가 반드시 있어야 하고 Managed 서버가 Admin 서버에 등록이 되어 있어야 한다.

이렇게 되면 AWS 클라우드에서 반드시 사용해야만 하는 AutoScaling 을 이용할 수가 없다. 물론 아예 이용할 수 없는 것은 아니지만, 별도의 노력이 조금 더 들어간다. 하지만, 그 별도의 노력조차도 안해서 그런지 AutoScaling 은 아예 접었고 닭 한마리 이벤트를 날리면 접속자가 폭주해 장애가 나는 곳이 금융 시스템이다.

KISA 도 결국 문제

이래저래 문제 해결을 위해서 노력한다고 하지만 한개는 있다. 그중에 다음과 같은 말들을 많이 한다. 적어도 금융권에서는..

Redhat Enterprise Linux 8.x 는 아직 보안 인증이 안됐다.

누가 어떻게 RHEL 8.x 에 대해서 보안인증을 해주나? KISA 가? KISA 가 발행하는 취약점 가이드에 Linux 에 대해서 RHEL 7 기준으로 설명되어 있어서 RHEL 8.x 는 아직 인증 없는 거다?

KISA 보안 가이드 유의사항

KISA 가 발행하는 취약점 가이드에는 위와같이 유의사항이 나와 있다. 하지만 현장에 있다보면 ‘인증이 아직 안됐다’ 라는 말을 많이 듣는다. 공공금융 프로젝트에서 인증을 안해준건지 뭔지 모르겠지만, KISA 라는 ISMS 주관사에서 저렇게 하고 있음에도 불구하고 다른 권위도 없고 보안에 관련해 국가적 위임도 받지 않는 곳에서 ‘인증’ 이란걸 하고 있다면 KISA 가 적극적으로 나서서 못하게 해야 한다.

더군다나 KISA 의 경우에 보안 취약점 가이드에는 절대로 하지 말아야 하는 항목들은 없다. 예를들어 ‘gcc 컴파일러 설치 금지’ 와 같은 것들도 없고 End of Life 된 운영체제나 프레임워크에 대한 금지 항목도 없다. ISMS 라는게 결국에는 가이드에 맞춰서 그걸 했냐하는 정도에 그치다보니 ‘그것만으로 됐다’ 하는 것으로 끝이다.

국가기관이 저렇게 나약하게, ‘절대적 기준 아니다’, ‘다양한 점검 방업을 사용하여 취약점 분석평가를 수행’ 등.. 말이 좋아서 저런 표현이지 그냥 대놓고 “니들이 알아서 잘 해봐라” 식과 뭐가 다르냐?

Log4j2 보안 취약점 패치

현재 프로젝트에서 log4j 보안 취약점 패치를 위해서 살펴보니 log4j 1.x 버전이였다. 지금의 log4j2 의 보안취약점은 JNDI 관련되어 있는데, log4j 1.x 에는 JNDI 기능 자체가 없다. 따라서 본 취약점에는 아무런 문제가 없다.

이런식의 결론에 도달하게 되어서 결국에는 아무런 조치도 하지 않았다. log4j 1.x 는 더 이상 유지보수가 안되는 버전이다. 하지만 이번에 터진 취약점과는 관계가 없기 때문에 그런대로 넘어가는 거다.

라고 윗분들의 결정했다. 이게 대한민국의 현주소다.

그래서 log4j 를 그냥 놔둘수도 없고 해서 logback 으로 바꿔 놓을려고 생각중이다. 테스트를 해보니 잘 될거 같다. 보고 따위는 안한다.. 그냥 바꿔놓는 거지.. 그냥 바꿔놔도 모른다. 아무도.. ㅋㅋ

JEE 7, JEE 8 and Jakarta EE 8

Java EE 7 Specification

Java EE 7 Overview
Java EE 7 Specification

Java EE 8 Specification

Java EE 8 Overview
Java EE 8 Specification

Jakarta EE 8 Specification

The Jakarta EE 8 has the same set of specifications from Java EE 8 with no changes in its features. The only change is the new process to evolve these specifications. With this, Jakarta EE 8 is a milestone in Java enterprise history, as it inserts these specifications in a new process to boost the specifications to a cloud-native application approach.

Jakarta EE 8: The new era of Java EE explained

Java EE version history

Java EE version history
https://www.packtpub.com/product/building-restful-web-services-with-java-ee-8/9781789532883

RedHat Enterprise Linux Subscription 관리

현재 프로젝트를 하면서 RHEL 을 테스트용으로 사용하고 있다. Developer 라면 가입을 하면 Linux 와 JDK 등을 무료로 사용할 있는 서브스크립션을 얻을 수 있다.

문제

RHEL 8.4 를 다운로드 받아서 서브스크립션 인증을 하고 설치까지 다하고 나서 이미지를 백업했다. 그런데, 시간이 얼마지나지 않아 RHEL 8.5 로 업데이트가 되었다. 이미지를 백업한 것은 Minimal Installation 을 유지하기 위한 것이였다.

RHEL 8.5 로 업그레이드를 하고 난 후에 문제가 있어서 다시 처음부터 해야할 상황이 되어서 RHEL 8.4 이미지를 가져와 부팅을 시켰다. 그리고 dnf 명령어를 이용해서 update 를 하려는데 다음과 같이 안되었다.

해결

subscription 관리 명령어를 제공 한다. 먼저 subscription 리스트를 확인해야 한다.

위와같이 활용가능한 서브스크립트가 나온다.

그러면 다음과 같이 서브스크립트를 업데이트해주면 되는데 다음과 같이 하면 된다.

이제 dnf 명령어를 이용해서 update 가 정상적으로 수행 된다.

참고

Red Hat Subscription Manager 를 사용하여 Red Hat 고객 포털 시스템에 등록하여 구독하는 방법