Kerberos로 SSO 설정 방법

Red Hat JBoss Enterprise Application Platform 7.4

Kerberos를 사용하여 SSO(Single Sign-On) 사용자 액세스를 Red Hat JBoss Enterprise Application Platform에 대한 구성 및 관리하는 방법.

Red Hat Customer Content Services

초록

이 가이드의 목적은 Red Hat JBoss Enterprise Application Platform 내에서 Kerberos가 포함된 SSO(Single Sign-On)의 주제를 살펴보고 JBoss EAP에서 Kerberos로 SSO를 설정하기 위한 실용적인 가이드를 제공합니다. 기본적으로 이 가이드에서는 Kerberos가 있는 SSO에 대한 자세한 내용과 JBoss EAP 내에서 설정하고 구성하는 방법을 자세히 설명합니다. 이 가이드를 읽기 전에 사용자는 Red Hat JBoss Enterprise Application Platform의 보안 아키텍처 문서를 읽고 해당 문서에 있는 SSO 및 Kerberos 정보를 정확하게 이해해야 합니다. 이 가이드에서는 구성 변경 작업을 수행하기 위해 JBoss EAP CLI 인터페이스를 사용합니다. 독립 실행형 JBoss EAP 인스턴스 및 JBoss EAP 도메인 모두에 대해 CLI를 사용하는 방법에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오. 이 가이드를 완료할 때 리더는 SSO 및 Kerberos에 대해 잘 이해하고 JBoss EAP와 어떻게 연관되는지, 구성 방법을 잘 알고 있어야 합니다.

JBoss EAP 문서에 대한 피드백 제공

오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.

절차

  1. 티켓을 생성하려면 다음 링크를 클릭하십시오.
  2. 문서 URL, 섹션 번호 를 포함하고 문제를 설명하십시오.
  3. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  4. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  5. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Kerberos glanceer Dive가 있는 SSO

1.1. SSO와 Kerberos란 무엇입니까?

SSO(Single Sign-On) 및 Kerberos의 기본 배경은 JBoss EAP 보안 아키텍처 가이드의 Single Sign-On 섹션에서 제공됩니다.

1.2. Kerberos 구성 요소

Kerberos 자체는 보안 키 암호화를 사용하여 클라이언트/서버 애플리케이션 사용자에 대한 인증을 활성화하는 네트워크 프로토콜입니다. Kerberos는 일반적으로 네트워크에서 데스크탑 사용자를 인증하는 데 사용되지만 일부 추가 도구를 사용하여 사용자를 웹 애플리케이션에 인증하고 웹 애플리케이션 집합에 SSO를 제공하는 데 사용할 수 있습니다. 이를 통해 이미 데스크탑 네트워크에서 인증을 받은 사용자는 다시 인증하지 않고도 웹 애플리케이션의 보안 리소스에 원활하게 액세스할 수 있습니다. 사용자가 데스크탑 기반 인증 메커니즘을 사용하여 인증되고 웹 애플리케이션에서도 인증 토큰 또는 티켓을 사용하므로 이 개념을 데스크탑 기반 SSO라고 합니다. 이는 사용자를 인증하고 브라우저를 통해 토큰을 모두 발급하는 브라우저 기반 SSO와 같은 다른 SSO 메커니즘과 다릅니다.

Kerberos 프로토콜은 인증 및 권한 부여에서 사용하는 여러 구성 요소를 정의합니다.

티켓

티켓 은 Kerberos가 주체에 대한 인증 및 권한 결정을 내리기 위해 사용하는 보안 토큰의 한 형태입니다.

인증 서비스

인증 서비스 (AS) 챌린지에서는 처음 네트워크에 로그인할 때 로그인해야 합니다. 인증 서비스는 티켓 부여 서비스 및 보안 서비스 및 리소스에 대한 후속 액세스에 필요한 티켓 부여 티켓(TGT)을 발행합니다.

티켓 부여 서비스

TGS( 티켓 부여 서비스 )는 액세스하려는 대상 서버와 서비스 티켓 및 특정 세션 정보를 주체에게 발행합니다. 이는 TGT 및 주체가 제공하는 대상 정보를 기반으로 합니다. 그런 다음 이 서비스 티켓과 세션 정보는 대상에 대한 연결을 설정하고 원하는 보안 서비스 또는 리소스에 액세스하는 데 사용됩니다.

키 배포 센터

KDC( 키 배포 센터 )는 TGS와 AS가 모두 포함된 구성 요소입니다. KDC는 클라이언트 또는 주체, 서버 또는 보안 서비스와 함께 Kerberos 인증을 수행하는 데 필요한 세 가지 요소입니다.

티켓 부여 중

티켓 부여 티켓 (TGT)은 AS(AS)가 주체에게 발행한 티켓의 유형입니다. 주체가 사용자 이름과 암호를 사용하여 AS에 대해 인증되면 TGT가 부여됩니다. TGT는 클라이언트에서 로컬로 캐시하지만 KDC만 읽을 수 있고 클라이언트에서 읽을 수 없도록 암호화됩니다. 이를 통해 AS는 TGS에서 사용하기 위해 권한 부여 데이터 및 기타 정보를 TGT에 안전하게 저장하고 TGS가 이 데이터를 사용하여 권한 부여 결정을 내릴 수 있습니다.

서비스 티켓

서비스 티켓 (ST)은 TGT와 의도한 목적지를 기준으로 TGS가 주체에게 발행한 티켓 유형입니다. 주체는 TGS에 TGT 및 의도된 대상을 제공하고 TGS는 TGT의 권한 부여 데이터에 따라 주체가 대상에 액세스할 수 있는지 확인합니다. 성공하면 TGS는 클라이언트와 보안 서비스 또는 리소스를 포함하는 서버인 대상 서버 모두에 대해 ST를 발행합니다. 그러면 대상 서버에 대한 클라이언트 액세스 권한이 부여됩니다. 클라이언트에서 캐시하고 클라이언트와 서버에서 모두 읽을 수 있는 ST에는 클라이언트와 서버가 안전하게 통신할 수 있는 세션 정보도 포함되어 있습니다.

참고

Kerberos와 네트워크의 DNS 설정 사이에는 긴밀한 관계가 있습니다. 예를 들어 클라이언트가 실행 중인 호스트 이름을 기반으로 KDC에 액세스할 때 특정 가정이 이루어집니다. 따라서 클라이언트가 연결할 수 있도록 Kerberos 설정 외에 모든 DNS 설정이 올바르게 구성되어 있어야 합니다.

1.3. 추가 구성 요소

JBoss EAP를 사용하여 Kerberos SSO를 활성화하려면 Kerberos 구성 요소 외에도 몇 가지 다른 항목이 필요합니다.

1.3.1. SPNEGO

SPNEGO( Simple and protecteded GSSAPI Negotiation Mechanism )는 웹 애플리케이션에서 사용하기 위한 Kerberos 기반 SSO(Single Sign-On) 환경을 확장하는 메커니즘을 제공합니다.

SPNEGO는 클라이언트 애플리케이션에서 서버에 자신을 인증하는 데 사용하는 인증 방법입니다. 이 기술은 클라이언트 애플리케이션과 서버가 서로 통신하려고 할 때 사용되지만 다른에서 지원하는 인증 프로토콜은 확실하지 않습니다. SPNEGO는 클라이언트 애플리케이션과 서버 간의 일반적인 GSSAPI 메커니즘을 결정한 다음 모든 추가 보안 작업을 디스패치합니다.

웹 브라우저와 같은 클라이언트 컴퓨터에 있는 애플리케이션이 웹 서버에서 보호된 페이지에 액세스하려고 하면 서버에서 권한 부여가 필요한지 응답합니다. 그러면 애플리케이션이 Kerberos KDC에서 서비스 티켓을 요청합니다. 티켓이 획득되면 애플리케이션은 SPNEGO 형식이 지정된 요청으로 래핑하고 브라우저를 통해 웹 애플리케이션으로 다시 보냅니다. 배포된 웹 애플리케이션을 실행하는 웹 컨테이너는 요청의 압축을 풀고 티켓 인증을 시도합니다. 인증에 성공하면 액세스 권한이 부여됩니다.

SPNEGO는 Microsoft Active Directory의 핵심적인 일부인 Red Hat Enterprise Linux 및 Kerberos 서버에 포함된 Kerberos 서비스를 비롯한 모든 종류의 Kerberos 공급자와 함께 작동합니다.

1.3.2. JBoss Negotiation

JBoss Negotiation은 JBoss EAP에서 SPNEGO를 지원하기 위해 인증자 및 Jakarta Authentication 로그인 모듈을 제공하는 JBoss EAP와 함께 제공되는 프레임워크입니다. JBoss 협상은 레거시 보안 하위 시스템 및 레거시 코어 관리 인증에서만 사용됩니다. Jakarta Authentication 로그인 모듈에 대한 자세한 내용은 JBoss EAP 보안 아키텍처 가이드의 선언적 보안 및 자카르타 인증 및 보안 도메인 섹션을 참조하십시오.

참고

JBoss 협상을 사용하여 REST 웹 서비스와 같은 특정 애플리케이션의 보안을 설정할 때 시간 제한 기간 동안 하나 이상의 세션을 만들고 열린 상태로 유지할 수 있습니다. 이 기간 동안 클라이언트에서 요청을 수행할 때 기본값은 30분입니다. 이는 기본 인증을 사용하여 애플리케이션 보안에 대한 예상되는 동작과 다르며, 이 동작은 열린 세션이 되지 않습니다. JBoss Negotiation은 session을 사용하여 협상/커넥션 상태를 유지하도록 구현되어 이러한 세션을 생성할 것으로 예상됩니다.

1.4. Kerberos 통합

Kerberos는 Red Hat Enterprise Linux와 같은 Linux 배포판을 비롯한 많은 운영 체제와 통합됩니다. 또한 Kerberos는 Microsoft Active Directory의 통합 과정이며 Red Hat Directory Server 및 Red Hat IDM에서 지원합니다.

1.5. Kerberos는 JBoss EAP에 SSO를 어떻게 제공합니까?

Kerberos는 클라이언트 및 서버에서 사용할 KDC에서 티켓을 발행하여 데스크탑 기반 SSO를 제공합니다. JBoss EAP는 자체 인증 및 권한 부여 프로세스에서 동일한 티켓을 사용하여 기존 프로세스와 통합할 수 있습니다. JBoss EAP가 이러한 티켓을 재사용하는 방법을 이해하기 전에 먼저 이러한 티켓을 발행하는 방법과 JBoss EAP가 없는 데스크탑 기반 SSO의 Kerberos에서 인증 및 권한 부여가 작동하는 방식을 자세히 이해하는 것이 가장 좋습니다.

1.5.1. 데스크탑 기반 SSO에서 Kerberos를 사용한 인증 및 권한 부여

Kerberos는 인증 및 권한 부여를 제공하기 위해 타사인 KDC를 사용하여 서버에 액세스하는 클라이언트에 인증 및 권한 부여 결정을 제공합니다. 이러한 결정은 다음 세 단계로 이루어집니다.

  1. 인증 교환.

    주체가 먼저 네트워크에 액세스하거나 TGT( 티켓 부여 티켓) 없이 보안 서비스에 액세스하려고 하면 자격 증명을 사용하여 인증 서비스(AS)에 대해 인증해야 합니다. AS는 구성된 ID 저장소에 대해 사용자 제공 자격 증명을 검증하고 성공적인 인증을 받으면 클라이언트가 캐시하는 TGT를 발행합니다. 또한 TGT에는 몇 가지 세션 정보가 포함되어 클라이언트와 KDC 간의 향후 통신이 보호됩니다.

  2. 교환 또는 권한 부여, 티켓 부여.

    주체가 TGT를 발행하면 보안 서비스 또는 리소스에 액세스를 시도할 수 있습니다. 주체는 티켓 부여 서비스(TGS)에 요청을 보내 KDC에서 발급한 TGT를 전달하고 특정 목적지에 대한 서비스 티켓(ST)을 요청합니다. TGS는 주체가 제공하는 TGT를 확인하고 요청된 리소스에 액세스할 수 있는 적절한 권한이 있는지 확인합니다. 성공하면 TGS는 주체가 특정 대상에 액세스하기 위해 ST를 발행합니다. 또한 TGS는 두 클라이언트와 대상 서버 모두에 대한 세션 정보를 생성하여 둘 사이의 안전한 통신을 허용합니다. 클라이언트와 서버가 KDC에서 각각 제공하는 장기 키를 사용하여 이전 트랜잭션에서 각각에 이르기까지 자체 세션 정보만 해독할 수 있도록 이 세션 정보는 별도로 암호화됩니다. TGS는 클라이언트와 서버 모두에 대한 세션 정보를 포함하는 ST를 사용하여 클라이언트에 응답합니다.

  3. 서버 액세스.

    이제 주체는 보안 서비스의 ST와 해당 서버와의 보안 통신을 위한 메커니즘을 보유하므로 이제 클라이언트는 연결을 설정하고 보안 리소스에 액세스를 시도할 수 있습니다. 클라이언트는 ST를 대상 서버에 전달하여 시작합니다. 이 ST에는 해당 대상을 위해 TGS에서 수신한 세션 정보의 서버 구성 요소가 포함되어 있습니다. 서버는 KDC에서 장기 키를 사용하여 클라이언트가 전달하는 세션 정보를 암호 해독하려고 합니다. 성공하면 클라이언트가 서버에 성공적으로 인증되고 서버가 클라이언트에 인증된 것으로 간주됩니다. 이때 클라이언트와 서버 간에 신뢰가 설정되고 보안 통신을 진행할 수 있습니다.

참고

권한 없는 주체는 실제로 TGT를 사용할 수 없다는 사실에도 불구하고 주체는 AS 인증을 처음 취득한 후에만 TGT를 발행하게 됩니다. 이렇게 하면 적절한 승인된 주체만 TGT를 발행할 수 있을 뿐 아니라, 오프라인 사전 또는 무차별/강제 공격을 사용하는 등 권한 없는 타사가 손상 또는 악용을 시도할 수 있는 기능도 줄어듭니다.

1.5.2. Kerberos 및 JBoss EAP

JBoss EAP는 기존 Kerberos 데스크탑 기반 SSO 환경과 통합하여 동일한 티켓을 사용하여 JBoss EAP 인스턴스에 호스팅된 웹 애플리케이션에 대한 액세스를 제공할 수 있습니다. 일반적인 설정에서는 레거시 보안 하위 시스템 또는 elytron 하위 시스템을 사용하여 SPNEGO에서 Kerberos 인증을 사용하도록 JBoss EAP 인스턴스를 구성합니다. SPNEGO 인증을 사용하도록 구성된 애플리케이션은 해당 JBoss EAP 인스턴스에 배포됩니다. 사용자가 Kerberos로 관리되는 데스크탑에 로그인하고 KDC를 사용하여 인증 교환을 완료합니다. 그런 다음 사용자는 웹 브라우저를 사용하여 배포된 애플리케이션에서 직접 해당 JBoss EAP 인스턴스에 있는 보안 리소스에 액세스를 시도합니다. JBoss EAP는 보안 리소스에 액세스하는 데 권한 부여가 필요하다고 응답합니다. 웹 브라우저는 사용자의 TGT 티켓을 가져온 다음 KDC와 교환하여 KDC와 교환하여 티켓 부여 또는 권한 부여를 수행하여 사용자를 검증하고 서비스 티켓을 받습니다. ST가 브라우저로 반환되면 SPNEGO에 대해 포맷된 요청의 ST를 래핑하고 JBoss EAP에서 실행 중인 웹 애플리케이션으로 다시 보냅니다. 그런 다음 JBoss EAP는 SPNEGO 요청의 압축을 풀고 레거시 보안 하위 시스템 또는 elytron 하위 시스템을 사용하여 인증을 수행합니다. 인증에 성공하면 사용자에게 보안 리소스에 대한 액세스 권한이 부여됩니다.

2장. Kerberos로 JBoss EAP용 SSO 설정 방법

2.1. 필수 구성 요소

Kerberos로 SSO용 JBoss EAP를 설정할 때 다음 구성 요소가 있어야 합니다.

  • 올바르게 구성된 Kerberos 환경
  • JBoss EAP 인스턴스
  • 웹 애플리케이션

2.1.1. JBoss Negotiation Toolkit 정보

JBoss Negotiation Toolkit 은 애플리케이션을 프로덕션 환경에 도입하기 전에 인증 메커니즘을 디버그 및 테스트하는 데 도움이 되는 디버깅 도구입니다. 이 도구는 지원되지 않는 도구이지만 웹 애플리케이션에 대해 SPNEGO를 구성하기 어려울 수 있으므로 매우 유용할 수 있습니다.

JBoss Negotiation Toolkit 리포지토리에서 JBoss Negotiation Toolkit의 미리 빌드된 WAR 파일을 다운로드할 수 있습니다. JBoss EAP에 포함된 JBoss 협상 버전과 일치하는 JBoss Negotiation Toolkit 버전을 다운로드해야 합니다. 예를 들어 JBoss Negotiation 3.0.4.Final-redhat-1을 사용하는 JBoss EAP 7.1을 사용하는 경우 jboss- negotiation-toolkit-3.0.4.Final.war 를 사용해야 합니다. EAP_HOME/modules/system/layers/base/org/jboss/security/negotiation/main/module.xml 에서 사용 중인 JBoss Negotiation 버전을 확인할 수 있습니다.

2.2. Kerberos 환경

Kerberos가 JBoss EAP에 SSO를 제공하는 방법에서 설명한 대로 Kerberos 는 타사인 KDC를 사용하여 인증 및 권한 부여 결정을 제공합니다. 또한 클라이언트, 브라우저 및 해당 호스트를 KDC 인증에 맞게 올바르게 구성해야 합니다. 이 가이드는 주로 JBoss EAP와 호스팅된 웹 애플리케이션을 구성하는 방법에 중점을 두고 있으므로 KDC 및 Kerberos 도메인을 구성하는 것은 이 문서의 범위에 있지 않습니다.

참고

이후 섹션에서는 KDC 및 Kerberos 도메인이 이미 설정되었으며 올바르게 구성되었다고 가정합니다.

2.3. 이전 버전 구성 JBoss EAP의 차이점

JBoss EAP 7.2 이상과 이전 버전 사이에는 몇 가지 뚜렷한 차이점이 있습니다.

  • jboss-web.xml에는 NegotiationAuthenticator 센서가 더 이상 필요하지 않지만 web.xml 에 정의된 <security-constraint><login-config> 요소가 있어야 합니다. 보안되는 리소스를 결정하는 데 사용됩니다.
  • <login -config> 요소의 auth- method 요소는 쉼표로 구분된 목록입니다. 정확한SPNEGO 가 있어야 하며 해당 목록에 먼저 표시되어야 합니다. FORM 인증이 대체로 필요한 경우 정확한 값은 SPNEGO,FORM 입니다.
  • elytron 하위 시스템을 사용할 때는 jboss-deployment-structure.xml 파일이 필요하지 않습니다.

2.4. JBoss EAP 인스턴스 구성

elytron 또는 레거시 보안 하위 시스템을 사용하도록 JBoss EAP에 배포된 애플리케이션을 구성할 수 있지만 둘 다 사용하도록 구성할 수는 없습니다.

2.4.1. Elytron 하위 시스템 구성

중요

다음 단계에서는 작동하는 KDC, Kerberos 도메인 및 브라우저가 구성되어 작동한다고 가정합니다.

  1. kerberos-security-factory 구성.

    /subsystem=elytron/kerberos-security-factory=krbSF:add(principal="HTTP/host@REALM", path="/path/to/http.keytab", mechanism-oids=[1.2.840.113554.1.2.2, 1.3.6.1.5.5.2])
  2. Kerberos의 시스템 속성을 구성합니다.

    환경을 구성하는 방법에 따라 아래의 일부 시스템 속성을 설정해야 합니다.

    시스템 속성설명

    java.security.krb5.kdc

    KDC의 호스트 이름입니다.

    java.security.krb5.realm

    영역의 이름입니다.

    java.security.krb5.conf

    구성 krb5.conf 파일의 경로입니다.

    sun.security.krb5.debug

    true인 경우 디버깅 모드가 활성화됩니다.

    관리 CLI를 사용하여 JBoss EAP에서 시스템 속성을 구성하려면 다음을 수행합니다.

    /system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf")
  3. 역할을 할당하기 위한 Elytron 보안 영역을 구성합니다.

    클라이언트의 Kerberos 토큰은 주체를 제공하지만 해당 주체를 애플리케이션의 역할에 매핑하는 방법이 필요합니다. 이 작업을 수행하는 방법에는 여러 가지가 있지만, 이 예제에서는 filesystem-realm 을 생성하고 Kerberos 토큰의 주체와 일치하는 영역에 사용자를 추가하고 해당 사용자에게 역할을 할당합니다.

/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir)

/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1@REALM)

/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1@REALM, name=Roles, value=["Admin","Guest"])
  1. simple-role-decoder 추가.

    /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)

    simple-role-decoderRoles 특성에서 주체 역할을 디코딩합니다. 역할이 다른 특성에 있는 경우 이 값을 변경할 수 있습니다.

  2. security-domain 구성.

    /subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleFsRealm, role-decoder=from-roles-attribute}], default-realm=exampleFsRealm, permission-mapper=default-permission-mapper)
  3. kerberos -security-factory를 사용하는 http-authentication -factory 를 구성합니다.

    /subsystem=elytron/http-authentication-factory=example-krb-http-auth:add(http-server-mechanism-factory=global, security-domain=exampleFsSD, mechanism-configurations=[{mechanism-name=SPNEGO, mechanism-realm-configurations=[{realm-name=exampleFsSD}], credential-security-factory=krbSF}])
  4. undertow 하위 시스템에서 application-security-domain 을 구성합니다.

    /subsystem=undertow/application-security-domain=app-spnego:add(http-authentication-factory=example-krb-http-auth)

2.4.2. 레거시 보안 하위 시스템 구성

JBoss EAP에는 배포된 애플리케이션에서 SSO에 대해 SPNEGO 및 JBoss Negotiation을 사용하여 Kerberos를 사용하는 데 필요한 모든 구성 요소가 포함되어 있지만 다음과 같은 구성을 변경해야 합니다.

참고

표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

  1. 서버 ID 또는 호스트 보안 도메인을 구성합니다.

    이 보안 도메인은 컨테이너 자체를 KDC에 인증합니다. 실제 사용자가 이 연결에 참여하지 않으므로 정적 로그인 메커니즘을 허용하는 로그인 모듈을 사용해야 합니다. 다음 예제에서는 정적 주체를 사용하고 자격 증명을 포함하는 keytab 파일을 참조합니다.

    예제: 서버 ID 보안 도메인 생성

    /subsystem=security/security-domain=host:add(cache-type=default)
    
    /subsystem=security/security-domain=host/authentication=classic:add()
    
    /subsystem=security/security-domain=host/authentication=classic/login-module=Kerberos:add(code=Kerberos, flag=required, module-options=[storeKey=true, refreshKrb5Config=true, useKeyTab=true, principal=host/testserver@MY_REALM, keyTab=/home/username/service.keytab, doNotPrompt=true, debug=false])
    
    reload

    IBM JDK를 사용하는 경우 Kerberos 모듈에 대한 옵션이 다릅니다. jboss.security.disable.secdomain.option 시스템 속성을 true 로 설정해야 합니다. 자세한 내용은 Configure 관련 시스템 속성 에서 참조하십시오. 또한 로그인 모듈은 다음과 같이 구성해야 합니다.

    예제: IBM JDK

    /subsystem=security/security-domain=host:add(cache-type=default)
    
    /subsystem=security/security-domain=host/authentication=classic:add()
    
    /subsystem=security/security-domain=host/authentication=classic/login-module=Kerberos:add(code=Kerberos, flag=required, module-options=[principal=host/testserver@MY_REALM, keyTab="file:///root/keytab", credsType=acceptor])
    
    reload

    Kerberos 로그인 모듈 구성을 위한 전체 옵션 목록은 JBoss EAP 로그인 모듈 참조를 참조하십시오.

  2. 웹 애플리케이션 보안 도메인을 구성합니다.

    웹 애플리케이션 보안 도메인은 개별 사용자를 KDC에 인증하는 데 사용됩니다. 사용자를 인증하려면 하나 이상의 로그인 모듈이 있어야 합니다. 또한 사용자에게 적용할 역할을 검색하는 방법도 있어야 합니다. 이 작업은 사용자를 역할에 수동으로 매핑하는 <mapping> 을 추가하고 사용자를 역할에 매핑하는 두 번째 로그인 모듈을 추가하는 등 다양한 방법으로 수행할 수 있습니다.

    다음은 웹 애플리케이션 보안 도메인의 예를 보여줍니다.

    예제: 서버 ID 보안 도메인 생성

    /subsystem=security/security-domain=app-spnego:add(cache-type=default)
    
    /subsystem=security/security-domain=app-spnego/authentication=classic:add()
    
    /subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:add(code=SPNEGO, flag=required, module-options=[serverSecurityDomain=host])
    
    reload

    SPNEGO 로그인 모듈 구성을 위한 전체 옵션 목록은 JBoss EAP 로그인 모듈 참조를 참조하십시오.

  3. 관련 시스템 속성 구성.

    JBoss EAP는 Kerberos 서버 연결과 관련된 시스템 속성을 구성하는 기능을 제공합니다. KDC, Kerberos 도메인 및 네트워크 구성에 따라 다음 시스템 속성이 필요할 수도 있고 그렇지 않을 수도 있습니다.

    <system-properties>
      <property name="java.security.krb5.kdc" value="mykdc.mydomain"/>
      <property name="java.security.krb5.realm" value="MY_REALM"/>
      <property name="java.security.krb5.conf" value="/path/to/krb5.conf"/>
      <property name="jboss.security.disable.secdomain.option" value="true"/>
      <property name="sun.security.krb5.debug" value="false"/>
    </system-properties>
    속성설명

    java.security.krb5.kdc

    KDC의 호스트 이름입니다.

    java.security.krb5.realm

    영역의 이름입니다.

    java.security.krb5.conf

    구성 krb5.conf 파일의 경로입니다.

    jboss.security.disable.secdomain.option

    true 로 설정하면 보안 도메인에 선언된 로그인 모듈에 jboss.security.security_domain 로그인 모듈 옵션의 자동 추가가 비활성화됩니다. IBM JDK를 사용하는 경우 true 로 설정해야 합니다.

    sun.security.krb5.debug

    true인 경우 디버깅 모드가 활성화됩니다.

    참고

    기본적으로 보안 도메인에 정의된 각 로그인 모듈에는 jboss.security.security_domain 모듈 옵션이 자동으로 추가됩니다. 이 옵션을 사용하면 로그인 모듈에 문제가 발생하여 알려진 옵션만 정의되었는지 확인합니다. IBM Kerberos 로그인 모듈인 com.ibm.security.auth.module.Krb5LoginModule 은 이러한 모듈 중 하나입니다. JBoss EAP를 시작할 때 jboss.security.disable.secdomain.option 시스템 속성을 true 로 설정하여 이 모듈 옵션을 추가하는 이 동작을 비활성화할 수 있습니다. 이 작업은 관리 CLI 또는 관리 콘솔을 사용하여 <system-properties> 를 구성하거나 시작 매개변수에 -Djboss.security.disable.secdomain.option=true 를 추가하여 수행할 수 있습니다.

    시스템 속성 구성에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

2.5. 웹 애플리케이션 구성

보안 도메인을 구성하고 나면 Kerberos 인증을 활성화하기 위해 해당 보안 도메인을 사용하도록 웹 애플리케이션을 구성해야 합니다. 애플리케이션 변경이 완료되면 JBoss EAP 인스턴스에 배포하고 Kerberos를 사용하여 인증을 시작할 수 있습니다.

다음 업데이트가 애플리케이션을 수행해야 합니다.

  1. SPNEGO 인증 방법을 사용하도록 web.xml 을 구성합니다.

    web.xml 파일에는 다음이 포함되어야 합니다.

    • 보안 영역의 URL 패턴에 매핑되는 < url-pattern>이 포함된 <web-resource-collection> 이 <web-resource-collection> 인 <security-constraint >입니다. 선택적으로 <security-constraint> 에는 허용된 역할을 지정하는 <auth-constraint> 도 포함될 수 있습니다.
    • <auth-constraint> 에 지정된 역할이 있는 경우 해당 역할을 <security-role> 에 정의해야 합니다.
    • 정확한 SPNEGO 값이 있는 <auth-method>가 포함된 < login-config >입니다.

      중요

      <auth-method> 요소에는 쉼표로 구분된 특정 값 목록이 필요합니다. SPNEGO 인증을 올바르게 구성하려면 정확한SPNEGO<auth-method> 요소에 표시되고 먼저 표시되어야 합니다. 추가 인증 유형을 통합하는 방법에 대해서는 FORM 로그인을 폴백으로 추가할 때 설명합니다.

      <security-constraint><security-role> 요소를 사용하면 관리자가 URL 패턴 및 역할을 기반으로 제한되거나 제한되지 않은 영역을 설정할 수 있습니다. 이렇게 하면 리소스를 보안 또는 비보안할 수 있습니다.

      예: web.xml 파일

      <web-app>
        <display-name>App1</display-name>
        <description>App1</description>
        <!-- Define a security constraint that requires the Admin role to access resources -->
        <security-constraint>
          <display-name>Security Constraint on Conversation</display-name>
          <web-resource-collection>
            <web-resource-name>exampleWebApp</web-resource-name>
            <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <auth-constraint>
            <role-name>Admin</role-name>
          </auth-constraint>
        </security-constraint>
        <!-- Define the Login Configuration for this Application -->
        <login-config>
          <auth-method>SPNEGO</auth-method>
          <realm-name>SPNEGO</realm-name>
        </login-config>
        <!-- Security roles referenced by this web application -->
        <security-role>
          <description>Role required to log in to the Application</description>
          <role-name>Admin</role-name>
        </security-role>
      </web-app>

  2. 구성된 보안 도메인을 사용하도록 jboss-web.xml 을 구성합니다.

    jboss-web.xml 파일에는 다음이 있어야 합니다.

    • 인증 및 권한 부여에 사용할 보안 도메인을 지정하는 <security-domain> 입니다.
    • 선택적으로 web. xml 의 role-name 요소에서 별표 문자를 사용하여 여러 역할 이름과 일치하도록 <jacc-star-role-allow> 를 사용할 수 있습니다.

      예: jboss-web.xml 파일

      <jboss-web>
        <security-domain>app-spnego</security-domain>
        <jacc-star-role-allow>true</jacc-star-role-allow>
      </jboss-web>

  3. 레거시 보안 하위 시스템의 배포에 JBoss Negotiation 종속성을 추가합니다.

    중요

    elytron 하위 시스템을 사용하는 경우 이 단계를 건너뛸 수 있습니다.

    SPNEGO 및 JBoss 협상을 사용하는 웹 애플리케이션에는 JBoss Negotiation 클래스를 찾을 수 있도록 jboss-deployment-structure.xml 에 종속성을 정의해야 합니다. JBoss EAP는 필요한 모든 JBoss Negotiation 및 관련 클래스를 제공하므로 애플리케이션은 이를 사용하기 위한 종속성으로 선언하면 됩니다.

    jboss-deployment-structure.xml 을 사용하여 종속성 감소

    <jboss-deployment-structure>
      <deployment>
        <dependencies>
          <module name="org.jboss.security.negotiation"/>
        </dependencies>
      </deployment>
    </jboss-deployment-structure>

    또는 이 종속성은 대신 META-INF/MANIFEST.MF 파일에 정의할 수 있습니다.

    META-INF/MANIFEST.MF 를 사용하여 종속성 감소

    Manifest-Version: 1.0
    Dependencies: org.jboss.security.negotiation

2.6. Active Directory에 대한 추가 고려 사항

이 섹션에서는 JBoss EAP가 Active Directory 도메인의 일부인 Microsoft Windows 서버에서 실행될 때 SPNEGO 인증에 필요한 계정을 구성하는 방법에 대해 설명합니다.

이 섹션에서는 서버에 액세스하는 데 사용되는 호스트 이름을 HOST_NAME 이라고 하고, 영역을 REALM, 도메인이라고도 하며 , JBoss EAP 인스턴스를 호스팅하는 서버를 MACHINE_NAME 이라고 합니다.

2.6.1. Microsoft Windows 도메인 구성

  1. 기존 서비스 주체 매핑 지우기.

    Microsoft Windows 네트워크에서 일부 매핑은 자동으로 생성됩니다. 자동으로 생성된 매핑을 삭제하여 서버의 ID를 서비스 주체에 매핑하여 협상을 올바르게 수행합니다. 매핑을 사용하면 클라이언트 컴퓨터에서 웹 브라우저가 서버를 신뢰하고 SPNEGO를 시도할 수 있습니다. 클라이언트 컴퓨터는 HTTP/HOST_NAME 형식으로 매핑에 대한 도메인 컨트롤러로 확인합니다.

    다음은 기존 매핑을 삭제하는 단계입니다.

    명령을 사용하여 컴퓨터의 도메인에 등록된 매핑을 나열합니다.

    setspn -L MACHINE_NAME

    명령을 사용하여 기존 매핑을 삭제합니다.

    setspn -D HTTP/HOST_NAME MACHINE_NAME

    setspn -D host/HOST_NAME MACHINE_NAME
  2. 호스트 사용자 계정을 만듭니다.

    참고

    호스트 사용자 이름이 MACHINE_NAME 과 다른지 확인합니다.

    섹션의 나머지 부분에서 호스트 사용자 이름을 USER_NAME 이라고 합니다.

  3. USER_NAME과 HOST_NAME 간의 매핑을 정의합니다.

    다음 명령을 실행하여 서비스 주체 매핑을 구성합니다.

    ktpass -princ HTTP/HOST_NAME@REALM -pass * [-kvno 0] -mapuser DOMAIN\USER_NAME -out jboss.keytab -ptype KRB5_NT_PRINCIPAL -crypto all

    메시지가 표시되면 사용자 이름의 암호를 입력합니다.

    다음 명령을 실행하여 매핑을 확인합니다. setspn -L USER_NAME.

    참고

    네가있는 경우 KrbException: 지정된 버전의 키를 사용할 수 없습니다. JRE의 오류, 키 버전을 0 으로 설정해야 할 수도 있습니다 : -kvno 0 . REALM 은 모두 대문자여야 하지만 HOST_NAME 은 모두 소문자여야 합니다. 또한 HOST_NAME 은 FQDN이어야 하며 확인 가능한 A 또는 AAAA 레코드여야 하며 CNAME 레코드가 아닙니다.

    crypto를 사용하는 것은 Windows Server 2008 이상에서만 작동합니다. Windows Server 2003의 경우 정확한 설정을 지정해야 합니다.

  4. 보안 도메인 내에서 주체를 정의합니다.

    주체는 elytron 또는 legacy 보안 하위 시스템에서 HTTP/HOST_NAME@REALM 으로 정의하거나 업데이트할 수 있습니다.

    중요

    예를 들어 옵션 또는 암호 변경과 같이 사용자를 수정한 경우 keytab 을 다시 생성해야 합니다.

3장. 추가 기능

3.1. FORM 로그인을 폴백으로 추가

또한 JBoss EAP와 여기에 배포된 애플리케이션은 대체로 사용할 FORM 로그인 인증 메커니즘을 구성할 수 있습니다. 이를 통해 Kerberos/SPNEGO 토큰이 없는 경우 애플리케이션에서 인증을 위한 로그인 페이지를 제공할 수 있습니다. 이 인증은 Kerberos 인증과 독립적으로 수행됩니다. 결과적으로 FORM 로그인 대체 구성 방법에 따라 사용자가 이 방법으로 인증하기 위해 별도의 인증 정보가 필요할 수 있습니다.

참고

FORM 로그인으로의 대체는 SPNEGO 또는 NTLM 토큰이 없거나 SPNEGO 토큰이 있는 경우 또는 다른 KDC에서 사용할 수 있는 경우에 사용할 수 있습니다.

3.1.1. 애플리케이션 업데이트

다음 단계는 FORM 로그인을 위한 애플리케이션을 대체로 구성하는 데 필요합니다.

  1. Kerberos 및 SPNEGO를 사용하도록 JBoss EAP 및 웹 애플리케이션 구성.

    인증 및 권한 부여를 위해 Kerberos 및 SPNEGO를 사용하도록 JBoss EAP와 웹 애플리케이션을 구성하는 데 필요한 단계는 JBoss EAP에 대한 SSO를 Kerberos로 설정하는 방법을 참조하십시오.

  2. 로그인 및 오류 페이지를 추가합니다.

    FORM 로그인을 사용하려면 로그인 및 오류 페이지가 필요합니다. 이러한 파일은 웹 애플리케이션에 추가되며 인증 프로세스에서 사용됩니다.

    예: login.jsp 파일

    <html>
      <head></head>
      <body>
        <form id="login_form" name="login_form" method="post" action="j_security_check" enctype="application/x-www-form-urlencoded">
          <center> <p>Please login to proceed.</p> </center>
          <div style="margin-left: 15px;">
            <p> <label for="username">Username</label> <br /> <input id="username" type="text" name="j_username"/> </p>
            <p> <label for="password">Password</label> <br /> <input id="password" type="password" name="j_password" value=""/> </p>
            <center> <input id="submit" type="submit" name="submit" value="Login"/> </center>
          </div>
        </form>
      </body>
    </html>

    예: error.jsp 파일

    <html>
      <head></head>
      <body>
        <p>Login failed, please go back and try again.</p>
      </body>
    </html>

  3. web.xml 을 수정합니다.

    로그인 및 오류 페이지를 웹 애플리케이션에 추가한 후 FORM 로그인을 위해 이러한 파일을 사용하도록 web.xml 을 업데이트해야 합니다. 정확한FORM<auth-method> 요소에 추가해야 합니다. <auth-method> 에는 쉼표로 구분된 목록과 순서가 중요하므로 <auth-method>정확한 값은 SPNEGO,FORM 으로 업데이트해야 합니다. 또한 <form-login-config> 요소를 <login-config>에 추가하고 < form- login-page> 및 <form- error-page> 요소로 지정된 로그인 및 오류 페이지의 경로를 추가해야 합니다.

    예제: 업데이트된 web.xml 파일

    <web-app>
      <display-name>App1</display-name>
      <description>App1</description>
      <!-- Define a security constraint that requires the Admin role to access resources -->
      <security-constraint>
        <display-name>Security Constraint on Conversation</display-name>
        <web-resource-collection>
          <web-resource-name>examplesWebApp</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Admin</role-name>
        </auth-constraint>
      </security-constraint>
      <!-- Define the Login Configuration for this Application -->
      <login-config>
        <auth-method>SPNEGO,FORM</auth-method>
        <realm-name>SPNEGO</realm-name>
        <form-login-config>
          <form-login-page>/login.jsp</form-login-page>
          <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
      </login-config>
      <!-- Security roles referenced by this web application -->
      <security-role>
        <description> role required to log in to the Application</description>
        <role-name>Admin</role-name>
      </security-role>
    </web-app>

3.1.2. Elytron 하위 시스템 업데이트

  1. http-authentication-factoryFORM 인증 메커니즘을 추가합니다.

    kerberos 기반 인증에 대해 구성한 기존 http-authentication-factoryFORM 인증을 위한 추가 메커니즘을 사용할 수 있습니다.

    /subsystem=elytron/http-authentication-factory=example-krb-http-auth:list-add(name=mechanism-configurations, value={mechanism-name=FORM})
  2. 대체 주체 추가.

    kerberos 기반 인증에 대한 기존 구성에 kerberos 토큰의 주체를 애플리케이션의 역할로 매핑하기 위해 이미 보안 영역이 구성되어 있어야 합니다. 해당 영역에 대한 대체 인증을 위해 추가 사용자를 추가할 수 있습니다. 예를 들어 filesystem-realm 을 사용한 경우 적절한 역할을 사용하여 새 사용자를 생성할 수 있습니다.

/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=fallbackUser1)

/subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=fallbackUser1, clear={password="password123"})

/subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=fallbackUser1, name=Roles, value=["Admin","Guest"])

3.1.3. 레거시 보안 하위 시스템 업데이트

JBoss EAP에서 레거시 보안 하위 시스템을 사용하는 경우 대체 인증을 위해 보안 도메인을 업데이트해야 합니다.

대체 로그인 메커니즘을 지원하도록 웹 애플리케이션 보안 도메인을 구성해야 합니다. 이 작업을 수행하려면 다음 단계가 필요합니다.

  1. 대체 인증 방법으로 사용할 새 보안 도메인을 추가합니다.
  2. 대체 도메인을 가리키는 웹 애플리케이션 보안 도메인에 usernamePasswordDomain 모듈 옵션을 추가합니다.

예제: 백백 보안 도메인으로 구성된 보안 도메인

/subsystem=security/security-domain=app-fallback:add(cache-type=default)

/subsystem=security/security-domain=app-fallback/authentication=classic:add()

/subsystem=security/security-domain=app-fallback/authentication=classic/login-module=UsersRoles:add(code=UsersRoles, flag=required, module-options=[usersProperties="file:${jboss.server.config.dir}/fallback-users.properties", rolesProperties="file:${jboss.server.config.dir}/fallback-roles.properties"])

/subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:add(code=SPNEGO, flag=required, module-options=[serverSecurityDomain=host])

/subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:map-put(name=module-options, key=usernamePasswordDomain, value=app-fallback)

/subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:map-put(name=module-options, key=password-stacking, value=useFirstPass)

reload

3.2. Kerberos로 관리 인터페이스 보안

JBoss EAP는 보안 도메인에 Kerberos 인증을 제공하는 것 외에도 Kerberos를 사용하여 관리 인터페이스를 보호하는 기능도 제공합니다.

3.2.1. Elytron을 사용하여 Kerberos로 관리 인터페이스 보안

HTTP 관리 인터페이스에 대한 Kerberos 인증을 구성하려면 다음을 수행합니다.

  1. 애플리케이션에 대한 Kerberos 인증을 구성하는 것과 동일한 지침에 따라 Kerberos 인증을 수행하는 http-authentication-factory 를 생성합니다.

    중요

    관리 인터페이스를 사용하여 Kerberos 인증을 구성할 때 JBoss EAP가 KDC에 대해 인증하도록 구성하는 서비스 주체에 세심한 주의를 기울여야 합니다. 이 서비스 주체는 service-name/hostname 형식을 사용합니다. JBoss EAP는 웹 기반 관리 콘솔 및 원격 에 대해 인증하는 경우(예: 관리 CLI의 remote /localhost) 서비스 이름이 될 때 HTTP 가 서비스 이름(예: HTTP/localhost )이 될 것으로 예상합니다.

  2. http-authentication-factory 를 사용하도록 관리 HTTP 인터페이스를 업데이트합니다.

    /core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=example-krb-http-auth)

관리 CLI에 대한 SASL 인증에 대한 Kerberos 인증을 구성하려면 다음을 수행합니다.

  1. 애플리케이션에 대한 Kerberos 인증을 구성하는 것과 동일한 지침에 따라 보안 도메인과 kerberos-security-factory 를 생성합니다.
  2. 구성 가능-sasl-server-factoryGSSAPI 를 추가합니다.

    /subsystem=elytron/configurable-sasl-server-factory=configured:list-add(name=filters, value={pattern-filter=GSSAPI})
  3. 보안 도메인 및 kerberos -security-factory를 사용하는 asasl-authentication -factory 를 생성합니다.

    예: sasl-authentication-factory

    /subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured, security-domain=exampleFsSD, mechanism-configurations=[{mechanism-name=GSSAPI, mechanism-realm-configurations=[{realm-name=exampleFsSD}], credential-security-factory=krbSF}])

  4. the sasl-authentication-factory 를 사용하도록 관리 SASL 인터페이스를 업데이트합니다.

    예제: Update sasl-authentication-factory

    /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=example-sasl-auth)
    
    reload

3.2.2. 레거시 코어 관리 인증을 사용하여 Kerberos로 관리 인터페이스 보안

레거시 코어 관리 인증을 사용하여 관리 인터페이스에서 Kerberos 인증을 활성화하려면 다음 단계를 수행해야 합니다.

참고

표시된 관리 CLI 명령은 JBoss EAP 독립 실행형 서버를 실행 중이라고 가정합니다. JBoss EAP 관리형 도메인의 관리 CLI 사용에 대한 자세한 내용은 JBoss EAP 관리 CLI 가이드를 참조하십시오.

  1. 관련 시스템 속성을 활성화합니다.

    이전 섹션에서 설명한 대로 Kerberos 서버 연결을 위해 필요한 모든 JBoss EAP 시스템 속성을 활성화합니다.

  2. Kerberos 서버 ID를 보안 영역에 추가합니다.

    보안 영역에서 Kerberos 인증을 사용하려면 Kerberos 서버에 대한 연결을 추가해야 합니다. 다음 예제에서는 Kerberos 서버 ID를 기존 Management Realm에 추가하는 방법을 보여줍니다. service-name,hostname, MY-REALM 을 적절한 값으로 교체해야 합니다.

    보안 영역에 서버 ID를 추가하기 위한 CLI의 예

    /core-service=management/security-realm=ManagementRealm/server-identity=kerberos:add()
    
    /core-service=management/security-realm=ManagementRealm/server-identity=kerberos/keytab=service-name\/hostname@MY-REALM:add(path=/home\/username\/service.keytab, debug=true)
    
    reload

    중요

    관리 인터페이스를 사용하여 Kerberos 인증을 구성할 때 JBoss EAP가 KDC에 대해 인증하도록 구성하는 서비스 주체에 세심한 주의를 기울여야 합니다. 이 서비스 주체는 service-name/hostname 형식을 사용합니다. JBoss EAP는 웹 기반 관리 콘솔 및 원격 에 대해 인증하는 경우(예: 관리 CLI의 remote /localhost) 서비스 이름이 될 때 HTTP 가 서비스 이름(예: HTTP/localhost )이 될 것으로 예상합니다.

  3. 보안 영역에서 인증 방법을 업데이트합니다.

    Kerberos 서버 ID를 올바르게 구성한 후 이를 사용하려면 보안 영역의 인증 방법을 업데이트해야 합니다.

    예제: 보안 영역에 Kerberos 인증 추가

    /core-service=management/security-realm=ManagementRealm/authentication=kerberos:add()
    
    reload

    중요

    보안 영역에 정의된 인증 메커니즘이 있는 순서에 따라 JBoss EAP는 관리 인터페이스에 액세스할 때 해당 순서대로 사용자를 인증하려고 합니다.

  4. Kerberos를 사용하여 두 인터페이스의 보안을 모두 유지합니다.

    Kerberos를 사용하여 웹 기반 관리 콘솔과 관리 CLI를 모두 보호하려면 각각에 대해 구성된 Kerberos 서버 ID가 필요합니다. 추가 ID를 추가하려면 다음 명령을 사용합니다.

    /core-service=management/security-realm=ManagementRealm/server-identity=kerberos/keytab=remote\/hostname@MY-REALM:add(path=/home\/username\/remote.keytab, debug=true)
    
    reload

3.2.3. 관리 인터페이스에 연결

관리 인터페이스에 연결하기 전에 유효한 Kerberos 티켓이 있어야 합니다. 보안 영역이 Kerberos를 통해 사용자를 인증하지 못하면 레거시 보안 솔루션을 사용할 때 <authentication> 요소에 지정된 후속 방법을 사용하여 사용자를 인증하려고 합니다. elytron 하위 시스템은 레거시 보안 솔루션과 유사하게 작동합니다. Kerberos 인증 메커니즘이 실패하면 인증은 관리 인터페이스를 보호하는 인증 팩토리에 정의된 다른 메커니즘으로 대체됩니다. 일반적으로 DIGEST 또는 BASIC은 대체로 사용됩니다.

브라우저를 사용하여 웹 기반 관리 콘솔에 연결하면 보안 영역이 해당 티켓을 기반으로 사용자를 인증하려고 시도합니다.

관리 CLI에 연결할 때 -Djavax.security.auth.useSubjectCredsOnly=false 매개변수를 사용해야 합니다. 이렇게 하면 GSSAPI 구현에서 운영 체제 수준에서 관리되는 ID를 사용할 수 있습니다. 환경을 설정하는 방법에 따라 다음 매개변수를 사용해야 할 수도 있습니다.

-Djava.security.krb5.realm=REALM_NAME
영역 이름을 지정합니다.
-Djava.security.krb5.kdc=KDC_HOSTNAME
KDC의 위치를 지정합니다.
--no-local-auth
는 로컬 인증을 비활성화합니다. 이 기능은 스크립트를 실행 중인 동일한 시스템에서 실행 중인 JBoss EAP 인스턴스에 연결을 시도하는 경우 유용합니다.

명령 예

$ EAP_HOME/bin/jboss-cli.sh -c -Djavax.security.auth.useSubjectCredsOnly=false --no-local-auth

주의

클라이언트와 서버 간에 HTTP 프록시를 사용하는 경우 인증된 여러 클라이언트 간에 인증된 연결을 동일한 서버에 공유하지 않도록 주의해야 합니다. 이 작업을 수행하지 않으면 서버에서 보안 컨텍스트 연결 추적을 쉽게 손실할 수 있습니다. 서버 인증 무결성에 클라이언트를 올바르게 수행하는 프록시는 Proxy 지원을 제공합니다. session-Authentication HTTP 헤더를 프록시의 HTTP 응답에 있는 클라이언트에 보냅니다. 프록시 서버에서 401 Unauthorized 응답을 사용하여 이 헤더를 제공하지 않는 한 클라이언트는 프록시를 통해 SPNEGO HTTP 인증 메커니즘을 활용하지 않아야 합니다.

3.3. 리모팅을 위한 Kerberos 인증 통합

관리 인터페이스 및 웹 애플리케이션의 보안을 위해 Kerberos를 사용하는 것 외에도 remoting을 통해 액세스하는 서비스에 대해 Kerberos 인증을 구성할 수도 있습니다(예: Jakarta Enterprise Beans).

Kerberos의 시스템 속성도 구성해야 합니다. 자세한 내용은 Configure the Elytron Subsystem 에서 참조하십시오.

3.3.1. 레거시 보안 Realms를 사용한 Kerberos 인증 통합

Kerberos 인증을 구성하려면 다음을 수행해야 합니다.

  1. 원격 및 RealmDirect를 사용하여 보안 도메인 구성

    원격 를 통해 액세스하는 서비스에서 사용할 보안 도메인을 구성해야 합니다. 이 보안 도메인은 Remoting 로그인 모듈과 RealmDirect 로그인 모듈(예: RealmDirect 또는 RealmUsersRoles )을 모두 사용해야 합니다. 기본적으로 기본적으로 제공된 other 보안 도메인과 매우 유사해야 합니다. 각 로그인 모듈의 특정 구성 옵션에 대한 자세한 내용은 JBoss EAP 로그인 모듈 참조를 참조하십시오.

    예제: Remoting 및 RealmDirect 로그인 모듈이 있는 보안 도메인

    /subsystem=security/security-domain=krb-remoting-domain:add()
    
    /subsystem=security/security-domain=krb-remoting-domain/authentication=classic:add()
    
    /subsystem=security/security-domain=krb-remoting-domain/authentication=classic/login-module=Remoting:add(code=Remoting, flag=optional, module-options=[password-stacking=useFirstPass])
    
    /subsystem=security/security-domain=krb-remoting-domain/authentication=classic/login-module=RealmDirect:add(code=RealmDirect, flag=required, module-options=[password-stacking=useFirstPass, realm=krbRealm])
    
    /subsystem=security/security-domain=krb-remoting-domain/mapping=classic:add()
    
    /subsystem=security/security-domain=krb-remoting-domain/mapping=classic/mapping-module=SimpleRoles:add(code=SimpleRoles, type=role, module-options=["testUser"="testRole"])
    
    reload

  2. Kerberos 인증을 위한 보안 영역 구성.

    Kerberos 인증을 사용하여 보안 영역 설정은 Kerberos로 관리 인터페이스 보안 섹션에서 설명합니다.

    예제: 보안 영역

    /core-service=management/security-realm=krbRealm:add()
    
    /core-service=management/security-realm=krbRealm/server-identity=kerberos:add()
    
    /core-service=management/security-realm=krbRealm/server-identity=kerberos/keytab=remote\/localhost@JBOSS.ORG:add(path=\/path\/to\/remote.keytab, debug=true)
    
    /core-service=management/security-realm=krbRealm/authentication=kerberos:add(remove-realm=true)
    
    reload

  3. 원격 하위 시스템에서 HTTP 커넥터를 구성합니다.

    또한 원격 시스템에서 새로 만든 보안 영역을 사용하도록 HTTP 커넥터를 구성해야 합니다.

    예제: 하위 시스템 리모팅

    /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=security-realm, value=krbRealm)

  4. 서비스의 보안을 구성합니다.

    또한 원격 인터페이스를 사용하여 액세스한 서비스를 보호하도록 설정해야 합니다. 서비스에 따라 달라집니다. 예를 들어 Jakarta Enterprise Bean에서는 @SecurityDomain 및 @ RolesAllowed 주석을 사용할 수 있습니다.

3.3.2. Elytron을 사용한 Kerberos 인증 통합

인증 원격화를 위해 Kerberos 또는 GSSAPI SASL 인증에 대한 Elytron 보안 도메인을 정의할 수 있습니다.

  1. ID를 로드할 보안 영역을 정의합니다. 역할을 할당하는 데 사용됩니다.

    /path=kerberos:add(relative-to=user.home, path=src/kerberos)
    
    /subsystem=elytron/properties-realm=kerberos-properties:add(users-properties={path=kerberos-users.properties, relative-to=kerberos, digest-realm-name=ELYTRON.ORG}, groups-properties={path=kerberos-groups.properties, relative-to=kerberos})
  2. 서버 ID에 대한 Kerberos 보안 팩토리를 정의합니다.

    /subsystem=elytron/kerberos-security-factory=test-server:add(relative-to=kerberos, path=remote-test-server.keytab, principal=remote/test-server.elytron.org@ELYTRON.ORG)
  3. 보안 도메인을 정의하고 SASL 인증 팩토리를 함께 정의합니다.

    /subsystem=elytron/security-domain=KerberosDomain:add(default-realm=kerberos-properties, realms=[{realm=kerberos-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper)
    
    /subsystem=elytron/sasl-authentication-factory=gssapi-authentication-factory:add(security-domain=KerberosDomain, sasl-server-factory=elytron, mechanism-configurations=[{mechanism-name=GSSAPI, credential-security-factory=test-server}])
  4. 원격 하위 시스템에서 created sasl-authentication-factory 를 사용하여 원격 작업을 활성화합니다.

    CLI 명령 예

    /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory, value=gssapi-authentication-factory)

  5. 서비스의 보안을 구성합니다.

    Jakarta Enterprise Beans에서 보안 도메인을 참조하는 경우 Elytron 보안 도메인에 매핑되는 application-security-domain 을 지정해야 합니다. 예를 들어 Jakarta Enterprise Beans에서는 @SecurityDomain 주석을 사용할 수 있습니다.

    CLI 명령 예

    /subsystem=ejb3/application-security-domain=KerberosDomain:add(security-domain=KerberosDomain)

Identity 연관에 Jakarta Authentication Subject를 사용하는 것은 더 이상 지원되지 않습니다. Jakarta Enterprise Beans 호출에 대한 Kerberos ID를 프로그래밍 방식으로 관리하려는 클라이언트는 다음과 같이 AuthenticationConfiguration API를 직접 마이그레이션하고 사용해야 합니다.

// create your authentication configuration
AuthenticationConfiguration configuration = AuthenticationConfiguration.empty()
    .useProvidersFromClassLoader(SecuredGSSCredentialClient.class.getClassLoader())
    .useGSSCredential(getGSSCredential());

// create your authentication context
AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL, configuration);

// create a callable that looks up an Jakarta Enterprise Bean and invokes a method on it
Callable<Void> callable = () -> {
...
};

// use your authentication context to run your callable
context.runCallable(callable);

useGSSCredential(getGSSCredential()) 에 대한 호출은 AuthenticationConfiguration 을 생성할 때 발생합니다. 자카르타 인증 주체에 이미 액세스할 수 있는 클라이언트 코드는 다음과 같이 쉽게 변환하여 다음과 같이 변환할 있습니다.

private GSSCredential getGSSCredential() {
    return Subject.doAs(subject, new PrivilegedAction<GSSCredential>() {

        public GSSCredential run() {
            try {
                GSSManager gssManager = GSSManager.getInstance();
                return gssManager.createCredential(GSSCredential.INITIATE_ONLY);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    });
}





2024-02-09에 최종 업데이트된 문서

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.