VPN 그룹 정책을 위한 ASA LDAP 그룹 매핑과 DAP 비교
LDAP 속성 맵과 DAP 정책은 모두 그룹 정책을 선택하지만 서로 다른 지점에서 동작합니다. 실제로 ASA 세션이 어느 쪽을 사용했는지 확인하십시오.
AnyConnect 세션이 받을 그룹 정책을 정하는 레코드는 두 개이며, 각각 구성의 다른 위치에 있고 실패 방식도 다릅니다. LDAP 속성 맵은 인증 중에 디렉터리 값을 ASA 권한 부여 속성으로 변환합니다. DAP 레코드는 그 뒤에 조건을 평가하고 속성을 추가하거나 덮어쓸 수 있습니다. 둘 다 같은 정책 이름에 도달할 수 있으므로 로그인이 성공했다는 사실만으로는 어느 메커니즘이 작동했는지 알 수 없습니다. 둘을 비교하는 이유는 두 번째가 첫 번째를 조용히 덮어쓰도록 두지 않고 의도적으로 하나를 선택하는 데 있습니다.
두 메커니즘, 두 결정 지점
선택은 세 가지 질문으로 좁혀집니다. 디렉터리의 단일 속성 값만으로 결정되는지, 그 값 이상이 필요한지, 둘 다 일치할 때 어느 쪽이 우선하는지입니다.
입력이 그룹 구성원 자격뿐이라면 속성 맵이 더 작은 도구이며 감사하기도 쉽습니다. 맵 하나가 AAA 서버 하나에 연결되고 그룹마다 한 줄이면 됩니다. 선택이 장치 상태, 엔드포인트 ID, 두 번째 속성, 시간대를 고려해야 한다면 맵의 입력은 부족해지고 그 규칙을 표현할 수 있는 것은 DAP입니다. 둘 다 사용 중이라면 둘 중 하나를 쓰기 전에 해당 릴리스의 우선순위를 확인하십시오. DAP 레코드와 일치한 세션이 맵이 반환한 정책을 유지하지 않을 수 있기 때문입니다. 나머지는 모두 행정 작업입니다.
속성 맵 경로, 구성 순서대로
맵 경로는 AAA 서버 정의에서 시작합니다. 속성 맵은 연결 프로필이 실제로 사용하는 LDAP 서버 항목에 연결되어야 합니다. 실행 중인 구성에 존재하더라도 그 서버가 참조하지 않는 맵은 아무것도 바꾸지 않습니다. 바로 그 연결 줄이 나머지 구성을 살아 있게 합니다. ASA LDAP 매핑 가이드 는 9.x 릴리스의 맵 구문에 대한 참고 자료입니다.
맵 내부에서 한 문장은 디렉터리 속성과 그것이 공급하는 ASA 속성을 지목하고, 이어지는 문장들은 특정 값을 변환합니다. map-name memberOf Group-Policy 뒤에 오는 map-value memberOf CN=VPN-Support,OU=Groups,DC=corp,DC=example Support-ReadOnly 이 형태입니다. 왼쪽은 디렉터리가 반환한 값이고, 오른쪽은 이미 존재해야 하는 그룹 정책의 이름입니다. 고유 이름과 정책 표시 이름은 서로 바꿀 수 없으며, 두 문자열 중 하나라도 조금만 어긋나면 로그인 시 오류가 나지 않습니다.
여기서 두 가지가 문제가 됩니다. memberOf 은 계정이 속한 모든 그룹을 반환하므로, 매핑된 두 그룹에 속한 사용자는 맵에 두 개의 후보 값을 줍니다. 가이드의 알파벳순 규칙이 자신의 우선순위 대신 의지할 수 있는 유일한 동점 처리입니다. 매핑되지 않은 값은 아무것도 주지 않으며 프로필의 기본 정책으로 조용히 돌아갑니다.
DAP 경로, 그리고 그것이 더하는 것
DAP는 조건을 평가하고 AAA 결과 위에 속성을 적용합니다. 레코드는 우선순위, 동작, 조건 집합을 가집니다. 레코드는 우선순위 순으로 평가되고 동작이 평가를 계속할지 멈출지 결정합니다. 이것은 값 조회와 다른 실행 모델이며, 바로 그래서 맵이 표현할 수 없는 규칙을 표현할 수 있습니다.
DAP가 더하는 것은 입력입니다. 조건은 디렉터리 속성, 엔드포인트 속성, 장치 상태를 참조할 수 있고, 일치한 레코드는 해당 세션에 대한 ACL, URL 목록, 필터를 가질 수 있습니다. 그래서 관리되는 노트북을 쓰는 지원 담당자에게는 읽기 전용 정책을, 같은 담당자가 관리되지 않는 장치를 쓸 때는 제한된 정책을 주는 규칙은 DAP로 표현할 수 있지만 속성 맵으로는 표현할 수 없습니다. 맵의 입력은 정확히 하나입니다. 지정한 속성에 대해 디렉터리가 반환한 값입니다.
DAP는 세션이 잘못된 정책에 떨어졌을 때 볼 두 번째 장소도 더합니다. 계속 동작과 일치하는 레코드는 평가를 끝내지 않으며, 이후 레코드가 결과를 바꿀 수 있습니다. 따라서 관찰하는 것은 단일 조회가 아니라 연속된 흐름의 결과입니다. 우선순위 번호를 순서대로 읽고, 폴백 레코드가 실제로 일을 하고 있을 수 있음을 기억하십시오. 반면 맵에는 흐름이 없습니다. 속성 하나, 값 하나, 답 하나입니다.
둘이 어긋나는 지점
설계를 깨뜨리는 부분은 우선순위입니다. 세션이 맵 항목과 DAP 레코드 모두에 일치하면 결과는 릴리스와 레코드 동작에 따라 달라집니다. 어느 한 메커니즘이 결과를 소유한다고 가정하지 말고 자신의 ASA에서 확인하십시오.
혼란의 대부분은 세 가지 실패 방식으로 설명됩니다. 정의되어 있지만 프로필이 사용하는 서버 태그에 한 번도 연결되지 않은 맵은 어디에도 오류 없이 기본 정책을 냅니다. 디렉터리 값과 대소문자나 공백이 다른 DAP 조건 문자열은 결코 일치하지 않고 폴백 레코드가 조용히 적용됩니다. 그리고 아직 존재하지 않는 그룹 정책은 맵이 받아들입니다. 맵은 이름만 반환하기 때문입니다. 그래서 세션은 의도한 권한을 하나도 받지 못하고, 로그에도 빠진 객체를 가리키는 것이 없습니다. 그룹 구성원 자격을 건드리기 전에 세 가지를 모두 확인하십시오.
실행 중인 세션에서 증거 읽기
구성이 아니라 새 세션에서 답을 읽으십시오. show vpn-sessiondb detail anyconnect filter name jdoe 은 세션이 실제로 받은 그룹 정책을 출력하고, show running-config ldap attribute-map 은 맵이 반환할 수 있었던 값을 확인합니다. 디렉터리 쪽에서는 test aaa-server authentication LDAP-AD username jdoe password <password> 가 ASA가 돌려받은 속성을 보여 주고, debug ldap 255 은 테스트가 예상과 다를 때 그 교환을 보여 줍니다.
그다음 네 가지 레코드를 서면으로 맞추십시오. 디렉터리 값, 구성된 맵 또는 DAP 조건, 로컬 그룹 정책, 사용자가 실제로 도달한 리소스입니다. 앞의 세 가지가 맞고 네 번째가 맞지 않으면 문제는 선택이 아니라 정책 본문에 있습니다. 세션이 올바른 정책 이름을 보여 주는데 ACL이 틀리다면 LDAP을 보는 것을 완전히 그만두십시오. 한 번에 레코드 하나를 바꾸고 새 세션으로 다시 확인하십시오. 다시 연결된 세션만이 방금 작성한 구성을 반영하는 증거입니다.