사용자가 여러 그룹에 속하는 경우의 Kerberos 인증 문제

이 문서는 사용자가 많은 그룹에 속해 있을 때 Kerberos 인증 실패 문제를 해결하는 데 도움이 됩니다.

적용 대상: Windows 10 - 모든 버전, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2
원본 KB 번호: 327825

증상

많은 수의 보안 그룹에 속한 사용자는 인증에 문제가 있습니다. 인증할 때 사용자에게 HTTP 400 - 잘못된 요청(요청 헤더가 너무 깁니다)과 같은 메시지가 표시 될 수 있습니다. 또한 사용자에게 리소스에 액세스하는 데 문제가 있으며 사용자의 그룹 정책 설정이 올바르게 업데이트되지 않을 수 있습니다.

오류 컨텍스트에 대한 자세한 내용은 HTTP 요청에 대한 HTTP 400 잘못된 요청(요청 헤더가 너무 깁니다) 응답을 참조하세요.

참고

비슷한 조건에서 Windows NTLM 인증은 예상대로 작동합니다. Windows 동작을 분석하지 않으면 Kerberos 인증 문제가 표시되지 않을 수 있습니다. 그러나 이러한 시나리오에서는 Windows에서 그룹 정책 설정을 업데이트하지 못할 수 있습니다.

이 동작은 현재 지원되는 Windows 버전에서 발생합니다. 현재 지원되는 Windows 버전에 대한 자세한 내용은 Windows 수명 주기 팩트 시트를 참조하세요.

원인

Kerberos가 사용자를 나타내기 위해 빌드하는 티켓이 사용자의 모든 그룹 멤버 자격을 포함할 만큼 충분히 크지 않기 때문에 사용자는 인증할 수 없습니다.

인증 서비스 교환의 일부로 Windows는 권한 부여를 위해 사용자를 나타내는 토큰을 빌드합니다. 이 토큰(권한 부여 컨텍스트라고도 함)에는 사용자의 SID(보안 식별자)와 사용자가 속한 모든 그룹의 SID가 포함됩니다. 또한 사용자 계정의 sIDHistory 특성에 저장된 모든 SID도 포함합니다. Kerberos는 이 토큰을 Kerberos TGT(Ticket-Getting Ticket)의 PAC(Privilege Attribute Certificate) 데이터 구조에 저장합니다. Windows Server 2012 시작하여 Kerberos는 토큰을 Kerberos 티켓의 Active Directory 클레임 정보(동적 Access Control) 데이터 구조에도 저장합니다. 사용자가 많은 그룹의 구성원이고 사용 중인 사용자 또는 디바이스에 대한 클레임이 많은 경우 이러한 필드는 티켓에 많은 공간을 차지할 수 있습니다.

토큰의 최대 크기MaxTokenSize()가 고정되어 있습니다. RPC(원격 프로시저 호출) 및 HTTP와 같은 전송 프로토콜은 인증 작업을 위해 버퍼를 할당할 때 값에 MaxTokenSize 의존합니다. MaxTokenSize 에는 토큰을 빌드하는 Windows 버전에 따라 다음과 같은 기본값이 있습니다.

  • Windows Server 2008 R2 및 이전 버전 및 Windows 7 및 이전 버전: 12,000바이트
  • Windows Server 2012 이상 버전 및 Windows 8 이상 버전: 48,000바이트

일반적으로 사용자가 120개 이상의 범용 그룹에 속하는 경우 기본값 MaxTokenSize 은 정보를 저장할 수 있을 만큼 큰 버퍼를 만들지 않습니다. 사용자가 인증할 수 없으며 메모리 부족 메시지를 받을 수 있습니다. 또한 Windows에서 사용자에 대한 그룹 정책 설정을 적용하지 못할 수 있습니다.

참고

다른 요인은 최대 그룹 수에도 영향을 줍니다. 예를 들어 전역 및 도메인 로컬 그룹의 SID에는 더 작은 공간 요구 사항이 있습니다. Windows Server 2012 이상 버전은 Kerberos 티켓에 클레임 정보를 추가하고 리소스 SID도 압축합니다. 두 기능 모두 공간 요구 사항을 변경합니다.

해결 방법

이 문제를 resolve 클라이언트 컴퓨터를 포함하여 Kerberos 인증 프로세스에 참여하는 각 컴퓨터에서 레지스트리를 업데이트합니다. 특히 사용자가 여러 도메인 또는 포리스트에 로그온해야 하는 경우 모든 Windows 기반 시스템을 업데이트하는 것이 좋습니다.

중요

레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 수정하기 전에 문제가 발생하는 경우 복원을 위해 레지스트리를 백업합니다.

이러한 각 컴퓨터에서 레지스트리 항목을 더 큰 값으로 설정합니다 MaxTokenSize . 하위 키에서 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters 이 항목을 찾을 수 있습니다. 이 변경 후 컴퓨터를 다시 시작해야 합니다.

에 대한 새 값을 결정하는 방법에 대한 MaxTokenSize자세한 내용은 이 문서의 최대 토큰 크기 계산 섹션을 참조하세요.

예를 들어 SQL Server 클라이언트를 사용하는 웹 애플리케이션을 사용하는 사용자를 고려해 보세요. 인증 프로세스의 일부로 SQL Server 클라이언트는 사용자의 토큰을 백 엔드 SQL Server 데이터베이스에 전달합니다. 이 경우 다음 각 컴퓨터에서 MaxTokenSize 레지스트리 항목을 구성해야 합니다.

  • 인터넷 Explorer 실행하는 클라이언트 컴퓨터
  • IIS를 실행하는 웹 서버
  • SQL Server 클라이언트 컴퓨터
  • SQL Server 데이터베이스 컴퓨터

Windows Server 2012 이상 버전에서는 토큰 크기가 특정 임계값을 초과하는 경우 Windows에서 이벤트(이벤트 ID 31)를 기록할 수 있습니다. 이 동작을 사용하려면 큰 Kerberos 티켓에 대해 Computer Configuration\Administrative Templates\System\KDC\Warning 그룹 정책 설정을 구성해야 합니다.

최대 토큰 크기 계산

다음 수식을 사용하여 Windows에서 특정 사용자에 대해 생성하는 토큰의 크기를 계산합니다. 이 계산은 를 변경 MaxTokenSize해야 하는지 여부를 결정하는 데 도움이 됩니다.

TokenSize = 1200 + 40d + 8s

Windows Server 2012 이상 버전의 경우 이 수식은 다음과 같이 구성 요소를 정의합니다.

  • 1200. Kerberos 티켓의 예상 오버헤드 값입니다. 이 값은 DNS 도메인 이름의 길이 및 클라이언트 이름의 길이와 같은 요인에 따라 달라질 수 있습니다.
  • d. 다음 값의 합계입니다.
    • 사용자의 계정 도메인 외부에 있는 범용 그룹의 멤버 자격 수입니다.
    • 계정의 특성에 저장된 SID 수입니다 sIDHistory . 이 값은 그룹 멤버 자격 및 사용자 SID를 계산합니다.
  • s. 다음 값의 합계입니다.
    • 사용자의 계정 도메인 내에 있는 범용 그룹의 멤버 자격 수입니다.
    • 도메인-로컬 그룹의 멤버 자격 수입니다.
    • 전역 그룹의 멤버 자격 수입니다.

Windows Server 2008 R2 및 이전 버전은 동일한 수식을 사용합니다. 그러나 이러한 버전은 도메인-로컬 그룹 멤버 자격의 수를 s 값 대신 d 값의 일부로 간주합니다.

값이 MaxTokenSize0x0000FFFF(64K)인 경우 약 1,600 개의 d클래스 SID 또는 약 8000 s클래 SID를 버퍼링할 수 있습니다. 그러나 다음을 포함하여 다른 여러 요인은 에 안전하게 사용할 수 있는 값에 MaxTokenSize영향을 줍니다.

  • 위임 계정에 대해 신뢰할 수 있는 을 사용하는 경우 각 SID에는 두 배의 공간이 필요합니다.

  • 여러 트러스트가 있는 경우 SID를 필터링하도록 트러스트를 구성합니다. 이 구성은 Kerberos 티켓 크기의 영향을 줄입니다.

  • Windows Server 2012 이상 버전을 사용하는 경우 다음 요인도 SID 공간 요구 사항에 영향을 줍니다.

    • PAC에서 SID를 압축하기 위한 새로운 체계가 있습니다. 자세한 내용은 KDC 리소스 SID 압축을 참조하세요. 이 기능은 티켓의 SID에 필요한 크기를 줄입니다.
    • 동적 Access Control 티켓에 Active Directory 클레임을 추가하여 크기 요구 사항을 높입니다. 그러나 Windows Server 2012 파일 서버를 사용하여 클레임을 배포한 후에는 파일 액세스를 제어하는 상당수의 그룹을 단계적으로 폐지할 수 있습니다. 이 감소는 차례로 티켓에 필요한 크기를 줄일 수 있습니다. 자세한 내용은 동적 Access Control: 시나리오 개요를 참조하세요.
  • 제한되지 않은 위임을 사용하도록 Kerberos를 구성한 경우 의 유효한 추정치MaxTokenSize를 얻으려면 수식에서 값을 두 배로 증 TokenSize 분해야 합니다.

    중요

    2019년 Microsoft는 Kerberos에 대한 제한되지 않은 위임의 기본 구성을 사용하지 않도록 변경한 업데이트를 Windows에 제공했습니다. 자세한 내용은 Windows Server에서 들어오는 트러스트에서 TGT 위임에 업데이트 참조하세요.

    리소스 SID 압축이 널리 사용되고 제한되지 않는 위임이 더 이상 사용되지 MaxTokenSize 않으므로 48000 이상은 모든 시나리오에 충분해야 합니다.

MaxTokenSize에 영향을 주는 알려진 문제

MaxTokenSize 대부분의 구현에는 48,000바이트 값으로 충분해야 합니다. Windows Server 2012 이상 버전의 기본값입니다. 그러나 더 큰 값을 사용하기로 결정한 경우 이 섹션의 알려진 문제를 검토합니다.

  • LSA 액세스 토큰에 대한 1,010개 그룹 SID의 크기 제한

    이 문제는 그룹 멤버 자격이 너무 많은 사용자가 인증할 수 없지만 문제를 제어하는 계산 및 조건이 다르다는 것과 유사합니다. 예를 들어 사용자는 Kerberos 인증 또는 Windows NTLM 인증을 사용하는 동안 이 문제가 발생할 수 있습니다. 자세한 내용은 1,010개 이상의 그룹의 구성원인 사용자 계정에 대한 로깅이 Windows Server 기반 컴퓨터에서 실패할 수 있음을 참조하세요.

  • MaxTokenSize 값이 48,000보다 큰 경우 알려진 문제

    서비스 거부 공격 벡터를 완화하기 위해 IIS(인터넷 정보 서버)는 64KB의 제한된 HTTP 요청 버퍼 크기를 사용합니다. HTTP 요청의 일부인 Kerberos 티켓은 Base64(6비트에서 8비트로 확장됨)로 인코딩됩니다. 따라서 Kerberos 티켓은 원래 크기의 133%를 사용하고 있습니다. 따라서 최대 버퍼 크기가 IIS에서 64KB인 경우 Kerberos 티켓은 48,000바이트를 사용할 수 있습니다.

    레지스트리 항목을 48000바이트보다 큰 값으로 설정하고 MaxTokenSize SID에 버퍼 공간을 사용하는 경우 IIS 오류가 발생할 수 있습니다. 그러나 레지스트리 항목을 48,000바이트로 설정하고 MaxTokenSize SID 및 클레임 공간을 사용하는 경우 Kerberos 오류가 발생합니다.

    IIS 버퍼 크기에 대한 자세한 내용은 WINDOWS 2000의 클라이언트에서 IIS가 허용하는 HTTP 전송의 헤더 크기를 제한하는 방법을 참조하세요.

  • MaxTokenSize 값이 65,535보다 큰 경우 알려진 문제

    이 문서의 이전 버전에서는 에 대해 최대 100,000바이트 값에 대해 설명했습니다 MaxTokenSize. 그러나 가 100,000바이트 이상일 때 MaxTokenSize SMS 관리자 버전에 문제가 있음을 발견했습니다.

    또한 IPSEC IKE 프로토콜은 보안 BLOB이 66,536바이트보다 커지는 것을 허용하지 않으며 가 더 큰 값으로 설정된 경우에도 MaxTokenSize 실패한다는 것을 확인했습니다.