注意: 本記事はドキュメント・公開情報をもとにした評価記事です。コード例はシミュレーションです。
3行要約
- OAuth2、SAML、LDAP、Radiusなど、バラバラな認証プロトコルを一つのモダンなUIで一元管理できる
- 認証ロジックをPython(Expression Policy)で直接記述できるため、他のOSS IdPよりもカスタマイズの自由度が圧倒的に高い
- 自宅サーバーや社内ツールの認証を自前でガチガチに固めたいエンジニアには最適だが、マネージドな手軽さを求める人には学習コストが高い
📦 この記事に関連する商品(楽天メインで価格確認)
Beelink S12 Proauthentikを常時稼働させるIdPサーバーとして、低消費電力で十分なスペック
※アフィリエイトリンクを含みます
結論から: このツールは「買い」か
結論から言うと、自前でインフラを管理できるエンジニア、特に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を立てる必要もありません。内部変数の context や request にアクセスできるため、非常に柔軟な判定が可能です。
応用: 実務で使うなら
実務では、既存のActive Directory (LDAP) と連携しつつ、新しいWebアプリにはOAuth2/OIDCでシングルサインオン(SSO)を提供し、さらに特定の重要アプリだけ「Duo」や「YubiKey」での多要素認証(MFA)を強制する、といった使い方が現実的です。
- LDAP Sourceの作成: 既存のユーザー情報を同期
- Flowの構築: 「識別(ID入力)→ 判定(ポリシー)→ 認証(パスワード)→ 多要素認証」の順に繋ぐ
- 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/authentik | Keycloak | Auth0 (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の一部は日本語に対応していますが、設定項目の多くは英語です。ユーザーが見るログイン画面などはテンプレートを編集して完全に日本語化することが可能です。





