TLS 인증 구성하기
개요
본 문서에서는 사설 TLS 인증서를 발급하여 해당 TLS 인증서를 가진 클라이언트만 ETCD3 클러스터에 접근하여 데이터 CRUD를 수행할 수 있도록 구성하는 방법에 대하여 설명합니다.
인증서 생성
필요한 Tool 설치
사설 인증서 설치 및 관리를 위해 Cloudflare의 cfssl, cfssljson 을 설치합니다.
#!/bin/bash
CFSSL_VERSION=1.6.5
CFSSL_PATH=/usr/local/bin
ARCH=amd64
curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssl_${CFSSL_VERSION}_linux_${ARCH}" -o cfssl
curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssljson_${CFSSL_VERSION}_linux_${ARCH}" -o cfssljson
curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssl-certinfo_${CFSSL_VERSION}_linux_${ARCH}" -o cfssl-certinfo
chmod +x cfssl cfssljson cfssl-certinfo
sudo cp cfssl cfssljson cfssl-certinfo ${CFSSL_PATH}/인증서 발급하기
Makefile을 필요에 따라 아래와 같이 수정합니다.
해당 예시의 경우, 파일 관리 편의성을 위해
cfssljson명령어로 export 하여 생성하는.pem파일의 이름 템플릿을 변경하였습니다.
인증서 CSR (Certificate Signing Request) 를 필요에 따라 아래와 같이 수정합니다.
“CN” 항목은 삭제합니다. 현 Patroni에서 ETCD에 접근하기 위해 클라이언트로 이용하는 Python gRPC gateway가 TLS Common Name이 적용된 인증서를 지원하지 않습니다.
host항목에 구성할 ETCD 클러스터의 IP 주소 및 호스트 이름 (필요시) 을 배열로 입력합니다.
인증기관 (CA) CSR 을 필요에 따라 아래와 같이 수정합니다.
“CN” 항목은 삭제합니다.
필요에 따라
names항목을 아래와 같이 수정합니다.
make 를 실행하여 인증서를 생성합니다.
설정한
infra0,infra1,infra2환경변수 값은 생성된.pem인증서의 파일 이름으로 사용됩니다.
ETCD 연동
ETCD 실행 시 환경변수 파일
/etc/etcd/etcd.env혹은 명령줄 인자를 통해https연결과 인증서를 설정합니다.생성한 인증기관 (CA) 인증서
etcd-ca,etcd-ca-key를 이용해 서명된 인증서를 가지고 있는 클라이언트만 이 ETCD 인스턴스에 접근할 수 있게 됩니다.
/etc/etcd/etcd.env 파일 혹은 ETCD 실행 시 명령줄 인자를 통해 ADVERTISE_CLIENT_URLS, LISTEN_CLIENT_URLS 변경합니다.
http://127.0.0.1:2379는 Local 환경에서의 사용을 위한 것으로 불필요하면 삭제 가능합니다.#Certs 항목은 위 과정을 통해 발급한 인증서들을 등록합니다.
peer는 Client, 나머지는 Server 사이드 TLS 인증서로 활용됩니다.ETCD_TRUSTED_CA_FILE: 서버가 신뢰할 TLS 인증서의 인증 기관 (CA) 인증서 경로입니다. 유효한 인증서가 구성된 경우 ETCD 서버는 모든 클라이언트의 인증서를 검증하게 됩니다. 별도 인증 기관을 설정하지 않고 클라이언트 인증을 활용하는 경우ETCD_CLIENT_CERT_AUTH=true옵션을 활용해야 합니다.ETCD_CERT_FILE: Client - Sever 통신에 사용할 TLS 인증서 경로입니다.ETCD_KEY_FILE: Client - Server 통신에 사용할 TLS Key 경로입니다.ETCD_PEER_TRUSTED_CA_FILE: ETCD Peer간 통신에 사용할 TLS 인증서의 인증 기관 (CA) 인증서 경로입니다.ETCD_PEER_CERT_FILE: ETCD Peer간 통신에 사용할 TLS 인증서 경로입니다.ETCD_PEER_KEY_FILE: ETCD Peer간 통신에 사용할 TLS Key 경로입니다.
Last updated
