mTLS: 보안이 선택이 아닌 표준이 되는 OneEntry의 구현
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴, DevOps
대상자
- 웹/모바일 개발자, DevOps 엔지니어, 디지털 비즈니스 담당자
- 중간 이상의 기술 이해도와 DevOps 도구 사용 경험이 필요
핵심 요약
- mTLS는 클라이언트-서버 간 상호 인증을 통해 API 보안을 강화
- 인증 데이터 유출 방지, 무단 접근 차단, 네트워크 레벨 보안 제공
- OneEntry는 처음으로 mTLS를 기본 지원하는 Headless CMS
- CI/CD 통합, 환경별 인증서 관리, DevOps 수준 보안 제공
- mTLS vs OAuth/JWT: 상호 인증 기반의 보안이 우월
- 토큰 유출 위험 최소화, 네트워크 차단 기능 제공
섹션별 세부 요약
1. API 보안의 중요성
- 민감 정보 보호 필요성
- 고객 데이터 유출 → 법적 책임 및 브랜드 손상
- 인증 정보 유출 → 서비스 파괴 및 금전적 손실
- 상업 정보 보호
- 가격, 제안, 고객 데이터 유출 → 경쟁력 상실
- mTLS의 역할
- 서버-클라이언트 간 인증서 기반 인증
- 네트워크 레벨에서 무단 접근 차단
2. mTLS의 핵심 기능
- 신뢰된 서비스에 대한 접근 제한
- 유효한 인증서를 가진 애플리케이션만 API 접근 허용
- 트래픽 유출 및 스푸핑 방지
- 인증서는 키 유출 시만 위험, 토큰보다 안전
- DevOps 수준 보안
- GitHub Actions, GitLab CI와의 통합 가능
- 환경 변수로 인증서 전달, 코드 저장 없이 보안 유지
- 환경별 유연한 구성
- 프로덕션, 테스트, 스테이징 환경에 맞는 인증서 발급 가능
3. OneEntry에서의 mTLS 구현
- 관리자 패널 설정
- Access 탭에서 mTLS 모드 선택
- Application Certificates 생성 및 다운로드
- 프로젝트 구조 설정
cert/
폴더에client.crt
,client.key
파일 배치- Proxy 설정 파일 생성
```javascript
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api',
createProxyMiddleware({
target: 'https://api.example.com',
secure: true,
changeOrigin: true,
ssl: {
cert: fs.readFileSync('cert/client.crt'),
key: fs.readFileSync('cert/client.key')
}
})
);
};
```
- 의존성 설치
```bash
npm install http-proxy-middleware
```
- UFW 및 SSH 구성
```bash
sudo ufw default deny incoming
sudo ufw allow 22,80,443/tcp
sudo ufw enable
sudo nano /etc/ssh/sshd_config
sudo systemctl restart ssh
```
- Nginx 구성 예시
```nginx
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass https://api.example.com;
proxy_ssl_certificate /path/to/client.crt;
proxy_ssl_certificate_key /path/to/client.key;
}
}
```
- 인증서 발급
```bash
sudo certbot certonly --webroot -w /var/www/html -d your-domain.com
```
- 사용자 생성 및 Runner 구성
```bash
pwgen -s 15 1
useradd -m github-runner
usermod -aG docker,sudo github-runner
chsh -s /bin/bash github-runner
sudo su - github-runner
```
- Docker Compose 설정
```yaml
version: '3'
services:
runner:
image: 'gitlab/gitlab-runner:v16.2.0'
privileged: true
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- './volumes/etc/gitlab-runner:/etc/gitlab-runner'
```
- config.toml 편집
```toml
privileged = true
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
user = "gitlab-runner"
```
- Runner 등록
```bash
docker compose run runner register
```
4. mTLS vs 다른 보안 방식 비교
- OAuth
- 사용자 인증에 효과적, 서버 간 통신 시 토큰 유출 위험
- API 토큰
- 구현이 간단, 상호 인증 미지원
- JWT
- 널리 사용됨, 보안 강화를 위한 추가 메커니즘 필요
- mTLS
- 상호 인증, 데이터 유출 방지, 네트워크 레벨 보안 제공
결론
- OneEntry는 mTLS를 기본으로 제공하는 유일한 Headless CMS
- 보안 강화 및 구현/유지보수 비용 절감 효과
- DevOps 도구와의 통합을 통해 자동화된 보안 프로세스 구현 권장