🕌

転生したらIAMだった件 Keycloak導入編

2022/09/26に公開

Identity and Access Managementで世界を救うのです

と、冗談はさておき、諸事情で朝目覚めたら、組織内でIdP必要になるかもしれなくね?ということになり、模索している備忘録です。

Identity and Access ManagementをするためのIdPの選定

個人的な意見ですが、IdP(OIDCでも、SAMLでも)が必要になったと感じた場合は、素直にIDaaSを利用するのが良いかと思います。理由としては、とっつきやすさとClient側(RPでも、SPでも)に対応してもらおうと考えた場合に大まかなライブラリがそろっていることが多いためです。IdP管理者=利用するClientサービスの管理者になってしまいがちになります。

IdP単体の機能でと考えると、OktaAuth0になるでしょうか。ただし将来的にはOktaになります。無料枠でも充実してますし、2年前ほどから日本語の技術系の記事が増えてきたのでさわりやすいかなと思います。

※ここでは過去の対応がとか、CVEが実装がというのは排除してあくまでとっつきやすさでおすすめしています。各組織やポリシーに合わせて取捨選択してください。

じゃあなぜ、Keycloak?

諸事情があってオンプレのIdPが必要になったからです。諸事情です。

ということで、オンプレのIdPとしてKeycloakにした理由としては、個人的に5年ほど前から追いかけているからということがあります。が、素直にコミュニティが活発であり、新しい技術(FIDO、PICE等)を取り入れようという心意気です。

今回はKeycloakについて詳細な説明は省きますが、公式ドキュメントやたくさんの情報がインターネットにあると思いますので調べてみてください。

実際に動かしてみる

今回は、動作確認や機能の確認ということを前提に実際に動かしてみたいと思います。利用環境は以下のようになっていて、Dockerでデプロイしていきます。

Infrastructure

  • OS : Ubuntu 22.04 server 64bit
  • CPU : 2core
  • MEM : 4GB
  • Disk : 32GB

基本的には、Get started with Keycloak on Dockerをもとに構築していきます。

環境整備

docker, docker-composeをインストールし、dockerをuser権限で動作できるようにします。

# docker, docker-composeをインストール
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install docker-compose git -y

# 現在のuserをdocker groupに所属させる
$ sudo gpasswd -a $USER docker

# デーモンのリスタートと反映
$ sudo systemctl restart docker
$ exit

コマンドコピー用

sudo apt update && sudo apt upgrade -y
sudo apt install docker-compose git -y
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit

Keycloakをデプロイする

公式のドキュメントには、

$ docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:19.0.2 start-dev

とあり、これでkeycloakをhttps://localhost:8080にアクセスすることで、簡単に試すことができます。注意事項として、KEYCLOAK_ADMIN=admin,KEYCLOAK_ADMIN_PASSWORD=adminを任意のものに必ず変更をお願いします。

本記事では、実行、再利用のしやすさと、もう少しkeycloakを使ってみたいという思いや少しニッチなところまで利用したいということを考慮して、docker-composeでデプロイしていきます。また、公式ドキュメントと違い、Dockerhubからイメージを取得しています。これは、筆者が実運用を見据えたときに諸事情があったため、keycloak 16のこちらを利用しています。(公式ドキュメントの方法でデプロイするものは、Keycloak 17以降、Quarkus版になっているかと思います。)この詳細については、今後Logの取得やQuarkus版についての記事で触れる予定です。

フォルダ構成と各ファイルはこのようになっています。changemeは必ず変更してください。

keycloak
- Dockerfile
dokcer-compose.yml

keycloak/Dockerfile

FROM jboss/keycloak

docker-compose.yml

version: "3"
services:
  keycloak:
    build: keycloak
    restart: always
    ports: 
      - "8080:8080"
    environment:
      - "KEYCLOAK_ADMIN=admin"
      - "KEYCLOAK_ADMIN_PASSWORD=changeme"
      # おそらくこちらでも動きます
      # - "KEYCLOAK_USER=admin"
      # - "KEYCLOAK_PASSWORD=changeme"

ここまで用意したら実行してみます。今回はリビルドやエラーの確認を考えて以下のコマンドで実行します。

$ docker-compose up --build

起動まで少し時間がかかりますが、エラーがない場合は、https://localhost:8080にアクセスすることでkeycloakを試すことができます。

まとめ

以上で、keycloakを実際に試すことができるようになりました。今後は実運用で考慮するべき点やログをどのように取得するべきかなどを、もし興味がある人がいれば議論したいなと思っています。わからないことがあればtwitterでDMをくれれば、私の趣味の範囲内ではありますが、知っていることであればお答えできればと思います。

今後の予定としては、

  • Logの出力と管理について
  • welcome pageの非表示についての議論
  • Quarkus版(Keycloak.X)について超個人的な思い

あたりを気力のある限り記事にできればと思います。

※かなり個人的な理解と使い方なので、仕様が違う、もうすでにその環境教変数や機能は存在している等あれば教えてもらえるとうれしいです。

Discussion