IdP 検証のために keycloak を Cloud Run にデプロイする

Table of Contents

Identity Provider(IdP) と連携した機能の検証を行いたいが、自社の IdP は社内の情シス管理だし、なかなか触りづらい。
そこで、検証用に IdP を個別に立てて、利用したいなというモチベーション。

構成概要

目的が検証用途であるため、以下のような思想で構築していく。

  • IdP として、無償で利用可能な Keycloak を選定
  • 実行環境の準備は OpenJDK のインストール作業などを除くため、コンテナ化されたものを使用
  • Google Cloud 関連で利用したかったこともあり、コンテナ実行環境は Cloud Run
    • 常時起動している状態ではなく、揮発性データに対する考慮が必要
  • Keycloak は 開発モード で実行する
  • データ保存先のデータベースは個別に用意せず、 Cloud Run から GCS をマウントして、そこにデータを保存
    • Keycloak 上の名称 dev-file を利用する

Keycloak 構築実施

Google Cloud 向けの事前準備

Artifact Registry のリモートリポジトリ構築

Cloud Run がコンテナイメージを取得する場合、 Artifact Registry もしくは、 Docker Hub からとなる。
一方で、 Keycloak のコンテナイメージは Quay から取得したいので、 Artifact Registry のリモートリポジトリを設定する。

参考: リモート リポジトリを作成する  |  Artifact Registry documentation  |  Google Cloud

gcloud artifacts repositories create quay \
  --repository-format=docker \
  --location=asia-northeast1 \
  --mode=remote-repository \
  --disable-vulnerability-scanning \
  --remote-docker-repo=https://quay.io

永続データ保存用の GCS バケット作成

Cloud Run 上のコンテナの揮発性データが消えないように、コンテナにマウントさせる GCS バケットを作成する。

gcloud storage buckets create gs://${BUCKET_NAME}/ --uniform-bucket-level-access --location=asia-northeast1

Keycloak のデプロイ

Cloud Run へ Keycloak をデプロイ。
検証用途なので、とりあえず動かすために対応していますが、ID/PWのみで公開する設定となっているため、環境に応じたセキュリティ対策は必要になるかもしれません。

gcloud run deploy keycloak --image asia-northeast1-docker.pkg.dev/${PROJECT_ID}/quay/keycloak/keycloak:latest \
  --set-env-vars KC_BOOTSTRAP_ADMIN_USERNAME=admin,KC_BOOTSTRAP_ADMIN_PASSWORD=${PASSWORD},KC_HOSTNAME=https://keycloak-${PROJECT_NUMBER}.asia-northeast1.run.app \
  --add-volume name=keycloak-data,type=cloud-storage,bucket=${BUCKET_NAME} \
  --add-volume-mount volume=keycloak-data,mount-path=/opt/keycloak/data/ \
  --max-instances 1 --min-instances 0 --memory 2000Mi --cpu 2 --args start-dev --allow-unauthenticated --region asia-northeast1
Cloud Run デプロイ時のオプションについて
  • image : コンテナイメージを Artifact Registry へ作成した リモートリポジトリ から取得
    • latestタグを指定していますが、検証時点では26.3.2-0でした
  • set-env-vars : Keycloak への環境変数を指定
  • add-volume, add-volume-mount : 作成した GCSバケット を /opt/keycloak/data へマウント
    • これにより揮発性のデータを GCSバケット へ出力させて永続化する
  • max-instances, min-instances : 費用を抑えるために最小
  • memory, cpu : Get started の Kubernetes 上へデプロイする場合の マニフェスト を参照してサイジング
    • 特にメモリは起動時に確保される
  • args : Keycloak 起動時の引数を指定
    • start-dev 引数で起動することで、 Keycloak を 開発モード で実行する
  • allow-unauthenticated : サービスを公開し、 IdP を利用したい接続元から接続できるようにする
  • region : とりあえず東京で起動
    • 変更する場合、set-env-vars オプション内の KC_HOSTNAME も変更する点に留意

動作確認

gcloud run deploy コマンド実行後のコンソールにも表示されるが、 Cloud Run が生成するURL( https://keycloak-${PROJECT_NUMBER}.asia-northeast1.run.app )をブラウザで開く。
すると、 Keycloak へログインするための username/password を求められるので、先に環境変数として設定した KC_BOOTSTRAP_ADMIN_USERNAME, KC_BOOTSTRAP_ADMIN_PASSWORD でログインできる。

関連ドキュメント