Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. はじめに

Kerberos による Checkmk の GUI へのシングルサインオンは、Checkmk では公式にはサポートされていませんが、お客様ご自身で簡単に設定することができます。 この説明では、その方法について説明します。

Checkmk の設定を Kerberos による SSO (シングルサインオン) に遡及的に変更するには、以下の前提条件を満たしている必要があります。

  • Apache のバージョンが 2.4 以降であること。

  • Checkmk サーバーに、libapache-mod-auth-kerb モジュールがインストールされている必要があります(Red Hat Enterprise Linux および CentOS の場合はmod_auth_kerb 、SUSE の場合はapache2-mod_auth_kerb )。

  • Kerberos クライアントが Checkmk サーバーにインストールされ、設定されています。

  • Keytab(/etc/krb5.keytabなど)がインストールされており、サイトユーザーが読み込める状態になっています。

  • Checkmk サーバーはサービスプリンシパルとして設定されています。

  • クライアントのブラウザは、Kerberos を使用してアクセスするように設定されています。

オプション:

SSO を使用しないユーザーも通常のログインページからログインできるようにするには、Cookie 認証を有効にする必要があります。

2. Kerberos 統合

Checkmk を Kerberos による認証に切り替えるには、~/etc/apache/conf.d/auth.conf ファイルを削除して書き直します。 以下のファイル内容の先頭にあるエントリは例です。 したがって、Define という式で始まるすべての行を、お使いの環境に合わせて変更してください。

~/etc/apache/conf.d/auth.conf
Define SITE MyCheckmkSite
Define REALM MyRealm.org
Define SERVICENAME myservice.mydomain.tld
Define KEYTAB /omd/sites/${SITE}/etc/apache/cmk_http.keytab

<IfModule !mod_auth_kerb.c>
  LoadModule auth_kerb_module /usr/lib/apache2/modules/mod_auth_kerb.so
</IfModule>

<Location /${SITE}>
  <If "! %{HTTP_COOKIE} =~ /^(.*;)?auth_${SITE}/ && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/register_agent.py' && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/deploy_agent.py' && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/run_cron.py' && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/restapi.py' && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/webapi.py' && \
    ! %{REQUEST_URI} = '/${SITE}/check_mk/automation.py' && \
    ! %{REQUEST_URI} -strmatch '/${SITE}/check_mk/api/*' && \
    ! %{REQUEST_URI} = '/${SITE}check_mk/ajax_graph_images.py' && \
    ! %{QUERY_STRING} =~ /(_secret=|auth_|register_agent)/ && \
    ! %{REQUEST_URI} =~ m#^/${SITE}/(omd/|check_mk/((images|themes)/.*\.(png|svg)|login\.py|.*\.(css|js)))# ">
  Order allow,deny
  Allow from all
  Require valid-user

  AuthType Kerberos
  AuthName "Checkmk Kerberos Login"

  KrbMethodNegotiate on
  KrbMethodK5Passwd off
  KrbLocalUserMapping on


  # Environment specific: Path to the Keytab, Realm and ServicePrincipal
  KrbAuthRealm ${REALM}
  KrbServiceName HTTP/${SERVICENAME}@${REALM}
  Krb5Keytab ${KEYTAB}

  # When Kerberos auth fails, show the login page to the user
  ErrorDocument 401 '<html> \
      <head> \
        <meta http-equiv="refresh" content="1; URL=/${SITE}/check_mk/login.py"> \
      </head> \
      <body> \
        Kerberos authentication failed, redirecting to login page. \
        <a href="/${SITE}/check_mk/login.py">Click here</a>. \
      </body> \
    </html>'
  </If>
</Location>

# These files are accessible unauthenticated (login page and needed ressources)
<LocationMatch /${SITE}/(omd/|check_mk/(images/.*\.png|login\.py|.*\.(css|js)))>
  Order allow,deny
  Allow from all
  Satisfy any
</LocationMatch>

上記のサンプル設定を実行すると、Kerberos による認証のみが可能になります。 次に、basic auth をクッキーを使用する場合と使用しない場合(SSO を使用しないユーザー用、またはフォールバック用)のどちらで引き続きサポートするかを決定する必要があります。 この設定については、次の 2 つの章で説明します。

3. 基本認証を許可します

Kerberos による SSO に加えて、basic auth による認証を引き続き許可する場合は、上記の設定で 1 行を編集する必要があります。

これを行うには、次の行の値をon に変更してください。

~/etc/apache/conf.d/auth.conf
  KrbMethodK5Passwd on

認証をより便利にするため、Checkmk はクッキーによるログインもサポートしています。 新しい、変更されていない Checkmk サイトでは、これが現在のデフォルト設定です。

最後に、この認証オプションがまだ有効になっているかどうか、およびその設定を維持すべきかどうかを確認してください。

次のコマンドで、サイトの現在の状態を確認できます。

OMD[mysite]:~$ omd config show MULTISITE_COOKIE_AUTH

ここで「on 」という値が表示され、クッキー認証を有効のままにしたい場合(たとえば、フォールバックとして)、この時点で必要な操作はこれだけです。

一方、MULTISITE_COOKIE_AUTH を無効にしたい場合は、次のコマンドで実行できます。

OMD[mysite]:~$ omd config set MULTISITE_COOKIE_AUTH off

次に、サイトの Apache ディレクトリからcookie_auth.conf ファイルを削除します。

OMD[mysite]:~$ rm ~/etc/apache/conf.d/cookie_auth.conf

5. 診断

Kerberos の設定が機能しているかどうかは、次のコマンドでチェックできます。

root@linux# kinit -p username
root@linux# klist
このページでは