보안 전송 기반 등록
보안 전송 기반 등록 (EST)
이 문서에서는 Vault의 PKI 시크릿 엔진이 구현하는 EST 프로토콜의 설정과 제한 사항을 다룰게요.
출처: 문서
본문
EST(Enrollment over Secure Transport)란 무엇인가요?
EST 프로토콜은 IETF에서 표준화한 프로토콜로, RFC 7030에 정의되어 있어요. 클라이언트가 클라이언트 인증서와 관련 인증 기관(CA) 인증서를 취득할 수 있게 해 줍니다.
Vault PKI 마운트에서 EST 지원 활성화하기
기존 PKI 마운트가 EST 클라이언트를 서비스하도록 설정하는 데 필요한 단계 목록이에요. 각 단계는 크게 세 가지 범주로 나눌 수 있어요.
- 인증 메커니즘 (Authentication mechanisms)
- PKI 튜너블 파라미터 갱신 (Updating PKI tunable parameters)
- PKI EST 설정 (PKI EST configuration)
EST 인증 구성하기
EST 프로토콜은 몇 가지 서로 다른 인증 메커니즘을 규정하며, Vault는 그중 두 가지를 지원해요.
- HTTP 기반 클라이언트 인증 (HTTP-Based Client authentication)
- 인증서 TLS 인증 (Certificate TLS authentication)
이 두 인증 메커니즘 모두 같은 네임스페이스 안의 별도 Vault 인증 마운트를 활용해서, 클라이언트가 제공한 크레덴셜과 함께 시행할 클라이언트의 ACL 정책을 검증해요. 두 인증 방식 모두 동시에 활성화할 수 있지만, EST를 통해 크레덴셜이 제공된 방식에 따라 클라이언트 인증에는 단 하나의 마운트만 사용됩니다. EST 클라이언트가 HTTP 기반 인증 크레덴셜을 보내면, 그게 TLS 클라이언트 인증서보다 우선 적용돼요.
정확한 회계(accounting)를 위해, EST 인증을 지원하는 마운트는 이 용도로 전용으로 사용하고 다른 워크플로와 공유하지 않는 것이 좋아요. 즉, 같은 유형의 인증 마운트가 다른 용도로 이미 있더라도, EST를 위해 새 인증 마운트를 만들어 주세요.
EST 클라이언트용 인증 마운트를 설정할 때는 토큰 타입이 배치 토큰(batch tokens)을 반환하도록 구성해야 해요. EST로 들어오는 모든 요청을 인증해야 하므로, 과도한 리스(lease)가 생성되고 영속되는 것을 피하려면 배치 토큰이 필요합니다.
ACL 정책 안의 경로는 클라이언트가 처음 사용하는 .well-known/est/ URI가 아니라, 마운트를 포함한 내부 리다이렉트 경로와 일치해야 해요. 플러그인에서 사용할 경로는 클라이언트가 사용하는 EST 라벨에 대해 설정된 경로 정책(path policy)에 따라 달라집니다.
경로 정책으로 sign-verbatim을 사용한다면, 다음 ACL 정책이 인증된 클라이언트가 필요한 PKI EST 경로에 접근할 수 있게 해 줘요.
path “pki/est/simpleenroll” {
capabilities=[“update”, “create”]
}
path “pki/est/simplereenroll” {
capabilities=[“update”, “create”]
}
역할 기반 경로 정책에는 다음 예시 정책을 사용할 수 있어요.
path “pki/roles/my-role-name/est/simpleenroll” {
capabilities=[“update”, “create”]
}
path “pki/roles/my-role-name/est/simplereenroll” {
capabilities=[“update”, “create”]
}
PKI 마운트 튜너블 파라미터 갱신하기
인증 마운트를 만들고 설정한 뒤에는, 인증 마운트의 accessor를 캡처해서 PKI 마운트의 위임 인증 accessors(delegated auth accessors)에 추가해야 해요.
인증 마운트의 accessor 필드를 얻으려면 다음 명령을 사용하면 됩니다.
$ vault read -field=accessor sys/auth/auth/userpass
일부 클라이언트에서 EST가 동작하려면, 몇몇 응답 헤더를 명시적으로 허용하고 마운트가 인증을 위임할 수 있는 accessor 목록도 구성해야 해요. 다음 명령은 필요한 응답 헤더를 부여하며, delegated-auth-accessors의 값은 여러분의 값에 맞게 교체해 주세요.
$ vault secrets tune \
-allowed-response-headers="Content-Transfer-Encoding" \
-allowed-response-headers="Content-Length" \
-allowed-response-headers="WWW-Authenticate" \
-delegated-auth-accessors="auth_userpass_e2f4f6d5" \
-delegated-auth-accessors="auth_cert_4088ac2d" \
pki
PKI EST 설정
EST 프로토콜은 EST 서버가 RFC-5785에 정의된 대로 .well-known/est/ URI 경로 프리픽스를 지원해야 한다고 규정해요. EST 클라이언트는 보통 서로 다른 경로 프리픽스에 대한 구성을 제공하지 않으며, 기본적으로 https://<hostname>:<port>/.well-known/est/ 경로의 호스트를 두드립니다.
일부 클라이언트는 서로 다른 발급자(issuer)를 수용하기 위해 단일 라벨(때로는 추가 경로 세그먼트(additional path segment)라고도 함)을 허용해요. 이 라벨은 EST 경로 뒤에 추가되는데, 예를 들어 https://<hostname>:<port>/.well-known/est/<label>/처럼 됩니다.
사용법(기본값, 발급자 또는 역할) 주변에 서로 다른 제한을 두려면, EST 프로토콜 엔드포인트용 경로 정책을 EST 라벨과 연결해야 해요.
| 경로 | 기본 정책 | 발급자/역할 |
|---|---|---|
/pki/est/{cacerts, simpleenroll, simplereenroll} |
sign-verbatim |
default |
/pki/est/{cacerts, simpleenroll, simplereenroll} |
role:role_ref |
역할(role)이 지정한 값 :role_ref |
/pki/roles/:role/est/{cacerts, simpleenroll, simplereenroll} |
(any) | 역할이 지정한 값 :role |
Vault EST 설정 API에서 PKI 마운트를 default_mount를 true로 활성화해 기본 마운트로 지정하거나, label_to_path_policy 안에서 라벨 매핑을 제공할 수 있어요.
완전한 EST 설정의 예로, pki 마운트가 .well-known/est 기본 라벨과 함께 two additional labels 인 test-label과 sign-all 두 라벨을 등록하게 하는 설정을 볼게요.
test-label은 기존 est-clients PKI 역할을 제한과 기본값에 사용하면서, 역할 안에 지정된 발급자를 활용해요. 나머지 두 라벨인 default와 sign-all은 sign-verbatim 유형의 역할을 활용해서, 기본 발급자를 사용해 어떤 식별자든 발급할 수 있게 해 줍니다.
vault write pki/config/est -<<EOC
{
"enabled": true,
"default_mount": true,
"default_path_policy": "sign-verbatim",
"label_to_path_policy": {
"test-label": "role:est-clients",
"sign-all": "sign-verbatim"
},
"authenticators": {
"cert": {
"accessor": "auth_cert_4088ac2d"
},
"userpass": {
"accessor": "auth_userpass_e2f4f6d5"
}
}
}
EOC
제한 사항 (Limitations)
EST API 지원
초기 구현은 EST 프로토콜의 필수 API 엔드포인트만 다룹니다. 명세의 다음 선택 기능은 현재 지원되지 않아요.
다음 Vault PKI 기능은 EST 통합을 지원하지 않아요.
- 인증서 메타데이터(Certificate Metadata) - EST는 메타데이터를 제공할 수단이 없어요.
- 인증서 발급 외부 정책 서비스 CIEPS
Well Known 리다이렉션
EST 설정 파라미터 default_mount 및/또는 label_to_path_policy를 사용해 .well-known 경로 공간 안의 경로를 등록할 수 있어요. 다음 제한이 적용됩니다.
- 모든 네임스페이스에 걸쳐 단 하나의 PKI 마운트만
default_mount로 활성화할 수 있어요. label_to_path_policy안의 라벨은 네임스페이스와 무관하게 모든 PKI 마운트에서 고유해야 해요.- 퍼포먼스 세컨더리 클러스터의 로컬(local) PKI 마운트에서 EST를 활성화할 때는 주의해야 해요. Vault는 이 사용 사례에서 서로 다른 PKI 마운트 간에 설정된 EST 라벨이 충돌하지 않는다는 것을 보장할 수 없어요. 이로 인해 같은 EST 라벨에 대해 클러스터마다 서로 다른 발급자가 사용될 수 있습니다.
API
PKI 시크릿 엔진은 완전한 HTTP API를 제공해요. 자세한 내용은 PKI 시크릿 엔진 API 문서를 참고해 주세요.
더 알아보기 (Learn more)
- EST 설정 API에 대한 자세한 내용은 Configure EST API 문서를 확인하세요.
- EST 프로토콜 명세는 RFC 7030에서 볼 수 있어요.