이 문서는 Amazon Linux 2023 EC2 인스턴스에 Kerberos KDC(Key Distribution Center) 및 SPNEGO/Kerberos 인증 웹 애플리케이션을 설정하는 방법과 Kerberos 인증 지원을 통해 모니터를 실행하도록 신세틱스 작업 관리자 (SJM)를 구성하는 방법을 설명합니다.
플레이스홀더 값 시작하기 전에 환경에 대한 다음 값을 확인하십시오. 이 문서에 나타나는 모든 플레이스홀더를 고유한 값으로 교체하십시오.
플레이스홀더
설명
예시
<REALM_NAME>
Kerberos 영역(대문자여야 함)
KERBTEST.LOCAL
<EC2_PRIVATE_IP>
EC2 인스턴스의 프라이빗 IPv4 주소
10.8.9.172
<EC2_INTERNAL_HOSTNAME>
웹 앱의 정규화된 도메인 이름(FQDN)
ip-X-X-X-X.ec2.internal
<CLIENT_PRINCIPAL>
신세틱스 워커에 할당된 Kerberos ID
synthetics-test
<CLIENT_KEYTAB_PATH>
클라이언트 키탭이 저장된 호스트의 전체 경로
/home/ec2-user/kerb-test/synthetics-test.keytab
<PRIVATE_LOCATION_KEY>
뉴렐릭 프라이빗 로케이션 키
NRSP-us...
1부: 호스트 환경 설정 1단계: Kerberos 패키지 설치 호스트 EC2 인스턴스에 Kerberos KDC 서버 및 관리 도구를 설치하십시오:
$ sudo dnf install -y krb5-server krb5-workstation
2단계: 시스템 Kerberos 구성(/etc/krb5.conf) realm requests를 KDC로 전달하도록 /etc/krb5.conf을(를) 구성하십시오:
$ sudo tee /etc/krb5.conf > /dev/null << 'EOF'
$ default_realm = <REALM_NAME>
$ dns_lookup_realm = false
$ admin_server = <EC2_PRIVATE_IP>
$ <EC2_INTERNAL_HOSTNAME> = <REALM_NAME>
3단계: KDC 데몬 구성(kdc.conf) KDC 서비스의 포트 및 암호화 규칙을 정의하십시오:
$ sudo tee /var/kerberos/krb5kdc/kdc.conf > /dev/null << 'EOF'
$ acl_file = /var/kerberos/krb5kdc/kadm5.acl
$ dict_file = /usr/share/dict/words
$ admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
$ supported_enctypes = aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal
4단계: 마스터 데이터베이스 및 KDC 데몬 초기화 데이터베이스를 생성하고 KDC 백그라운드 서비스를 시작하십시오:
$ sudo kdb5_util create -r < REALM_NAME > -s
$ echo "*/admin@<REALM_NAME> *" | sudo tee /var/kerberos/krb5kdc/kadm5.acl
$ sudo systemctl enable --now krb5kdc kadmin
5단계: 클라이언트 및 서버 키탭 생성 클라이언트(신세틱스 워커)와 타겟 웹 서버 서비스 주체 이름(SPN) 모두에 대한 비대화형 자격 증명을 포함하는 키탭 파일을 생성하십시오:
$ mkdir -p /home/ec2-user/kerb-test
$ sudo kadmin.local -q "addprinc -randkey <CLIENT_PRINCIPAL>@<REALM_NAME>"
$ sudo kadmin.local -q "ktadd -k <CLIENT_KEYTAB_PATH> <CLIENT_PRINCIPAL>@<REALM_NAME>"
$ sudo chmod 644 < CLIENT_KEYTAB_PATH >
$ sudo kadmin.local -q "addprinc -randkey HTTP/<EC2_INTERNAL_HOSTNAME>@<REALM_NAME>"
$ sudo kadmin.local -q "ktadd -k /home/ec2-user/kerb-test/http.keytab HTTP/<EC2_INTERNAL_HOSTNAME>@<REALM_NAME>"
$ sudo chmod 644 /home/ec2-user/kerb-test/http.keytab
(선택 사항) 6단계: 테스트 웹 컨테이너 배포 팁 설정을 검증하기 위해 동일한 호스트에서 테스트 웹 서버를 실행하려는 경우에만 이 단계가 필요합니다. SJM을 구성하는 데는 필요하지 않습니다.
mod_auth_gssapi(으)로 구성된 아파치 컨테이너를 배포하십시오:
$ mkdir -p ~/kerb-test/httpd-image && cd ~/kerb-test/httpd-image
$ cat > kerb-test.conf << 'EOF'
$ AuthName "Kerberos Login"
$ GssapiCredStore keytab:/etc/krb5-http.keytab
$ cat > Dockerfile << 'EOF'
$ FROM debian:bookworm-slim
> apt-get install -y --no-install-recommends apache2 libapache2-mod-auth-gssapi krb5-user && \
> a2enmod auth_gssapi && \
> mkdir -p /var/www/html/kerb-test && \
> echo '<h1>Kerberos SSO worked</h1>' > /var/www/html/kerb-test/index.html && \
> rm -rf /var/lib/apt/lists/*
$ COPY kerb-test.conf /etc/apache2/conf-enabled/kerb-test.conf
$ CMD ["apache2ctl", "-D", "FOREGROUND"]
$ docker build -t kerb-test-httpd .
$ docker run -d --name kerb-test-httpd \
> -v /etc/krb5.conf:/etc/krb5.conf:ro \
> -v /home/ec2-user/kerb-test/http.keytab:/etc/krb5-http.keytab:ro \
7단계: 로컬 DNS 및 Kerberos 핸드셰이크 확인 내부 도메인이 호스트에서 로컬로 해석되는지 확인하고, Kerberos 인증이 성공적으로 완료되는지 확인하십시오:
$ echo "<EC2_PRIVATE_IP> <EC2_INTERNAL_HOSTNAME>" | sudo tee -a /etc/hosts
$ curl -i http:// < EC2_INTERNAL_HOSTNAME > :8080/kerb-test/
$ kinit -kt < CLIENT_KEYTAB_PATH > < CLIENT_PRINCIPAL > @ < REALM_NAME >
$ curl --negotiate -u : -i http:// < EC2_INTERNAL_HOSTNAME > :8080/kerb-test/
테스트에 성공하면 HTTP/1.1 200 OK (으)로 응답하고 보호된 웹 페이지 콘텐츠를 표시합니다.
파트 2: Kerberos용 신세틱스 작업 관리자 구성 신세틱스 브라우저 러너 컨테이너가 자동으로 KDC를 확인하고, Kerberos 지원 티켓을 획득하며, 보호된 엔드포인트에 대해 인증할 수 있도록 하려면 표준 SJM docker run 명령에 다음 Kerberos 환경 변수 및 볼륨 마운트를 추가하십시오.
표준 명령(Kerberos 제외) $ docker run -e PRIVATE_LOCATION_KEY = < PRIVATE_LOCATION_KEY > \
> -d --restart unless-stopped \
> -v /var/run/docker.sock:/var/run/docker.sock:rw \
> newrelic/synthetics-job-manager
필수 명령(Kerberos 지원 활성화됨) docker run 명령에 다음 환경 변수(-e) 및 키탭 볼륨 마운트(-v)를 추가하십시오:
> --restart unless-stopped \
> -e PRIVATE_LOCATION_KEY = < PRIVATE_LOCATION_KEY > \
> -e KERBEROS_REALM = < REALM_NAME > \
> -e KERBEROS_KDC = < EC2_PRIVATE_IP > \
> -e KERBEROS_HOST_ALLOWLIST = < EC2_INTERNAL_HOSTNAME > \
> -e KERBEROS_KEYTAB_HOST_PATH = < CLIENT_KEYTAB_PATH > \
> -e RUNTIME_EXTRA_HOSTS = < EC2_INTERNAL_HOSTNAME > : < EC2_PRIVATE_IP > \
> -v /var/run/docker.sock:/var/run/docker.sock:rw \
> -v < CLIENT_KEYTAB_PATH > : < CLIENT_KEYTAB_PATH > :ro \
> newrelic/synthetics-job-manager