注意: 本記事はドキュメント・公開情報をもとにした評価記事です。コード例はシミュレーションです。

3行要約

  • OAuth2、SAML、LDAP、Radiusなど、バラバラな認証プロトコルを一つのモダンなUIで一元管理できる
  • 認証ロジックをPython(Expression Policy)で直接記述できるため、他のOSS IdPよりもカスタマイズの自由度が圧倒的に高い
  • 自宅サーバーや社内ツールの認証を自前でガチガチに固めたいエンジニアには最適だが、マネージドな手軽さを求める人には学習コストが高い

📦 この記事に関連する商品(楽天メインで価格確認)

Beelink S12 Pro

authentikを常時稼働させるIdPサーバーとして、低消費電力で十分なスペック

楽天で価格を見る Amazonでも確認

※アフィリエイトリンクを含みます

結論から: このツールは「買い」か

結論から言うと、自前でインフラを管理できるエンジニア、特にPythonに慣れている人にとって、authentikは現時点で最強のオープンソース認証基盤(IdP)の一つです。★評価は4.5。

Keycloakのような「堅牢だが重厚長大で設定が難解」なツールに疲れた人や、Auth0の無料枠制限・コスト増に頭を悩ませているチームには最高の選択肢になります。

一方で、Dockerやネットワークの基礎知識がない人、あるいは「とりあえず数分でログイン画面を作りたい」というフロントエンド重視の人にはおすすめしません。初期設定の複雑さと、多機能ゆえの「どこを触ればいいのかわからない」感覚は、Auth0やClerkなどのSaaS系ツールには及びません。

このツールが解決する問題

従来、社内ツールや自作アプリの認証を統合しようとすると、プロトコルの壁にぶつかっていました。「このツールはSAMLしか対応していない」「この古いシステムはLDAPが必要」といった状況です。

これらを解決するためにKeycloakなどが使われてきましたが、Javaベースでメモリ消費が激しく、設定画面のUIも一世代前の印象が拭えませんでした。また、独自の認証ロジック(特定のドメインのみ許可、特定の時間帯のみ多要素認証を要求など)を組もうとすると、設定ファイルの迷宮に迷い込むことになります。

authentikは、これらをすべて「Flow(フロー)」と「Stage(ステージ)」という概念で整理し、GUI上でパズルを組むように認証工程を設計できます。最大の特徴は、その判断基準に「Python」を使える点です。

「特定のグループに属していて、かつログイン元IPが社内セグメントの場合のみ、MFAをスキップする」といった実務でよくある要望が、数行のPythonコード(Expression Policy)を書くだけで完結します。この「エンジニアがやりたいことを、エンジニアが得意な言語で解決できる」点が、他のIdPにはない圧倒的な強みです。

実際の使い方

インストール

authentikは複数のコンポーネント(Server, Worker, Database, Redis)で構成されるため、Docker Composeでの構築が標準です。

# 公式のdocker-compose.ymlを取得
wget https://raw.githubusercontent.com/goauthentik/authentik/main/docker-compose.yml

# .envファイルの作成と初期設定
# パスワード生成などは事前に行う
echo "PG_PASS=$(openssl rand -base64 36)" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 36)" >> .env

# 起動
docker-compose up -d

前提として、Docker環境と最低2GB(推奨4GB以上)のRAMが必要です。私の環境では、アイドル時でも1.5GB程度のメモリを消費しています。軽量さを売りにするGoベースの他ツールに比べると、意外とリソースを食う点は注意してください。

基本的な使用例

authentikの真骨頂である「Expression Policy(Pythonによる制御)」の例です。例えば、「特定のメールアドレスドメインを持つユーザーだけを通過させる」ロジックは、管理画面のポリシー設定に以下のように記述します。

# authentik Expression Policy の例
# ユーザーのメールアドレスを取得
user_email = context['pending_user'].email

# 特定のドメイン(@example.jp)以外は拒否
if not user_email.endswith('@example.jp'):
    # 拒否メッセージを渡してFalseを返す
    ak_message("許可されていないドメインです。管理者に連絡してください。")
    return False

# それ以外は通過
return True

このコードは、authentik内部で実行されるため、外部にAPIを立てる必要もありません。内部変数の contextrequest にアクセスできるため、非常に柔軟な判定が可能です。

応用: 実務で使うなら

実務では、既存のActive Directory (LDAP) と連携しつつ、新しいWebアプリにはOAuth2/OIDCでシングルサインオン(SSO)を提供し、さらに特定の重要アプリだけ「Duo」や「YubiKey」での多要素認証(MFA)を強制する、といった使い方が現実的です。

  1. LDAP Sourceの作成: 既存のユーザー情報を同期
  2. Flowの構築: 「識別(ID入力)→ 判定(ポリシー)→ 認証(パスワード)→ 多要素認証」の順に繋ぐ
  3. Applicationの登録: 各アプリ(Grafana, Nextcloud, 自作APIなど)を登録

この際、各アプリごとに異なるフローを割り当てられるため、「社内WikiはID/PWのみ、本番環境のダッシュボードはMFA必須」といった運用が、一つのauthentikインスタンスで完結します。

強みと弱み

強み:

  • 圧倒的なカスタマイズ性: Pythonでロジックを書けるため、API連携や複雑な条件分岐が容易。
  • オールインワン: LDAP、SAML、OAuth2、Radius、プロキシ認証まで、これ一つで完結する。
  • モダンなUI: 管理画面がVue.jsで構築されており、レスポンシブで使いやすく、ダークモードも標準装備。
  • Blueprints: 設定をYAML形式でエクスポート/インポートできるため、Infrastructure as Code(IaC)に乗りやすい。

弱み:

  • ドキュメントが英語のみ: 日本語の情報が極端に少なく、公式ドキュメントを読み解く力が必要。
  • リソース消費: Python(Worker)とGo(Server)のハイブリッド構成のため、メモリ消費が激しい。
  • 初期設定の難易度: 「Flow」や「Stage」の概念を理解するまで、ログイン画面を出すだけでも一苦労する。

代替ツールとの比較

項目goauthentik/authentikKeycloakAuth0 (Free Plan)
柔軟性極めて高い (Python)高い (Java/JS)普通 (GUI/Rules)
設置形態セルフホストセルフホストSaaS
日本語情報少ない多い非常に多い
メモリ消費中 (2GB〜)大 (4GB〜)0 (SaaSのため)
ユーザー数制限なしなし7,000人まで

企業でサポートが必要、かつ大規模ならKeycloak。個人開発やスタートアップで、コストを抑えつつ「自分たちの思い通り」に認証を組み上げたいならauthentikが最適です。

料金・必要スペック・導入前の注意点

authentik自体はオープンソース(MITライセンス)であり、無料で商用利用も可能です。ただし、以下のインフラコストとスペックを考慮してください。

  • 推奨スペック: 2 vCPU / 4GB RAM以上。1 vCPU / 2GB RAMでも動きますが、Workerの処理が遅延することがあります。
  • ストレージ: PostgreSQLのDB領域として10GB〜あれば十分。
  • ハードウェア選定: 24時間稼働させるIdPとしての性質上、安定したサーバーが必要です。自宅サーバーなら、Intel N100搭載のミニPC(例: Beelink S12 Pro)程度が、省電力とパフォーマンスのバランスが良く、2万円台で手に入るため導入しやすいでしょう。
  • 注意点: 認証の要になるため、authentikが落ちるとすべてのサービスにログインできなくなります。冗長構成にするか、バックアップ(PostgreSQLのダンプ)を自動化しておくことが必須です。

私の評価

私の評価は ★4.5 です。

Pythonエンジニアにとって、認証ロジックをコードで制御できる感覚は一度味わうと戻れません。今までの「設定ポチポチ」の苦労は何だったのかと思わされます。特に、機械学習モデルのデモサイトなどで「特定の権限を持つユーザーだけにGPUリソースを割り当てる」といった際の認可ロジックの実装が非常に楽になります。

ただし、万人向けではありません。ネットワーク層(リバースプロキシの設定など)に詳しくない人が手を出すと、無限に時間が溶けます。逆に、Dockerを使い慣れていて、自宅や社内の認証を「プロフェッショナルなレベル」で統合したいなら、これ以外の選択肢は考えられないほど完成度が高いです。

よくある質問

Q1: Auth0から乗り換えるメリットはありますか?

ユーザー数が増えても料金が変わらない点が最大。また、自社独自の認証要件(特殊なDBとの照合など)がある場合、Pythonで自由に記述できるauthentikの方が柔軟です。

Q2: 運用負荷はどの程度ですか?

安定してしまえば手間はかかりませんが、アップデート時にDBマイグレーションが発生することがあります。Docker Composeのイメージタグを固定し、検証環境で試してから本番を上げる運用を推奨します。

Q3: 日本語化は可能ですか?

UIの一部は日本語に対応していますが、設定項目の多くは英語です。ユーザーが見るログイン画面などはテンプレートを編集して完全に日本語化することが可能です。


あわせて読みたい