Freigeben über


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의 모습입니다. 꼬알라도 위임이란 컨셉을 예전에 처음 들었을 때, 다소 헷갈렸지만, 그림을 그리면서 잘 생각해보면, 쉽게 이해가 될 수 있었습니다.

Comments

  • Anonymous
    August 19, 2012
    위와 같은 문제로 골머리를 앓고 있습니다. schost 라는 iso를 공유하는 라이브러리 서버가 있고 Host01, Host02, Host03 Hyper-V host가 있습니다. 그래서 SCVMM은 SCVMMService domain account로 설치 및 구동이 되고 있으며 이 account는 각 Hyper-V Host상에 Administrators group에 포함이 되어 있습니다.(SCVMM agent 설치 시 자동으로 구성되었습니다) 문제는 ADS에서 상기 화면과 같이 delegation 할 때 cifs schost로 각 Hyper-V Host computer account마다 설정이 된 상태입니다. 각 Hyper-V host상에서 schost상에 있는 shared ISO mount를 하면 잘 작동이 되는데 SCVMM을 통하면 권한이 없다면서 항상 실패를 합니다. 모든 시스템은 동일 domain에 있기에 trust상에 문제는 없습니다만 무엇이 원인인지 모르겠습니다. 혹시 제가 miss 한 부분에는 어떤게 있는지 궁금합니다. 조언하여 주시면 감사하겠습니다.

  • Anonymous
    August 20, 2012
    자문자답인 상황이 되었습니다. SCVMMService password내에 특수기호가 섞어면 제대로 delegate가 안되는 버그였습니다. 모두 uninstall 후 SCVMMService, SCVMMSDK password내에 특수기호 @를 빼고 재설정 한 뒤 모두 동일하게 새로 설치 후 VMM Host를 추가한 뒤 ADS에서 각 Host에서 shared ISO library server를 delegate(cifs ~~~)로 지정하니 모든 것이 만사 오케이였습니다. 단 한대의 Host에서 문제가 발생하였는데 이 역시 Host remove -> Host add 후 Refresh 후 해결이 되었습니다. 이번 해결건에 기대를 했던 또 하나의 문제는 SSP에서 VM console 연결 시 항상 패스워드를 다시 입력해야 하는 경우인데 이 부분 또한 이해가 안되는 부분입니다. 같은 domain 내에 있는 member system에서는 문제없이 연결이 되는데 같은 domain 내에 있지 않은 시스템에서 SSP로 연결 후 console connection 시 항상 Host의 보안 인증을 확인 할 수 없다는 식의 메시지가 뜹니다. 메뉴얼 상에도 딱히 뾰족한 내용이 나와있지 않습니다. 이 부분도 연구를 해 보고 있습니다만 정말 갸우뚱하게 만드는 상황입니다. 조만간 클라이언트 한곳을 vSphere 4.1에서 Hyper-V 3.0 기반으로 마이그레이션 할 계획이라 테스트 랩에서 실전에 입각하여 많은 부분을 테스트해 보려 합니다. 그럼 열심히 한번 찾아보도록 하겠사오니 혹시 집이시는 부분이 있으시면 확인하여 주시면 감사하겠습니다.

  • Anonymous
    August 20, 2012
    최재훈님 // 안녕하세요~ 문제가 일단 해결하셨다니 다행이네요. 커베로스 위임을 처리하는 구조상, 암호를 주고받지 않는데, 조금은 이상한 형태지만 해결이 되셨다니 다행입니다. ^^;; 현재 Hyper-V 3.0을 언급하셨기에, Windows Server 2012 기반이신 것 같습니다. WS2012를 지원하는 SCVMM 2012 SP1 CTP2는 아직 베타이전의 CTP이기에, 버그가 있을 수도 있습니다. 차후, 베타를 거쳐, 해당 이슈가 있으신지 확인해보세요~ :) 베타는 조만간 나올 예정으로 알고 있습니다.

  • Anonymous
    October 10, 2012
    최재훈님 아마도 커버로스 티켓 재 발급 시간에 걸려서 잘 동작했던 것으로 보이는데... 맞는지 모르겠습니다. KCD 를 설정하는 경우 10시간이 지나거나 머신을 재 부팅해서 티켓을 다시 받아 오도록해야 적용 됩니다. : )

  • Anonymous
    October 10, 2012
    SSP와 Console 연결 부분은 화면을 캡처 해서 보내 주셨으면 하네요. SSP에서 Console 연결하는 부분에서 SSO가 동작한다는 건... 저도 처음 들어봤습니다. 아마도 해당 머신의 Password를 넣는 건 당연한거 같은데... 그리고 호스트의 보안인증이 아니라 인증서를 신뢰할 수 없다고 뜨는 건 아닌지 확인 부탁드릴께요.