Inside SharePoint보안 계정 자격 증명 유지 관리

Pav Cherny

목차

SharePoint 환경에서의 암호 변경
팜 자격 증명 문제 해결
결론

Microsoft Office SharePoint Server(MOSS) 팜의 보안을 유지하기 위해서는 팜 자격 증명과 보안 계정 암호를 자주 바꾸어야 하지만 관리자의 입장에서는 번거롭고 귀찮은 작업입니다. 도구는 사용하기 어렵고 기본 프로세스는 복잡하며 자세한 설명서를 찾기 힘들고 올바른 절차를 따르더라도 서버 팜이 손상될 위험이 있습니다.

게다가 Microsoft PSS(기술 지원 서비스)조차 신뢰할 수 없는 경우가 있습니다. "SharePoint Server 2007 및 Windows SharePoint Services 3.0에서 서비스 계정과 서비스 계정 암호를 변경하는 방법" 등의 유용한 KB(기술 자료) 문서도 있는 반면 "SharePoint 제품 및 기술 마법사를 사용할 때 발생하는 오류 메시지: '예외: System.ArgumentException: 암호화하거나 암호 해독하는 동안 오류가 발생했습니다.'"와 같은 잘못된 자료도 있습니다.

위 문서에서는 웹 응용 프로그램의 계정 자격 증명을 더 이상 암호 해독할 수 없는 경우 구성 데이터베이스를 새로 만들어야 한다고 설명하고 있습니다. 이러한 문제는 중요한 명령 스위치를 잘못된 시점에 사용하거나 팜 자격 증명을 업데이트하는 프로세스가 성공적으로 완료되지 않은 경우에 발생할 수 있습니다. 관리자에게 서버 팜이 복구되지 않을 정도로 손상될 수 있다는 공포를 심어 주는 게 목적이라면 이 KB 문서가 성공적이라고 할 수 있습니다. 그러나 이러한 위험성을 알게 되면 과연 누가 SharePoint 환경의 보안을 유지하기 위해 팜 및 보안 계정 암호를 자주 변경하려 하겠습니까?

고객이 사용자 계정을 다시 설정할 때 Active Directory를 삭제하지는 않으므로 단순히 웹 응용 프로그램 암호가 손실되었다고 해서 SharePoint 구성 데이터베이스를 삭제하도록 해서는 안 됩니다. 즉, 새 구성 데이터베이스를 만들 필요는 없습니다. 대부분의 경우 표준 Stsadm.exe 도구를 사용하여 손상된 자격 증명을 덮어쓰기만 해도 됩니다. 그리고 이 방법이 적용되는 않는 경우에는 암호를 다시 설정하고 2008년 2월 코드 다운로드 첨부 자료에 포함된 도구를 사용하여 구성 데이터베이스를 유지할 수 있습니다. Windows SharePoint Services(WSS) 3.0 및 MOSS 2007 환경에서 암호를 다시 설정할 때는 자격 증명 키나 새 구성 데이터베이스에 액세스할 필요가 없습니다. 단, 보다 나은 Microsoft의 지원과 손쉬운 암호 변경을 위한 설명서가 필요할 뿐입니다.

이 칼럼은 SharePoint 보안 계정을 유지 관리하기 위한 표준 절차 및 도구와 그 한계 및 관련 위험성을 설명하고 관리 오버헤드를 줄여 SharePoint 환경의 TCO(총 소유 비용)를 절감할 수 있는 보다 나은 보안 유지 방안을 소개하는 2부작 연재물 중 첫 번째 기사입니다. 이 첫 번째 기사에서는 암호 변경과 관련한 세부 아키텍처 정보와 복잡한 프로세스에 대해 다룹니다.

스크립트를 사용하여 수동으로 보안을 유지 관리하거나 다음 달 칼럼에서 소개할 솔루션과 같은 완전 자동화된 솔루션을 사용하여 보안을 유지 관리할 때 SharePoint가 보안 계정 및 암호를 어떻게 처리하는지를 이해하는 것이 중요합니다. 설명의 이해를 돕고 실제 어떻게 적용되는지 보여 주기 위해 여기서도 테스트 환경을 사용하도록 하겠습니다. 이 1부에서는 첨부 워크시트에 나와 있는 단순한 단일 서버 설치 환경이면 충분합니다. 늘 그렇듯이 기사와 함께 제공되는 워크시트와 도구는 테스트용으로, 프로덕션 환경에서 사용할 용도로 만들어지지 않았습니다. 사용에 따른 책임은 전적으로 사용자에게 있음을 밝힙니다.

SharePoint 환경에서의 암호 변경

SharePoint 보안 계정이나 팜 구성 계정의 암호를 변경하는 과정은 매우 복잡합니다. 무엇보다 SharePoint 콘텐츠 및 구성 데이터베이스는 물론, Active Directory, SharePoint 서버의 로컬 SAM(보안 계정 관리자) 데이터베이스, SCM(서비스 제어 관리자) 데이터베이스, IIS 메타베이스 및 SQL Server에 변경 내용을 적용해야 합니다.

또한 팜의 다른 모든 서버에 변경 내용을 복제하여 일관되게 적용해야 합니다. 변경 내용이 팜의 자격 증명 키에 영향을 주는 경우에는 팜의 모든 서버에 대해 모든 SharePoint 서비스 및 응용 프로그램 풀의 암호를 모두 다시 암호화해야 합니다. 이 키는 SharePoint가 구성 데이터베이스에서 보안 게정의 암호를 보호하는 데 사용하는 암호화 키입니다. 팜의 구성 계정 암호를 변경하면 팜의 자격 증명 키도 변경됩니다. 그림 1은 프런트 엔드 서버 2개로 구성된 서버 팜에서 구성 계정 암호를 변경하는 프로세스를 보여 줍니다. 사실 이 프로세스가 제대로 작동한다는 사실만으로도 놀랍습니다.

fig01.gif

그림 1 SharePoint 보안 계정의 암호 변경

모든 보안 계정 암호 변경은 Active Directory에서 시작되며, 그때부터 SharePoint에서 해당 암호를 업데이트할 때까지 팜은 일관성 없는 상태가 됩니다. 즉, IIS와 다른 위치에서는 암호가 더 이상 유효하지 않지만 SharePoint는 여전히 작동합니다.

가용성 요구 수준이 높은 조직의 경우 이는 반가운 일입니다. 암호를 변경하더라도 시스템을 다시 시작할 필요가 없기 때문입니다. Windows 서비스 및 IIS는 마지막으로 서버를 시작했을 때 이전 암호로 변경 대상 보안 계정에 로그온하여 획득한 보안 토큰을 계속 사용할 수 있습니다. 그러나 암호에 일관성이 없는 전환 단계에서는 IIS 또는 전체 서버를 다시 시작하지 말아야 합니다.

다시 시작하면 IIS를 비롯한 서비스가 이전 암호로 로그온할 수 없으며 변경의 영향을 받은 응용 프로그램 풀 또는 서비스가 더 이상 온라인으로 연결되지 않습니다. 이 경우 IIS는 서버의 이벤트 로그에 경고를 기록합니다(그림 2 참조). 따라서 Active Directory에서 암호가 변경된 후 SharePoint에서 암호가 업데이트되기를 너무 오래 기다려서는 안 됩니다.

fig02.gif

그림 2 더 이상 유효하지 않은 응용 프로그램 풀 자격 증명에 대한 IIS 경고

응용 프로그램 풀 계정의 암호를 업데이트하려면 SharePoint 3.0 중앙 관리(_admin/FarmCredentialManagement.aspx) 또는 다음 Stsadm.exe 명령을 사용해야 합니다.

stsadm -o updateaccountpassword -userlogin <DOMAIN\USER> 
  -password <PASSWORD> -noadmin

그러면 SharePoint가 팜의 자격 증명 키를 사용하여 새 암호를 암호화하고 구성 데이터베이스에서 이전에 암호화된 암호를 덮어씁니다. 그런 다음 IIS 메타베이스와 기타 모든 필요한 위치에서 계정 정보를 업데이트합니다. 이 단계가 완료되면 SharePoint는 SPContentAppPoolCredentialDeploymentJobDefinition 형식의 타이머 작업을 생성하여 팜의 나머지 서버에 새 자격 증명을 배포합니다. 이 타이머 작업은 구성 데이터베이스에 저장됩니다.

그림 1에서 보듯이 SharePoint는 타이머 작업을 통해 관리 설정을 팜의 모든 서버에 전역으로 적용합니다. 팜의 나머지 서버에서는 SharePoint Timer 서비스가 이 타이머 작업을 가져와 그에 따라 서버의 로컬 보안 설정을 업데이트하여 팜을 다시 일관성 있는 상태로 만듭니다. 이 과정에서 WSS 관리(SPAdmin) 서비스가 사용됩니다.

이 프로세스는 응용 프로그램 풀 계정의 경우에만 적용되며, 보안 계정을 사용하는 SharePoint 서비스는 이외에도 SharePoint Timer 서비스, WSS 도움말 검색 서비스, SSP(공유 서비스 공급자), Office SharePoint Server 검색 서비스, SSO(Single Sign-On) 서비스 등 다양합니다. 팜에 설치된 솔루션에 따라 보안 계정을 사용하는 서비스가 더 있을 수도 있고 각 서비스 유형마다 암호 업데이트 요구 사항이 다릅니다. support.microsoft.com/kb/934838의 기사에는 WSS 3.0 및 MOSS 2007에서 서비스 계정에 사용해야 하는 명령 목록이 있습니다. 또한 도구, 명령 및 업데이트 절차에 추가 솔루션을 사용하는 경우 해당 제품 설명서도 참조하십시오.

이렇듯 다양하고 통합되지 않은 도구와 명령은 현재 SharePoint 보안 아키텍처의 단점 중 하나입니다. 때문에 확장성이 떨어지고 보안 자격 증명을 사용하는 서버 팜에 구축된 사용자 지정 솔루션의 수에 따라 TCO가 증가할 수 있습니다. 이 연재 기사의 2부에서는 이러한 문제를 해결하여 기반 서비스 유형에 관계없이 필요한 모든 업데이트를 수행할 수 있는 단일 솔루션을 사용하는 방법을 설명합니다.

가장 중요한 업데이트 시나리오는 팜 자격 증명과 관련이 있습니다. 앞서 언급했듯이 팜 계정의 암호는 팜의 자격 증명 키에 영향을 준다는 면에서 특별합니다. 이러한 자격 증명 키는 팜의 모든 암호를 암호화하는 데 사용됩니다. 따라서 Active Directory에서 팜 계정의 암호를 변경한 후에는 다음 명령을 사용하여 SharePoint를 업데이트해야 합니다.

stsadm -o updatefarmcredentials -userlogin <DOMAIN\USER>
  -password <PASSWORD>

그러면 SharePoint가 구성 데이터베이스에서 모든 기존 암호(암호화된 암호)를 다시 암호화하고 팜 계정을 ID로 사용하는 SharePoint Timer 서비스 계정을 업데이트하고 SPAdminAppPoolCredentialDeploymentJobDefinition 형식의 타이머 작업을 사용하여 팜의 모든 서버에 다시 한번 변경 내용을 전파해야 합니다.

이 단계에서 문제가 발생할 소지가 많습니다. 그림 3과 같이 타이머 작업이 큐에 처리되지 않은 채로 있거나 갑작스러운 정전으로 업데이트 프로세스가 예기치 않게 실패할 수 있습니다. 이 경우 변경된 자격 증명 키로 SharePoint에서 더 이상 해독할 수 없는 암호화된 이전 암호가 남게 됩니다.

fig03.gif

그림 3 서비스 팜의 일부 서버에서 SharePoint Timer 서비스가 실행되고 있지 않아 큐에 처리되지 않은 채로 남아 있는 자격 증명 배포 작업

새 팜 자격 증명이 팜의 모든 서버에 배포되기 전에 응용 프로그램 풀 계정의 암호를 업데이트할 때도 문제가 발생합니다. 이 경우 그림 4와 같이 더 이상 유효하지 않은 자격 증명 키를 사용하는 서버가 구성 데이터베이스의 업데이트된 암호를 아직 해독할 수 없기 때문에 오류가 발생합니다. 이는 updateaccountpassword 명령에 -noadmin 스위치가 사용되는 이유를 보여 주는 흥미로운 시나리오입니다. 팜 계정을 응용 프로그램 풀 계정으로도 사용하는 경우(권장되지 않음) 팜 자격 증명을 먼저 업데이트하고 팜의 모든 서버에서 타이머 작업이 처리될 때까지 기다린 후 응용 프로그램 풀을 업데이트해야 합니다.

fig04.gif

그림 4 관리 응용 프로그램 풀 자격 증명 배포 작업이 처리될 때까지 응용 프로그램 풀 업데이트 보류

때문에 updateaccountpassword 명령은 지정된 보안 계정이 팜 계정인지 검사한 후 팜 계정일 경우 업데이트를 수행하지 않고 종속성에 대한 메시지를 표시합니다. -noadmin 스위치를 사용하면 이러한 검사가 수행되지 않고 응용 프로그램 풀 구성의 계정에 변경된 암호가 적용되지만 스크립트에서 적절한 지연 시간을 설정하여 이 절차를 자동화하기는 어렵습니다.

팜 자격 증명 문제 해결

그러면 updatefarmcredentials 명령을 자세히 살펴봅시다. 이 명령에는 "SharePoint 제품 및 기술 마법사를 사용할 때 발생하는 오류 메시지: '예외: System.ArgumentException: 암호화하거나 암호 해독하는 동안 오류가 발생했습니다." 기사에서 설명하는 경우와 같이 사용할 때 특히 문제를 일으키는 -local이라는 스위치가 있습니다. 이 스위치는 로컬 팜 자격 증명 업데이트를 수동으로 수행하는 용도로 SharePoint 개발자에게 제공되었습니다. 이 스위치의 핵심 원리는 작업이 손상되었거나 다른 이유로 처리되지 않을 경우 중앙 관리(_admin/ServiceJobDefinitions.aspx)의 큐에서 타이머 작업을 삭제한 다음, 명령을 사용하여 필요한 업데이트 단계를 직접 수행하는 것입니다.

stsadm -o updatefarmcredentials -userlogin <DOMAIN\USER> 
  -password <PASSWORD> -local

-local 스위치는 로컬 컴퓨터에만 암호 변경 내용을 적용하도록 updatefarmcredentials 명령에 지시합니다. 이러한 업데이트는 자격 증명 키와 SharePoint Timer 서비스에 영향을 주지만 응용 프로그램 풀, 검색 서비스, SSP 등에는 영향을 주지 않습니다. 여기서는 팜의 다른 서버에서 -local 스위치 없이 updatefarmcredentials 명령을 이미 실행했고 구성 데이터베이스의 암호가 모두 다시 암호화되어 있는 것으로 가정합니다. 이 경우 재암호화 단계를 다시 수행할 필요는 없습니다. 하지만 이 단계를 수행하지 않고 -local 스위치를 사용한 경우에는 어떨까요?

-local 스위치 없이 updatefarmcredentials 명령을 먼저 실행하지 않은 상태에서 -local 스위치를 사용하면 -local 스위치가 자격 증명 키를 변경하므로 문제가 발생합니다. 구성 데이터베이스의 응용 프로그램 풀 암호가 이전 키를 사용하여 암호화되어 있지만 이제 해당 키가 덮어써지기 때문입니다.

그림 5를 살펴보시기 바랍니다. -local 스위치 없이 updatefarmcredentials 명령을 실행하려면 암호를 다시 암호화해야 하지만 더 이상 암호를 해독할 수 없기 때문에 이제는 -local 없이 updatefarmcredentials 명령을 실행할 수 없습니다. 이러한 이유로 명령이 실패하면 응용 프로그램 이벤트 로그에 "관리 응용 프로그램 풀 자격 증명을 배포하는 동안 소유자 ID가 431b6897-16eb-4b9a-be65-60f1f603008d인 자격 증명 ID 022e607e-b49e-40e4-bd3f-f56a3c69f94d을(를) 다시 암호화하는 중 오류가 발생했습니다. 자격 증명을 수동으로 다시 만드십시오. 개체의 현재 상태 때문에 작업이 유효하지 않습니다."라는 항목이 기록됩니다.

fig05.gif

그림 5 더 이상 암호 해독이 불가능하므로 응용 프로그램 풀 암호를 다시 암호화할 수 없음

이 시나리오에서 단일 서버 배포의 팜 계정을 네트워크 서비스 계정에서 도메인 계정으로 변경했다면 이전 자격 증명 키로 다시 변경할 수 없기 때문에 문제가 발생합니다. 네트워크 서비스에는 암호가 사용되지 않으므로 자격 증명 키가 무작위로 생성됩니다.

관련 자료를 검색하다 보면 앞서 언급한 "SharePoint 제품 및 기술 마법사를 사용할 때 발생하는 오류 메시지: '예외: System.ArgumentException: 암호화하거나 암호 해독하는 동안 오류가 발생했습니다.”라는 기사를 참조하게 되는데, 배경 지식이 없는 경우 더 이상 해독할 수 없는 암호를 제거하기 위해 구성 데이터베이스를 새로 만들어야 한다는 내용 때문에 자칫 문제를 악화시킬 수 있습니다. 그야말로 설상가상의 상황이 되는 것입니다. 애초에 -local을 사용하여 updatefarmcredentials 명령을 실행할 수 있었던 것이 문제이고 그렇게 명령을 실행한 경우에는 나중에 암호를 다시 암호화할 수 있도록 이전 자격 증명 키의 백업 복사본이 생성되었어야 합니다. 아니면 실행 시에 명령이 암호가 아직 다시 암호화되지 않았다는 사실을 감지하고 암호를 다시 암호화했어야 합니다.

그런데 그림 5와 같이 -local 스위치가 끼어들어 경고도 없이 SharePoint 구성 데이터베이스를 손상시킨 것입니다. 이 경우 더 이상 해독할 수 없는 암호를 다시 설정하는 Microsoft의 지원 도구가 유용합니다. 그리고 물론 특정 명령줄 작업의 위험성에 대해 올바르게 경고하고 문제 해결 방법을 안내하는 제품 설명서도 필요합니다.

다행히 updateaccountpassword 명령은 이전 암호를 해독하지 않고도 응용 프로그램 풀 계정의 새 암호를 암호화할 수 있습니다. 따라서 도메인 계정을 사용하는 모든 응용 프로그램 풀을 이 명령으로 업데이트하면 됩니다. 대부분의 손상된 암호는 이 방법으로 해결할 수 있습니다. 그러나 네트워크 서비스 계정을 사용하는 응용 프로그램 풀은 이 명령으로 업데이트할 수 없습니다. 네트워크 서비스 계정에는 암호가 필요 없기 때문에 updateaccountpassword 명령이 적용되지 않습니다.

그런데 흥미롭게도 네트워크 서비스 계정은 구성 데이터베이스의 암호 데이터와 연결되어 있을 수 있습니다. 네트워크 서비스를 사용하는 새 응용 프로그램 풀에는 암호가 없지만 도메인 계정을 사용하도록 응용 프로그램 풀을 변경한 다음 다시 네트워크 서비스를 사용하도록 되돌린 경우 네트워크 서비스는 도메인 계정의 암호 참조를 상속합니다. SharePoint는 암호를 null로 설정(잘못된 코딩 방법)하지 않기 때문에 이 불필요한 데이터가 문제를 일으킵니다.

불필요하고 전혀 쓸모없는 데이터를 더 이상 해독할 수 없다는 이유로 기존 구성 데이터베이스를 버려야 한다는 것은 아이러니가 아닐 수 없습니다. 운이 좋으면 중앙 관리(_admin/FarmCredentialManagement.aspx)에서 응용 프로그램 풀 구성을 변경하고 도메인 계정을 지정할 수 있을 테고, 운이 나쁘면 그림 6과 같은 암호화/암호 해독 오류가 발생할 것입니다. 중앙 관리에서 계정을 변경할 수도 없고, updateaccountpassword 명령을 사용하지도 못하고, SharePoint 제품 및 기술 구성 마법사도 실행할 수 없으며, updatefarmcredentials 명령을 사용하여 팜 자격 증명을 업데이트할 수도 없습니다. 그렇다면 이제 어떻게 해야 할까요?

fig06.gif

그림 6 구성 데이터베이스에 남아 있는 불필요한 네트워크 서비스 암호 데이터로 인한 문제

이 문제를 해결하려면 구성 데이터베이스에서 직접 불필요한 데이터를 제거하는 도구가 필요합니다. 그림 7에 나와 있고 첨부 자료에 소스 코드가 포함된 Reset AppPool Password 도구가 바로 이 역할을 합니다. 이 도구는 매우 간단합니다. 연결된 암호화된 암호가 있는 계정을 사용하는 응용 프로그램 풀의 데이터를 구성 데이터베이스에서 직접 가져온 다음 응용 프로그램 풀 암호를 해독할 수 있는지 여부를 SharePoint 개체 모델을 사용하여 확인합니다.

fig07.gif

그림 7 손상된 암호를 null로 다시 설정

인수 예외가 발생하여 개체 모델을 통해 암호에 액세스할 수 없는 경우 암호가 손상된 것입니다. 이 도구는 암호의 암호화된 바이트 값 배열을 null 참조로 바꾸고 변경 내용을 다시 구성 데이터베이스에 저장하는 옵션을 제공합니다. 빈 문자열은 해독할 필요가 없으므로 인수 예외를 발생시키지 않습니다. 이로써 문제가 해결되었습니다.

복구 프로세스를 제대로 완료하려면 Stsadm.exe와 중앙 관리를 사용하여 팜 자격 증명 및 관련된 모든 응용 프로그램 풀 계정을 업데이트하는 것이 좋습니다. 그러면 팜은 다시 일관된 상태가 되고 구성 데이터베이스를 버리지 않아도 됩니다.

결론

팜 자격 증명 및 보안 계정 암호를 변경하는 작업은 번거롭고 오류가 발생하기 쉬운 프로세스지만, 팜 자격 증명을 변경한다고 해서 서버 팜이 복구 불가능한 상태로 손상될 것을 걱정할 필요는 없습니다. 현재 자격 증명 키를 잃더라도 구성 데이터베이스를 복구할 수 있기 때문입니다. 표준 Stsadm.exe 도구나 Reset AppPool Password 같은 기본적인 수준의 데이터베이스 도구를 사용하여 영향을 받은 암호를 다시 설정하기만 하면 됩니다. 따라서 팜 자격 증명 및 보안 계정 암호를 자주 변경하고, 강력한 암호를 사용하십시오. 또한 팜 구성과 문제 해결을 어렵게 하는 네트워크 서비스를 보안 계정으로 사용하지 마십시오. 대신 전용 도메인 계정을 사용하십시오.

암호 변경에 따른 데이터베이스 손상의 위험성에 대해서는 충분히 살펴보았으므로 이제 SharePoint 보안 아키텍처의 중요한 문제에 주목해볼 차례입니다. 바로 현재 아키텍처에서 암호를 변경하기가 쉽지 않다는 점입니다. 팜에서 업데이트해야 하는 서비스 유형별로 특정 순서에 따라 너무 많은 명령을 적용해야 합니다. 그중에는 위험한 스위치가 있는 명령도 있고 없는 명령도 있습니다. 구성 데이터베이스를 손상시킬 수 있는 명령도 있고 그렇지 않은 명령도 있습니다. 일부 서비스는 전체 팜에서 전역으로 업데이트해야 하고 일부 서비스는 특정 서버에서만 로컬로 업데이트하면 됩니다.

어떤 경우든 복잡성 때문에 관리 오버헤드는 높아지고 대개 주기가 긴 변경 일정, 취약한 암호, 일반 텍스트로 암호를 처리하는 스크립트 등으로 인해 보안 수준은 낮아지게 됩니다. 다음 칼럼에서는 암호 업데이트 요구 사항에 관계없이 모든 서비스 유형(향후 개발될 서비스 포함)에 대해 이러한 문제를 다루고 및 해결하는 방법을 설명하겠습니다. 이제 수동 암호 변경으로부터 해방되십시오!

Pav Cherny는 공동 작업 및 통합 커뮤니케이션을 위한 Microsoft 기술을 전문으로 하는 IT 전문가이자 저술가입니다. IT 운영과 시스템 관리를 주로 다루는 백서, 제품 설명서 및 서적 등을 출간한 Pav는 문서 관리 및 지역화 서비스를 전문으로 하는 Biblioso Corporation의 사장입니다.