Windows Server 2012, 원격 서버에 대한 “액세스 거부 오류”, 커베로스 위임(Kerberos Delegation)에 대한 이야기..

Delegation

Hyper-V 서버 여러 대를 하나의 관리 도구에서 연결해 관리하는 경우, 로컬 서버에 대한 작업과 원격 서버에 대한 작업이 조금 다르게 동작한다는 것을 한번쯤 경험해보셨을 거라 생각합니다. 대표적인 케이스가 바로, 상단 그림과 같은 권한에 대한 부분인데요. 오늘은 바로 이 이야기를 해볼까 합니다. 바로 KCD(Kerberos Constrained Delegation)에 대한 내용입니다.

커베로스 위임이라는 기술은 Windows 2000부터 제공되었고, Windows Server 2003 시절부턴, 더 높은 보안을 위해 위임 대상에 대한 서비스 지정이 가능해져서, Windows Server 2012까지 올라오고 있습니다.

10여년된 기술에 대해서 이제야 왜 포스팅하느냐라고 여쭤보실 수 있는데, Windows Server 2012의 몇가지 기술이 이 위임을 설정하지 않으면, 동작하지 않거나, 작업을 하는 서버에 직접 로컬 로그온을 하셔서 진행하셔야 하는 기술이 있기 때문입니다. 대표적인 것이 SMB 3.0 파일 서버를 활용한 Hyper-V, 그리고 Shared Nothing Live Migration(공유 저장소 없이 실시간 마이그레이션)입니다.

image

액티브 디렉터리 사용자 및 컴퓨터 관리 도구에 컴퓨터 계정 속성에는 위임이라는 탭이 있습니다. 해당 위임이란 탭을 SharePoint를 DB와 분리해서 구축하신 분들께서는 살펴본 적이 있으실 수 있고, SetSPN 명령어를 통해서도 작업을 이어가는 경우도 있었을 것입니다.

예제와 함께, 쉽게 설명하도록 노력해 보겠습니다.

image

User 1이 웹 서버에 로그온하였습니다. 이 해당 사용자가 SQL 서버에 저장된 데이터를 접근하기 위해서는, 웹 서버가 해당 계정 정보를 SQL 서버로 전달해줘야 합니다. User 1이 웹 서버에 로그온하였다고, 웹 서버가 인증 정보를 SQL 서버로 전달할 수 있다고 보면 안되겠죠. 웹 서버에게 계정 정보를 넘겨줄 수 있도록 위임을 해줘야 하고, 해당 목적지는 SQL 서버의 서비스로 전달하라는 설정이어야 합니다. 이러한 설정을 커베로스 위임이라고 합니다. 위임이 되어져 있지 않은 경우엔, 당연히 웹 서버의 응용 프로그램 풀에 지정된 계정을 이용하여, SQL 서버로 접근하여 권한을 얻겠죠.

Hyper-V 예제로 돌아오죠.

KOALRA-HV1, KOALRA-HV2가 있을 경우, KOALRA-HV1에 로그온하여, Hyper-V 관리 도구를 열고, KOALRA-HV2를 원격 관리할 수 있습니다. KOALRA-HV1에서 원격 파일 서버에 존재하는 ISO를 VM에 연결할 경우는 문제없이 진행되지만, KOALRA-HV2에서 동일한 작업을 할 경우에 가장 상단의 그림과 같은 에러가 발생합니다.

또한 별도의 파일 서버(KOALRA-FS)를 만들어 놓고, 이에 가상 머신용 하드 디스크 VHD를 배치한 다음, KOALRA-HV1에서 가상 머신을 생성하면, 문제가 없지만, 원격 관리중인 KOALRA-HV2에서 새 가상 머신을 만들면, 권한 없음 에러가 발생합니다. 별도의 파일 서버에 컴퓨터 계정에 대해, 이미 모든 권한을 다 주었음에도 말입니다. 재미있는 것은 KOALRA-HV2에 직접 로그온하여, 생성하면 잘 만들어집니다. 실망인걸

두 예제 모두, 직접 로그온해서 사용하는 KOALRA-HV1의 경우에, 관리자의 권한을 직접 사용하는 케이스지만, KOALRA-HV2의 경우엔 로컬 로그온이 아니라, 원격에서 접근하여, 해당 컴퓨터에 명령을 내리는 케이스이기에, 사용자의 권한이 전달되지 않기 때문입니다. 다시 말해, 관리자(대표적으로 Administrator)로 로그온한 경우, KOALRA-HV1은 로컬이기에, 권한이 파일 서버로 직접 전달되지만, KOALRA-HV2의 경우에는 한단계를 거쳐 넘어가는 형태이기에, 파일 서버로 Administrator 권한이 넘어가지 않기 때문이죠. 보안 구조상 지극히 당연한 동작입니다.

그렇다고 모든 서버를 직접 로그온할 수 없기에, 액티브 디렉터리의 인증 기술인 커베로스(Kerberos)에서 위임을 만들어 놓았습니다. 앞서 언급한 예제의 경우에, 특정 서버의 특정 서비스로 향하는 경우엔, 계정 정보를 전달할 수 있도록, 위임하여 신뢰한다는 의미입니다. KOALRA-HV2의 컴퓨터 계정 속성내 위임 탭에서, 추가를 클릭하고, KOALRA-FS 서버의 CIFS 서비스(SMB 프로토콜을 사용하는 파일 서버 서비스라고 생각하시면 됩니다, SMB를 이용하여 Windows는 파일/폴더를 생성, 변경, 삭제합니다.)를 추가해주면, 문제가 해결됩니다. 첫번째 위임 설정을 한 경우엔, 위임 설정을 부여한 컴퓨터 계정(이 예제에선 KOALRA-HV2)의 다시 시작이 필요합니다.

공유 폴더에 저장된 ISO 파일등을 가상 머신 설정에서 이용할 경우에도, 로컬 서버가 아닌 원격 관리로 접속된 서버의 경우, 공유 폴더를 제공하는 컴퓨터의 CIFS 서비스에 대해서 위임을 받아야, 관리자 권한을 전달할 수 있습니다.

또한, SMB 3.0 파일 서버를 이용하여, Hyper-V내 가상 머신을 만들 때도, 동일한 이슈입니다. 파일 서버내 공유에 컴퓨터 계정이 읽기/쓰기 권한이 있지만, Hyper-V 관리 도구에서 가상 머신 생성을 요청하는 것은 관리자이기에, 로컬 서버는 SMB 경로를 이용하여, 잘 만들어지지만, 원격 서버의 경우에는 관리자 권한을 파일 서버의 서비스에 넘겨줄 수 없기에(이를 위임되어져 있지 않다라고 보는 것입니다.), 권한 없음이 떨어지죠. 컴퓨터 계정이, 파일을 읽고 쓰는 것은 서비스가 직접하지만, 새 가상 머신을 생성하는 작업은 관리자 권한을 사용하고 있기에, 관리자 권한으로 허가를 받아야 하고, 이를 받지 못해서 발생하는 이슈입니다. 해당 원격 서버의 컴퓨터 계정에 파일 서버의 CIFS 서비스에 대한 위임을 해주면 가능해집니다.

공유 저장소가 없이, 진행하는 실시간 마이그레이션의 경우에도 비슷한 아키텍쳐가 필요합니다.

image

KOALRA-WEB-01을 이동할 경우, 로컬 로그온되어진 서버(원본이겠죠)에서 해당 가상 머신에 대한 작업을 관리자는 할 수 있습니다. 그렇지만, 대상 서버에 대해서는 관리자 권한을 위임받지 않았기에, 권한 없음이 떨어지게 되고, 이 결과, 원격 호스트에서 연결이 끊겼다는 에러가 발생합니다. 해당 원격 서버의 컴퓨터 계정에서 이동을 위한 폴더를 생성하고, 파일을 만들 수 있는 권한을 위해 CIFS 서비스를 위임해야 하고, 이동을 위해 Hyper-V가 사용하는 서비스인 Microsoft Virtual System Migration Service를 위임해야 합니다. 반대로도 진행할 경우, 원본 서버에서 대상 서버에 대한 위임을 해줘야 합니다. (원본과 대상이 바뀌니까요. 미소)

image

해당 작업은 Windows PowerShell을 통해서도 쉽게 대량으로 할 수 있습니다.

image

Windows Server 2012 RC 버전까지는 손쉽게 설정을 할 수 있도록, 위임 옵션 중, 모든 서비스에 대한 위임용으로 이 컴퓨터 트러스트를 설정하여, 문제를 해결할 수 있었지만, RTM에선 해당 서비스를 직접 지정하는 것을 이용하고 있습니다. 이에 위임을 해야 할 서비스를 정확하게 지정을 해야 합니다.

어찌보면, 복잡해보일 수 있지만, 보안을 잃지 않기 위한, Windows Server 2012의 모습입니다. 꼬알라도 위임이란 컨셉을 예전에 처음 들었을 때, 다소 헷갈렸지만, 그림을 그리면서 잘 생각해보면, 쉽게 이해가 될 수 있었습니다.