zaki work log

作業ログやら生活ログやらなんやら

NetBox(community版)のログインをKeycloakのOpenIDで認証する

Keycloakでいろいろ認証してみるシリーズ第4弾
今回はNetBox。ログイン時にユーザー名・パスワードでなく、Keycloakを使って認証してみよう、というもの。

環境は以下の通り

  • NetBox Community v4.5.3-Docker-4.0.1 / インストールは公式Helmチャート netbox-8.0.4
  • Keycloak: 26.5.3

※ 全てKubernetesの同一クラスタ上で動作し、Ingressでwebアクセスできる構成

Keycloak

いつもの感じでクライアント作成する。

  • Client type: OpenID Connect
  • Client ID: netbox
  • Name: netbox
  • Client authentication: check
  • Root URL: https://netbox.example.org/
  • Valid redirect URIs: 空欄で良い (自動的にセットされる)

上記項目でclientを作成したら、追加でマッピング設定も行う。
上部タブメニューの「Client scopes」で「netbox-dedicated」リンク、「Configure a new mapper」ボタン押下、リストから「Audience」選択。

  • Name: mapper(適当)
  • Included Client Audience: netbox
  • Add to ID token: check

これを入力したら「Save」押下。
Secretの値等をメモする。

ちなみに、これまでのAWXやHahiCorp Vaultと異なり、マッピング設定が無いと以下のエラーが出るので注意。

<class 'jwt.exceptions.InvalidAudienceError'>
Audience doesn't match

NetBox

HelmでインストールしたCommunity版は設定のUIが無いため、HelmのパラメタのremoteAuthに設定して再デプロイを行う。
helm upgradeを実行すればConfigMapが更新・Podが再作成され、Keycloak認証が有効になる。

ただ、現在のバージョンのHelmチャートのはリモート認証を有効にするための設定(remoteAuth)は設定キーに用意されているが、Keycloak特有の設定は無い(LDAPの設定しか無い)ため、Keycloak固有設定はextraConfigに設定する。

Helmチャートのパラメタ(values.yaml)

Keycloak認証を有効にするための設定(抜粋)は以下の通り。
以下はKeycloakのRealm名がlab-ssoの場合のパス(URL)

remoteAuth:
  enabled: true
  backends:
    - social_core.backends.keycloak.KeycloakOAuth2
  autoCreateUser: true
  defaultGroups:
  - netbox-users

extraConfig:
  - values:
      SOCIAL_AUTH_KEYCLOAK_KEY: "netbox"
      SOCIAL_AUTH_KEYCLOAK_SECRET: 
      SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY: 
      SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL: "https://keycloak.example.org/realms/lab-sso/protocol/openid-connect/auth"
      SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL: "https://keycloak.example.org/realms/lab-sso/protocol/openid-connect/token"
      SOCIAL_AUTH_VERIFY_SSL: false

設定項目は以下の通り。

キー
SOCIAL_AUTH_KEYCLOAK_KEY Keycloakで作成したClient ID
SOCIAL_AUTH_KEYCLOAK_SECRET 指定Client IDのSecret
SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY [Realm settings]->[Keys]にあるrsa-generatedのPublic Key
SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL 上記の通り
SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL 上記の通り

設定キーの細かい仕様は以下参照。

github.com

python-social-auth.readthedocs.io

python-social-auth.readthedocs.io

www.maksonlee.com

NetBoxのドキュメント内のKeycloak連携については(2026年3月時点では)情報が少ない。リストにKeycloakの名前はあるけどね。

netboxlabs.com

netboxlabs.com

権限設定

Keycloak認証でログインしたユーザーはデフォルトでは何も権限が付与されていない。
ログインした時点で何らかの権限を付与するには、 NetBox上に事前に権限付与したグループを作成しておき、そのグループに属するように設定 させると楽。

以下は「Keycloakで認証したユーザーはnetbox-usersグループに自動的に所属」という設定。
ただしこのグループは事前に作成しておく必要がある。また、このグループに対して操作可能な権限も設定しておく。

remoteAuth:
  defaultGroups:
  - netbox-users

これでNetBoxのログイン画面にKeycloak認証のボタンが表示され、このボタン押下でKeycloak認証が可能になる

ちなみにautoCreateGroupssuperuserGroupsというキーはあるけど、この構成での使い方はわからなかった。。名前からしてグループの事前作成が不要っぽいんだけどね。そういう動作はしなかった。


全体の設定は以下参照

zaki-hmkc.hatenablog.com