서비스 계정 VPN 액세스: 인증서와 공유 로그인
무인 VPN 액세스를 위해 머신 인증서와 저장된 암호를 비교하고, 실제 권한 한계는 로그인 후 실행되는 정책에 두십시오.
무인 VPN 설정은 거의 모두 두 가지 설계로 덮입니다. 스크립트에 보관하는 공유 사람 로그인 또는 호스트에 결합된 머신 인증서입니다. 둘은 서로 다른 지점에서 실패하며, 이는 설정 속도보다 중요합니다. 저장된 암호는 소유자가 바꾸거나 떠나면 깨지고, 인증서는 만료되거나 키 없이 호스트가 다시 구축될 때 깨집니다. 어떤 비용을 감당할 수 있는지는 세 가지 조건이 정하며, 권한 부여 정책이 그렇게 하기 전까지 어느 설계도 아무것도 제한하지 않습니다.
계정이 아니라 작업에서 시작하십시오
작업이 경계를 정의합니다. 어떤 목적지, 어떤 서비스, 어느 시간대, 세션이 얼마나 오래 실행될 수 있는지입니다. 터널 경로는 그 경계의 절반일 뿐입니다. 게이트웨이는 세션 허용 여부를 결정하고, 그 뒤의 리소스는 세션이 무엇을 할 수 있는지 결정합니다. 먼저 목록을 쓰고 소유자를 명시하십시오. 두 ID 설계 모두 이를 충족해야 합니다.
작성하는 동안 인증과 권한 부여를 분리하십시오. 인증은 누가 연결하는지에 답하고, 권한 부여는 세션이 이후 무엇에 도달할 수 있는지에 답합니다. RADIUS는 후자를 Filter-Id, Framed-IP-Address, Session-Timeout, Class 같은 속성으로 나르며, 로그인이 성공하면 게이트웨이가 이를 붙입니다. 로그인만 바꾸고 권한 부여를 그대로 두는 설계는 아무것도 제한하지 않았습니다.
공유 사람 로그인: 암호가 경계가 됩니다
사람 계정 재사용은 가장 빠른 길이며 가장 빨리 낡는 길입니다. 자격 증명이 암호이므로 스크립트, 환경 파일, 스케줄러 구성에 남고 모든 사본을 교체해야 합니다. 소유자가 금요일에 암호를 바꾸면 다음 실행에서 작업이 실패하고 아무도 지켜보지 않습니다.
MFA가 이 설계가 보통 무너지는 지점입니다. 스크립트는 푸시 요청에 응답할 수 없으므로 계정이 정책에서 제외되고, 그것은 공격자가 고를 바로 그 계정입니다. 예외, 신뢰할 수 있는 위치 우회, 계정별 면제가 늘어나며, 테넌트 설정을 다음에 읽는 사람에게는 어느 것도 보이지 않습니다.
귀속도 또 다른 비용입니다. 게이트웨이 로그의 모든 세션은 같은 사용자 이름을 가지므로 야간 동기화를 그것을 작성한 사람의 작업과 구별할 수 없고, 작업을 취소하는 것은 그 사람을 취소하는 것입니다.
머신 인증서: 호스트에 결합된 ID
인증서는 질문을 '계정이 무엇을 아는가'에서 '호스트가 무엇인가'로 바꿉니다. EAP-TLS에서 클라이언트는 인증서를 제시하고 일치하는 개인 키의 소유를 증명합니다. 정책 서버는 주체나 컴퓨터 계정을 그룹에 매핑하고 그 그룹의 정책을 적용합니다. 프롬프트도 없고, 텍스트 파일에 놓인 공유 비밀도 없습니다.
그것이 만드는 경계는 사람들이 기대하는 것보다 좁습니다. 인증서는 작업이 아니라 호스트를 인증하며, root나 로컬 관리자 권한이 있는 사람은 누구나 그 호스트에서 그 키를 쓸 수 있습니다. 키는 플랫폼이 보호하는 곳에 두십시오. Windows 인증서 저장소에서 내보낼 수 없게, 프로필이 허용하는 곳에서 TPM 지원, 또는 Linux에서 root 소유의 0600 파일입니다. 호스트 침해는 자격 증명 침해입니다.
만료가 반복되는 고장입니다. 일요일에 만료되는 인증서는 일요일에 작업을 멈추고, 게이트웨이는 보통 날짜를 밝히지 않은 일반 인증 실패를 보고합니다. 작업 호스트에서 날짜를 runbook의 일부로 확인하십시오:
openssl x509 -in client.pem -noout -subject -issuer -dates
ipsec listcerts
해지는 게이트웨이가 확인하는 경로가 필요합니다. OpenVPN 은 crl-verify 옵션으로 CRL을 읽고, strongSwan은 연결 프로필 구성 방식에 따라 CRL이나 OCSP에 의존합니다. 둘 다 연결되지 않았다면 호스트 제거는 인증서 만료를 기다리는 것을 뜻합니다.
둘 사이를 결정하는 세 가지 조건
기준 설계가 아니라 보유한 플랫폼과 비교하십시오.
첫 번째 조건은 게이트웨이가 머신 ID를 권한 부여할 수 있는지입니다. RADIUS 사용자 이름을 디렉터리 사용자에 매핑할 뿐이라면 인증서는 호스트를 인증한 뒤 권한 부여에서 멈춥니다. 두 번째 조건은 작업이 사용자 계정만 가진 리소스 액세스를 필요로 하는지입니다. 매핑된 공유나 좌석당 라이선스 같은 것입니다. 그렇다면 머신 ID로 대체할 수 없고, 정직한 답은 범위가 좁은 정책을 가진 전용 사용자 계정입니다. 세 번째 조건은 루프에 사람 없이 자격 증명을 교체할 수 있는 사람입니다. 자동 등록은 인증서 유지 비용을 낮추지만, 한 사람만 아는 암호는 그렇지 않습니다.
| Constraint | Machine certificate | Dedicated user account with stored secret |
|---|---|---|
| Unattended login | Private key proof, no prompt | Only if the account is exempted from MFA |
| Resource expects a user identity | Works only when the resource accepts computer accounts | Matches the access a person would have |
| Rotation | Re-enrollment, often automated | Secret change plus redeploy of every copy |
| Revocation speed | Tied to CRL or OCSP refresh | Disable the account, immediate |
표를 순위가 아니라 비용 목록으로 읽으십시오. 저장된 비밀 열은 해지 속도와 사용자 계정만 이해하는 리소스와의 호환성에서 이깁니다. 인증서 열은 교체와, 스크립트를 돌리기 위해 MFA를 약화하지 않는 점에서 이깁니다.
한계는 인증 후 정책에 두십시오
어떤 ID를 고르든 권한 한계는 인증 후 실행되는 정책에 속합니다. NPS에서는 네트워크 정책이 순서대로 평가되고 모든 조건과 일치하는 첫 정책이 설정을 적용하므로, 좁은 정책 위에 놓인 넓은 정책이 클라이언트가 무엇을 제시하든 결과를 결정합니다. Microsoft는 조건과 설정 모델을 다음 문서에서 설명합니다. NPS 정책 개요.
작업에 자체 그룹이나 정책 조건을 주되, 머신 ID가 지닌 무언가(인증서 템플릿, 발신 스테이션 식별자, 또는 전용 풀의 주소)에 기반하십시오. 그다음 속성으로 세션을 제한하십시오. 게이트웨이가 매핑하는 역할의 Filter-Id, 멈춘 작업이 며칠씩 세션을 붙잡지 않고 다시 인증하도록 짧은 Session-Timeout, 반대편에서 방화벽을 적용하는 풀의 Framed-IP-Address입니다. 애플리케이션 권한 부여는 별개입니다: 데이터베이스 서버로 가는 터널은 그 안의 테이블을 읽을 권한이 아닙니다.
거부를 검증하고, 그다음 제거를 계획하십시오
작동하는 액세스는 최소 권한에 대해 아무것도 증명하지 않습니다. 대신 거부를 시험하십시오. 작업 ID로 연결해 목록 밖 목적지에 도달하려 하고, 게이트웨이가 하나만 허용해야 한다면 두 번째 동시 세션을 열고, 자격 증명을 해지한 뒤 로그인을 반복하십시오.
그다음 같은 세션을 두 곳에서 확인하십시오. 게이트웨이 로그는 인증된 ID를 보여 주고, 정책 서버 로그는 어떤 정책이 일치했고 어떤 속성을 반환했는지 보여 줍니다. OpenVPN에서는 서버가 인증서의 일반 이름을 기록하고, strongSwan의 ipsec statusall은 사용 중인 ID와 함께 설정된 터널을 출력합니다. 두 로그가 ID에 대해 일치하지 않으면 정책은 가정과 다른 무언가에 일치하고 있습니다.
제거는 설계의 일부이며 정리 스프린트가 아닙니다. 삭제할 모든 것(인증서나 계정, 그룹 구성원 자격, 네트워크 정책, 풀 항목, 대상의 방화벽 규칙)을 적고, 작업을 다시 만들기 쉬울 때 한 번 실행하십시오.
오늘 시작한다면 이 순서로 일하십시오. 리소스 목록을 쓰고, 세 조건으로 ID를 고르고, 한계를 정책에 두고, 작업이 운영에 들어가기 전에 거부 하나를 연습하십시오.