응용 프로그램 풀 ID를 사용하는 IIS 응용 프로그램에서 기본 토큰이 손실됩니까?
(모호한 문제에 대한 질문입니다. 누군가에게 도움이되는 정보가 있기를 바라며 모든 관련 데이터를 제시하려고합니다. 자세한 설명에 대해 사과드립니다.)
웹 앱
IIS 7.5에서 실행되는 .NET 4 웹 애플리케이션이 Active Directory 및 SQL Server 데이터베이스에 액세스합니다.
이 웹 애플리케이션은 애플리케이션의 애플리케이션 풀 ID를 ApplicationPoolIdentity 로 설정하여 가상 '앱 풀 ID'로 실행됩니다 . 가상 ID에 대한 간결한 설명은 StackOverflow 답변 및 참조하는 블로그 게시물 에서 찾을 수 있습니다 . 앱 풀 ID는 '네트워크 서비스'로 실행되는 웹 애플리케이션의 작업자 프로세스에 추가되는 추가 그룹 일뿐입니다. 그러나 한 소스 는 "네트워크 서비스와 ApplicationPoolIdentity는 IIS.net 사이트 문서가 게시하지 않는 차이점이 있습니다."라고 모호하게 제안합니다. 따라서 가상 신원은 단순한 추가 그룹 이상이 될 수 있습니다.
NetworkService와는 반대로 ApplicationPoolIdentity를 사용하기로 결정했습니다. 이는 IIS 7.5 (예 : 여기 참조)에서 기본값이되었고 Microsoft의 권장 사항에 따라 다음과 같습니다. "이 ID를 사용하면 관리자가 응용 프로그램이 사용되는 ID에만 관련된 권한을 지정할 수 있습니다. 풀이 실행 중이므로 서버 보안이 강화됩니다. " ( applicationPools에 대한 추가에 대한 processModel 요소 [IIS 7 설정 스키마] ) "응용 프로그램 풀 ID는 IIS 응용 프로그램을 더욱 안전하고 안정적으로 실행할 수있는 강력한 새 격리 기능입니다."( IIS.net 기사 "응용 프로그램 풀 ID"에서) )
애플리케이션은 통합 Windows 인증을 사용하지만을 사용 <identity impersonate="false"/>
하므로 최종 사용자의 ID가 아니라 가상 앱 풀 ID가 코드를 실행하는 데 사용됩니다.
이 응용 프로그램은 System.DirectoryServices 클래스, 즉 ADSI API를 사용하여 Active Directory를 쿼리 합니다. 대부분의 경우 추가 사용자 이름 / 암호 또는 기타 자격 증명을 지정하지 않고 수행됩니다.
이 응용 프로그램 Integrated Security=true
은 연결 문자열을 사용하여 SQL Server 데이터베이스 에도 연결합니다. 데이터베이스가 로컬이면 데이터베이스 IIS APPPOOL\OurAppPoolName
에 연결하는 데 사용됩니다. 데이터베이스가 원격이면 컴퓨터 계정 OURDOMAIN\ourwebserver$
이 사용됩니다.
우리의 문제
다음 방법 중 하나로 작동중인 설치가 실패하기 시작하는 문제가 정기적으로 발생합니다.
데이터베이스가 원격 시스템에 있으면 데이터베이스 연결이 실패하기 시작합니다. " 'NT AUTHORITY \ ANONYMOUS LOGON'사용자의 로그인에 실패했습니다. 이유 : 인프라 오류로 인해 토큰 기반 서버 액세스 유효성 검증에 실패했습니다. 이전 오류를 확인하십시오." 이전 오류는 "오류 : 18456, 심각도 : 14, 상태 : 11"입니다. 따라서
OURDOMAIN\ourwebserver$
이제는 더 이상 사용되지 않고 대신 익명 액세스가 시도됩니다. (UAC가 꺼 졌을 때이 문제가 발생했고 UAC를 켠 후에 사라 졌다는 일화적인 증거가 있습니다.하지만 UAC를 변경하려면 재부팅해야합니다 ...) 유사한 문제가 IIS.net 스레드 "use ApplicationPoolIdentity 에서보고됩니다. " to connect to SQL " , 특히 한 번의 응답 .ADSI (System.DirectoryServices)를 통한 Active Directory 작업이 오류 0x8000500C ( "알 수없는 오류"), 0x80072020 ( "작업 오류가 발생했습니다.") 또는 0x200B ( "지정된 디렉터리 서비스 특성 또는 값이 없습니다.")과 함께 실패하기 시작합니다. .
Internet Explorer에서 애플리케이션에 로그인하면 HTTP 401 오류와 함께 실패하기 시작합니다. 그러나 IIS에서 Negotiate 전에 NTLM을 넣으면 다시 작동합니다. (Kerberos에는 AD 액세스가 필요하지만 NTLM에는 필요하지 않습니다.) 유사한 문제가 IIS.net 스레드 "AppPool ID로 창 인증 실패" 에서보고됩니다 .
우리의 가설 및 해결 방법
적어도 AD 및 로그인 문제는 응용 프로그램 풀을 ApplicationPoolIdentity에서 NetworkService로 전환 할 때 항상 사라지는 것처럼 보입니다. (우리는 이것을 확인하는 하나의 보고서 를 찾았습니다 .)
페이지 "ASP 페이지 문제 해결 인증 문제" 차 대 차 토큰에 관련된 몇 가지 제안을 가지고 있으며, 제가 격려 찾을 것은 우리의 오류의 처음 두 링크이다 : 그것은 언급 NT AUTHORITY\ANONYMOUS LOGON
"지정한 디렉터리 서비스 액세스 및 AD 오류 0x8000500C 및 속성 또는 값이 없습니다. "
(같은 페이지에도 ADSI 스키마 캐시 문제가 언급되어 있지만 해당 주제에서 찾을 수있는 모든 것은 오래되었습니다. 현재로서는이 문제가 관련이 없다고 생각합니다.)
위의 내용을 기반으로 현재 작업 가설 은 가상 앱 풀 ID로 실행될 때만 웹 응용 프로그램 (IIS? 작업자 프로세스?)이 갑자기 기본 토큰을 잃어 IIS에 보조 토큰 만 있으므로 모든 Active Directory 및 SQL Server에 대한 액세스는 익명으로 수행되므로 위의 모든 오류가 발생합니다.
지금은 ApplicationPoolIdentity에서 NetworkService로 전환하려고합니다. 이로 인해 위의 모든 문제가 해결되기를 바랍니다. 그러나 우리는 확실하지 않습니다. 가능하면 다시 전환하고 싶습니다.
우리의 질문
위의 가설이 맞습니까? 그렇다면 IIS / Windows / .NET의 버그입니까? 이 기본 토큰 손실은 어떤 상황에서 발생합니까?
Microsoft 지원을 통해 Microsoft 기술 자료 문서 KB2545850에 설명 된 문제가 발생 했음을 알았습니다 . 이것은 ApplicationPoolIdentity가 사용되는 경우에만 발생합니다. 즉, 컴퓨터 계정 암호가 변경된 후 (기본적으로 30 일마다 자동으로 수행됨) IIS가 다시 시작된 후 (예 :를 통해 iisreset
) 매우 쉽게 발생합니다 . Microsoft와 우리의 관찰에 따르면 재부팅 후 문제가 사라집니다.
Microsoft에 따르면 Windows / IIS가이 상태가되었는지 확인할 수 없습니다.
Microsoft는이 KB 문서에 핫픽스가 첨부되어 있습니다. 해당 핫픽스가 언제 공식적으로 제공 될지는 표시되지 않으며 핫픽스는 이미 10 개월이되었습니다. 특정한 경우에는 대신 NetworkService로 전환하기로 결정했습니다.
동일한 문제 / 솔루션에 대한 내 의견 은 https://serverfault.com/a/403534/126432 를 참조 하십시오 .
링크 된 핫픽스를 사용하여 문서에서 말하는대로 ApplicationPoolIdentity가 작동하도록 할 수있었습니다. 이 핫픽스는 네트워크 리소스에 액세스하는 솔루션을 NT AUTHORITY \ ANONYMOUS LOGON으로 구체적으로 설명하지는 않지만 컴퓨터 암호 변경과 관련이 있습니다. 결론은 적어도 지금까지는 저에게 효과적이었습니다.
이는 Active Directory 인증을 사용하는 Umbraco 와도 관련이 있습니다. 때때로 다음과 같은 예외가 발생할 수 있습니다.
구성 오류
지정된 디렉터리 서비스 속성 또는 값이 없습니다.
이것은 분명히 여기에 설명 된 문제로 인해 발생합니다. 재부팅하면 항상 문제가 해결됩니다.
'development' 카테고리의 다른 글
메모리 주문 "획득"과 "소비"는 어떻게 다르며 언제 "소비"가 선호됩니까? (0) | 2020.12.09 |
---|---|
문제 : Bob의 판매 (0) | 2020.12.09 |
300GB 메모리로 제한되는 64 비트 JVM? (0) | 2020.12.09 |
iTunesConnect에서 중국에서 앱 다운로드가 갑자기 급증 했습니까? (0) | 2020.12.09 |
jQuery에서 Div 요소 회전 (0) | 2020.12.09 |