3.2. mod_auth_mellon Apache HTTPD 모듈
mod_auth_mellon 모듈은 SAML용 Apache HTTPD 플러그인입니다. 언어/환경에서 Apache HTTPD 사용을 프록시로 지원하는 경우 mod_auth_mellon을 사용하여 SAML으로 웹 애플리케이션을 보호할 수 있습니다. 이 모듈에 대한 자세한 내용은 mod_auth_mellon GitHub 리포지터리를 참조하십시오.
mod_auth_mellon을 구성하려면 다음이 필요합니다.
- Red Hat Single Sign-On 또는 다른 SAML IdP에 대한 연결을 설명하는 IdM(Identity Provider) 엔티티 설명자 XML 파일
- 보안 중인 애플리케이션에 대한 SAML 연결 및 구성을 설명하는 SP 엔티티 설명자 XML 파일입니다.
- 애플리케이션이 문서에 서명하는 데 사용하는 개인 키를 정의하는 PEM 형식의 텍스트 파일인 개인 키 PEM 파일입니다.
- 애플리케이션의 인증서를 정의하는 텍스트 파일인 인증서 PEM 파일입니다.
- mod_auth_mellon 특정 Apache HTTPD 모듈 구성.
3.2.1. Red Hat Single Sign-On을 사용하여 mod_auth_mellon 구성 링크 복사링크가 클립보드에 복사되었습니다!
두 개의 호스트가 관련되어 있습니다.
- Red Hat Single Sign-On이 실행 중인 호스트는 Red Hat Single Sign-On이 SAML ID 공급자(IdP)이기 때문에 $idp_host라고 합니다.
- 웹 애플리케이션이 실행 중인 호스트는 $sp_host라고 합니다. SAML에서 IdP를 사용하는 애플리케이션을 서비스 공급자(SP)라고 합니다.
다음 단계는 모두 root 권한이 있는 $sp_host에서 수행해야 합니다.
3.2.1.1. 패키지 설치 링크 복사링크가 클립보드에 복사되었습니다!
필요한 패키지를 설치하려면 다음이 필요합니다.
- Apache Web Server (httpd)
- Apache용 Mellon SAML SP 애드온 모듈
- X509 인증서를 생성하는 툴
필요한 패키지를 설치하려면 다음 명령을 실행합니다.
yum install httpd mod_auth_mellon mod_ssl openssl
3.2.1.2. Apache SAML용 구성 디렉터리 생성 링크 복사링크가 클립보드에 복사되었습니다!
Apache의 SAML 사용과 관련된 구성 파일을 한 위치에 유지하는 것이 좋습니다.
Apache 구성 루트 /etc/httpd에 있는 saml2라는 새 디렉터리를 만듭니다.
mkdir /etc/httpd/saml2
3.2.1.3. Mellon 서비스 공급자 구성 링크 복사링크가 클립보드에 복사되었습니다!
Apache 애드온 모듈의 구성 파일은 /etc/httpd/conf.d 디렉터리에 있으며 파일 이름 확장자는 .conf입니다. /etc/httpd/conf.d/mellon.conf 파일을 만들고 여기에 Mellon의 설정 지시문을 배치해야 합니다.
Mellon의 설정 지시문은 대략 두 가지 정보 클래스로 나눌 수 있습니다.
- SAML 인증으로 보호할 URL
- 보호된 URL이 참조될 때 사용되는 SAML 매개변수는 무엇입니까.
Apache 구성 지시문은 일반적으로 위치라고 하는 URL 공간의 계층적 트리 구조를 따릅니다. 보호하려면 Mellon에 대해 하나 이상의 URL 위치를 지정해야 합니다. 각 위치에 적용되는 구성 매개 변수를 추가하는 방법에 유연성이 있습니다. 필요한 모든 매개 변수를 location 블록에 추가하거나 URL 위치 계층 구조(또는 두 위치의 일부 조합)에서 높은 공통 위치에 Mellon 매개변수를 추가할 수 있습니다. SP가 어떤 위치에 SAML 작업을 트리거하는지와 관계없이 동일한 방식으로 작동하는 것이 일반적이므로 여기에 사용되는 예제 구성은 계층 구조의 루트에 공통 Mellon 구성 지시문을 배치하고 Mellon에 의해 보호될 특정 위치를 최소 지시문으로 정의할 수 있습니다. 이 전략은 보호되는 각 위치에 대해 동일한 매개변수를 중복하지 않도록 합니다.
이 예제에는 하나의 보호 위치(https://$sp_host/private)만 있습니다.
Mellon 서비스 공급자를 구성하려면 다음 절차를 수행합니다.
절차
- 다음 내용으로 /etc/httpd/conf.d/mellon.conf 파일을 만듭니다.
<Location / >
MellonEnable info
MellonEndpointPath /mellon/
MellonSPMetadataFile /etc/httpd/saml2/mellon_metadata.xml
MellonSPPrivateKeyFile /etc/httpd/saml2/mellon.key
MellonSPCertFile /etc/httpd/saml2/mellon.crt
MellonIdPMetadataFile /etc/httpd/saml2/idp_metadata.xml
</Location>
<Location /private >
AuthType Mellon
MellonEnable auth
Require valid-user
</Location>
위 코드에서 참조하는 일부 파일은 이후 단계에서 생성됩니다.
3.2.2. mod_auth_mellon에서 사용하는 쿠키의 SameSite 값 설정 링크 복사링크가 클립보드에 복사되었습니다!
브라우저는 Lax 에 대한 쿠키의 SameSite 특성에 대한 기본값을 설정할 계획입니다. 이 설정은 요청이 동일한 도메인에서 시작된 경우에만 쿠키가 애플리케이션에 전송됨을 의미합니다. 이 동작은 SAML POST 바인딩에 영향을 줄 수 있으며 작동하지 않을 수 있습니다. mod_auth_mellon 모듈의 전체 기능을 유지하려면 mod_auth_mellon 에서 생성한 쿠키의 SameSite 값을 None 으로 설정하는 것이 좋습니다. 그러지 않으면 Red Hat Single Sign-On을 사용하여 로그인할 수 없게 될 수 있습니다.
SameSite 값을 None 으로 설정하려면 다음 구성을 mellon.conf 파일 내의 < Location / > tag에 추가합니다.
MellonSecureCookie On
MellonCookieSameSite none
이 구성에 대한 지원은 버전 0.16.0의 mod_auth_mellon 모듈에서 사용할 수 있습니다.
3.2.2.1. 서비스 공급자 메타데이터 생성 링크 복사링크가 클립보드에 복사되었습니다!
SAML IdP 및 SP에서 SAML 메타데이터는 XML 형식으로 되어 있습니다. 메타데이터의 스키마는 표준이므로 참여 SAML 엔티티는 서로의 메타데이터를 사용할 수 있습니다. 다음이 필요합니다.
- SP가 사용하는 IdP의 메타데이터
- IdP에 제공된 SP에 대한 메타데이터
SAML 메타데이터의 구성 요소 중 하나는 X509 인증서입니다. 이러한 인증서는 다음 두 가지 용도로 사용됩니다.
- 수신 엔드가 예상 당사자로부터 시작된 메시지를 입증할 수 있도록 SAML 메시지에 서명합니다.
- 전송 중에 메시지 암호화 (일반적으로 TLS 보호 전송에서 SAML 메시지가 발생하기 때문에 거의 사용되지 않음)
이미 CA(인증 기관)가 있거나 자체 서명된 인증서를 생성할 수 있는 경우 자체 인증서를 사용할 수 있습니다. 이 예에서는 단순화를 위해 자체 서명된 인증서가 사용됩니다.
Mellon의 SP 메타데이터는 mod_auth_mellon 버전의 기능을 반영해야 하며, 유효한 SP 메타데이터 XML이어야 하며 X509 인증서(X509 인증서 생성에 익숙해지지 않는 경우)를 포함해야 하며, SP 메타데이터를 생성하는 가장 빠른 방법은 mod_auth_mellon 패키지에 포함된 도구를 사용하는 것입니다. 생성된 메타데이터는 텍스트 파일이므로 항상 나중에 편집할 수 있습니다. 또한 X509 키와 인증서를 생성합니다.
SAML IdP 및 SP는 EntityID로 알려진 고유한 이름을 사용하여 자신을 식별합니다. Mellon 메타데이터 생성 툴을 사용하려면 다음이 필요합니다.
- 일반적으로 SP의 URL이며 종종 SP 메타데이터를 검색할 수 있는 SP의 URL입니다.
- SP에 대한 SAML 메시지가 사용되는 URL로, Mellon이 MellonEndanchorPath를 호출합니다.
SP 메타데이터를 생성하려면 다음 절차를 수행합니다.
절차
몇 가지 도우미 쉘 변수를 생성합니다.
fqdn=`hostname` mellon_endpoint_url="https://${fqdn}/mellon" mellon_entity_id="${mellon_endpoint_url}/metadata" file_prefix="$(echo "$mellon_entity_id" | sed 's/[^A-Za-z.]/_/g' | sed 's/__*/_/g')"다음 명령을 실행하여 Mellon 메타데이터 생성 툴을 호출합니다.
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url생성된 파일을 해당 대상으로 이동합니다(위에 생성된 /etc/httpd/conf.d/mellon.conf 파일에서 참조됨).
mv ${file_prefix}.cert /etc/httpd/saml2/mellon.crt mv ${file_prefix}.key /etc/httpd/saml2/mellon.key mv ${file_prefix}.xml /etc/httpd/saml2/mellon_metadata.xml
3.2.2.2. Red Hat Single Sign-On ID 공급자에 Mellon 서비스 공급자 추가 링크 복사링크가 클립보드에 복사되었습니다!
가정: Red Hat Single Sign-On IdP가 $idp_host에 이미 설치되어 있습니다.
Red Hat Single Sign-On은 모든 사용자, 클라이언트 등을 영역으로 그룹화하는 여러 테넌시를 지원합니다. 각 영역은 다른 영역과 독립적입니다. Red Hat Single Sign-On에서 기존 영역을 사용할 수 있지만 이 예제에서는 test_realm이라는 새 영역을 생성하고 해당 영역을 사용하는 방법을 보여줍니다.
이러한 모든 작업은 Red Hat Single Sign-On 관리 콘솔을 사용하여 수행됩니다. 다음 절차를 수행하려면 $idp_host의 admin 사용자 이름과 암호가 있어야 합니다.
절차
관리 콘솔을 열고 admin 사용자 이름과 암호를 입력하여 로그인합니다.
관리 콘솔에 로그인하면 기존 영역이 있습니다. Red Hat Single Sign-On이 먼저 루트 영역을 설정할 때 마스터가 기본적으로 생성됩니다. 이전에 생성된 모든 영역은 관리 콘솔의 왼쪽 상단에 드롭다운 목록에 나열됩니다.
- 영역 드롭다운 목록에서 영역 추가 를 선택합니다.
-
Name 필드에
test_realm을 입력하고 Create 를 클릭합니다.
3.2.2.2.1. Mellon 서비스 공급자 추가 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On SAML SP는 클라이언트라고 합니다. SP를 추가하려면 영역의 클라이언트 섹션에 있어야 합니다.
- 왼쪽의 Clients 메뉴 항목을 클릭하고 오른쪽 상단에 있는 만들기를 클릭하여 새 클라이언트를 생성합니다.
3.2.2.2.2. Mellon SP 클라이언트 추가 링크 복사링크가 클립보드에 복사되었습니다!
Mellon SP 클라이언트를 추가하려면 다음 절차를 수행합니다.
절차
- 클라이언트 프로토콜을 SAML으로 설정합니다.
- Client Protocol 드롭다운 목록에서 saml 를 선택합니다.
위에서 만든 Mellon SP 메타데이터 파일을 제공합니다(/etc/httpd/saml2/mellon_metadata.xml).
브라우저가 실행 중인 위치에 따라 브라우저가 파일을 찾을 수 있도록 $sp_host에서 실행 중인 시스템으로 SP 메타데이터를 복사해야 할 수 있습니다.
- 저장을 클릭합니다.
3.2.2.2.3. Mellon SP 클라이언트 편집 링크 복사링크가 클립보드에 복사되었습니다!
중요한 클라이언트 구성 매개변수를 설정하려면 다음 절차를 사용하십시오.
절차
- "Force POST Binding"이 On인지 확인합니다.
- Valid Redirect URI 목록에 paosResponse를 추가합니다.
- "Valid Redirect URI"에 postResponse URL을 복사하여 "+" 아래에 있는 빈 추가 텍스트 필드에 붙여넣습니다.
- "postResponse"를 "paosResponse"로 변경합니다. ( SAML ECP에는 paosResponse URL이 필요합니다.)
- 하단에서 저장 을 클릭합니다.
많은 SAML SP는 그룹의 사용자 멤버십에 따라 권한 부여를 결정합니다. Red Hat Single Sign-On IdP는 사용자 그룹 정보를 관리할 수 있지만 IdP가 SAML 속성으로 제공하도록 구성되지 않은 경우 사용자 그룹을 제공하지 않습니다.
다음 절차에 따라 사용자 그룹을 SAML 속성으로 제공하도록 IdP를 구성합니다.
절차
- 클라이언트의 Mappers 탭을 클릭합니다.
- Mappers 페이지의 오른쪽 상단에서 Create 를 클릭합니다.
- Mapper Type 드롭다운 목록에서 그룹 목록을 선택합니다.
- Name을 "group list"로 설정합니다.
- SAML 특성 이름을 "groups"로 설정합니다.
- 저장을 클릭합니다.
나머지 단계는 $sp_host에서 수행됩니다.
3.2.2.2.4. ID 공급자 메타데이터 검색 링크 복사링크가 클립보드에 복사되었습니다!
이제 IdP의 영역을 생성했으므로 이와 관련된 IdP 메타데이터를 검색해야 하므로 Mellon SP가 이를 인식합니다. 이전에 생성된 /etc/httpd/conf.d/mellon.conf 파일에서 MellonIdPMetadataFile은 /etc/httpd/saml2/idp_metadata.xml로 지정되지만 지금까지 해당 파일이 $sp_host에 존재하지 않습니다.
이 절차를 사용하여 IdP에서 해당 파일을 검색합니다.
절차
$idp_host에 올바른 값을 대체하여 이 명령을 사용하십시오.
curl -k -o /etc/httpd/saml2/idp_metadata.xml \ https://$idp_host/auth/realms/test_realm/protocol/saml/descriptorMellon이 이제 완전히 구성되어 있습니다.
Apache 구성 파일에 대한 구문 검사를 실행하려면 다음 명령을 사용합니다.
apachectl configtest참고configtest는 apachectl에 대한 -t 인수와 동일합니다. 구성 테스트에 오류가 표시되면 계속하기 전에 수정합니다.
Apache 서버를 다시 시작하십시오.
systemctl restart httpd.service
이제 $idp_host IdP에 대해 인증하여 SAML SP에서 Red Hat Single Sign-On을 SAML IdP 및 mod_auth_mellon으로 설정했습니다.