TLS 인증서 인증 방식
TLS 인증서 인증 방식
참고: 이 엔진은 TLS 또는 서명 검증의 일부로 외부 X.509 인증서를 사용할 수 있어요. SHA-1을 사용하는 X.509 인증서에 대한 서명 검증은 사용되지 않으며 Vault 1.12부터 해결 방법 없이는 더 이상 사용할 수 없어요. 자세한 내용은 deprecation 공지를 참고하세요.
cert 인증 방식은 CA가 서명했거나 자체 서명된 SSL/TLS 클라이언트 인증서를 사용한 인증을 허용해요. SSL/TLS 클라이언트 인증서는 ExtKeyUsage 확장의 용도가 ClientAuth 또는 Any로 설정된 것으로 정의돼요.
신뢰된 인증서와 CA는 certs/ 경로를 사용해 인증 방식에 직접 구성돼요. 이 방식은 외부 소스에서 신뢰된 인증서를 읽을 수 없어요.
CA 인증서는 역할과 연결되며, 역할 이름과 CRL 이름은 소문자로 정규화돼요.
이 인증 방식을 사용하려면 Vault 구성에서 tls_disable와 tls_disable_client_certs가 false여야 한다는 점을 기억하세요. 인증서가 TLS 통신 자체를 통해 전송되기 때문이에요.
출처: 문서
본문
폐기 확인 (Revocation checking)
Vault 0.4부터 이 방식은 폐기 확인을 지원해요.
권한 있는 사용자는 주어진 이름으로 식별되는 PEM 형식 CRL을 제출할 수 있으며, 언제든 갱신하거나 삭제할 수 있어요. 또한 신뢰된 CRL 배포 지점의 URL을 설정하고 Vault가 필요할 때 CRL을 가져오게 할 수 있어요.
CRL이 있을 때 클라이언트 인증 시점에:
- 클라이언트가 체인에서 어떤 인증서도 폐기된 시리얼 번호와 일치하지 않는 체인을 제시하면 인증이 허용돼요.
- 클라이언트가 폐기된 시리얼 번호가 없는 체인을 제시하지 않으면 인증이 거부돼요.
이 방식은 좋은 보안을 제공하면서도 유연성을 허용해요. 예를 들어 중간 CA를 폐기하려 한다면, 클라이언트에 두 인증서 체인(경로에 초기 중간 CA를 포함하는 체인과 교체 중간을 포함하는 체인)을 구성할 수 있어요. 초기 중간 CA가 폐기되면 교체 중간을 포함한 체인은 여전히 클라이언트가 성공적으로 인증하게 허용해요.
N.B.: 매칭은 시리얼 번호로만 수행돼요. Vault의 pki 방식을 포함한 대부분의 CA에서 시리얼 번호는 전역적으로 고유하므로 여러 CRL을 성공적으로 사용할 수 있어요. 그러나 RFC는 시리얼 번호가 CA마다 고유하기만 하면 된다고 규정하므로, 일부 CA는 시리얼 번호를 순서대로 발급해 이 방식의 같은 마운트에서 두 CA의 CRL을 사용하려 하면 충돌이 날 수 있어요. 해결 방법은 cert 방식을 여러 개 마운트하고, 각각 하나의 CA/CRL로 구성하며, 클라이언트가 적절한 마운트에 연결하게 하는 것이에요.
또한 CRL 배포 지점이 설정되지 않으면 이 방식은 CRL을 스스로 가져오지 않으며, CRL의 지정된 다음 갱신 시간도 고려하지 않아요. CRL이 더 이상 사용되지 않으면 관리자가 방식에서 제거해야 해요.
자동 또는 수동 CRL 관리 외에도 구성된 인증서에 대해 OCSP를 활성화할 수 있으며, 이 경우 Vault는 제시된 인증서에 지정되었거나 인증 방식에 구성된 OCSP 서버를 조회해 폐기를 확인해요.
인증 (Authentication)
CLI를 통해
아래는 web cert 역할과 연결된 CA가 서명한 인증서(cert.pem)와 키(key.pem)를 제시해 web cert 역할에 대해 인증해요. web 이름은 아래 구성 예시가 auth/cert/certs/web 경로에 쓰는 것과 연결된다는 점을 기억하세요. cert 역할 이름이 지정되지 않으면 인증 방식은 모든 신뢰된 인증서에 대해 인증을 시도해요.
참고: 여기 사용된
-ca-cert값은 Vault TLS 리스너 CA 인증서이지, 클라이언트 인증 인증서를 발급한 CA가 아니에요. 이 명령을 실행하는 로컬 시스템이 Vault 서버 인증서를 발급하는 데 사용된 CA를 신뢰한다면 생략할 수 있어요.
$ vault login \
-method=cert \
-ca-cert=vault-ca.pem \
-client-cert=cert.pem \
-client-key=key.pem \
name=web
API를 통해
로그인의 엔드포인트는 /login이에요. 클라이언트는 TLS 인증서로 연결하기만 하면, 로그인 엔드포인트에 도달하면 인증 방식이 클라이언트를 인증할 일치하는 신뢰된 인증서가 있는지 결정해요. 선택적으로 인증할 단일 cert 역할을 지정할 수 있어요.
참고: 여기 사용된
--cacert값은 Vault TLS 리스너 CA 인증서이지, 클라이언트 인증 인증서를 발급한 CA가 아니에요. 이 명령을 실행하는 로컬 시스템이 Vault 서버 인증서를 발급하는 데 사용된 CA를 신뢰한다면 생략할 수 있어요.
$ curl \
--request POST \
--cacert vault-ca.pem \
--cert cert.pem \
--key key.pem \
--data '{"name": "web"}' \
https://127.0.0.1:8200/v1/auth/cert/login
구성 (Configuration)
인증 방식은 사용자나 머신이 인증하기 전에 미리 구성되어야 해요. 이 단계들은 보통 운영자나 설정 관리 도구가 수행해요.
1. 인증서 인증 방식을 활성화합니다.
$ vault auth enable cert
2. 인증이 허용되는 신뢰된 인증서로 구성합니다.
$ vault write auth/cert/certs/web \
display_name=web \
policies=web,prod \
[email protected] \
ttl=3600
이렇게 하면 "web" 표시 이름과 "web", "prod" 정책을 가진 새 신뢰된 인증서 "web"이 만들어져요. 클라이언트를 검증하는 데 사용되는 인증서(공개 키)는 "web-cert.pem" 파일로 주어져요. 마지막으로 선택적 ttl 값을 초 단위로 제공해 리스 기간을 제한할 수 있어요.
로드 밸런싱/프록시 고려 사항
Vault 서버가 리버스 프록시나 로드 밸런서 앞에 있으면 TLS가 Vault 이전에 종료돼요. 그 경우 프록시는 검증된 클라이언트 인증서를 헤더로 제공해야 하며, Vault 구성의 listener 스탠자에 구성해야 해요.
로드 밸런서가 제공하는 헤더 이름으로 listener를 구성하세요.
이 모드에서 인증의 보안은 로드 밸런서가 클라이언트에게 전체 TLS 검증을 수행하고, 로드 밸런서와 Vault 사이의 연결이 이상적으로 상호 TLS로 보호되는 것에 달려 있어요.
API
TLS Certificate 인증 방식은 완전한 HTTP API를 제공해요. 자세한 내용은 TLS Certificate API 문서를 참고해 주세요.
Terraform
Vault Terraform 프로바이더로 TLS Certificate 인증 리소스를 프로그래밍 방식으로 관리할 수 있어요. 자세한 내용은 Terraform Registry 문서를 참고하세요.
더 알아보기 (Learn more)
- TLS 인증서 인증 방식 전체 API는 TLS Certificate API 문서를 참고하세요.
- Vault PKI 시크릿 엔진으로 인증서를 발급하는 방법은 PKI 시크릿 엔진 문서를 참고하세요.