このドキュメントでは、Amazon Linux 2023 EC2インスタンス上にKerberos Key Distribution Center(KDC)およびSPNEGO/Kerberos認証のWebアプリケーションをセットアップする方法と、Kerberos認証をサポートするモニターを実行するように外形監視ジョブマネージャー (SJM)を設定する方法について説明します。
プレースホルダーの値 始める前に、ご使用の環境の以下の値を確認してください。このドキュメントに表示されるプレースホルダーはすべて、ご自身の値に置き換えてください。
プレースホルダー
説明
例
<REALM_NAME>
Kerberosレルム(大文字である必要があります)
KERBTEST.LOCAL
<EC2_PRIVATE_IP>
EC2インスタンスのプライベートIPv4アドレス
10.8.9.172
<EC2_INTERNAL_HOSTNAME>
Webアプリの完全修飾ドメイン名(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>
New Relic プライベートロケーションキー
NRSP-us...
パート1:ホスト環境のセットアップ ステップ1:Kerberosパッケージをインストールする ホストEC2インスタンスにKerberos KDCサーバーと管理ツールをインストールしてください:
$ sudo dnf install -y krb5-server krb5-workstation
ステップ2:システムKerberosの構成(/etc/krb5.conf) レルムの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:クライアントとサーバーのキータブの生成 クライアント(外形監視ワーカー)とターゲットWebサーバーのサービスプリンシパル名(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:テストWebコンテナのデプロイ ヒント この手順は、セットアップを検証するために同じホスト上でテストWebサーバーを実行する場合にのみ必要です。SJMの設定には必要ありません。
mod_auth_gssapiで構成されたApacheコンテナをデプロイします:
$ 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 で応答し、保護されたWebページのコンテンツが表示されます。
パート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サポートを有効にした場合) 以下の環境変数(-e)とキータブボリュームマウント(-v)をdocker runコマンドに追加します:
> --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