レック・テクノロジー・コンサルティング株式会社TECH BLOG

【OpenShift】Keycloakを利用してOIDC認証を設定する

はじめに

OpenShiftでは、Basic認証やHTPasswd、OIDCなどを用いてログインすることが可能です。 また、OpenShiftでは、Operatorを利用して、keycloakをインストールし認証を行うことが可能となります。 ただ、今回は勉強も兼ねて専用のKeycloakサーバを構築しOICD認証を設定してみたいと思います。

前提

AWS上にOpenShiftとKeycloakサーバを構築していきます。 また、Keycloakではドメインを必要としますので、Route 53などでドメインを設定しておきましょう。

Keycloakをインストール

今回は、ECS(AmazonLinux2023)にKeycloakをインストールしていきたいと思いますので、最初にJavaをインストールしていきます。

# yum install java-21-amazon-corretto-devel

Javaがインストール出来たら、以下のサイトからkeycloakをダウンロードします。 https://github.com/keycloak/keycloak/releases

# curl -LO https://github.com/keycloak/keycloak/releases/download/26.4.1/keycloak-26.4.1.zip

# ls keycloak-26.4.1.zip

無事にダウンロード出来たらkeycloakを解凍します。

# unzip keycloak-26.4.1.zip Archive: keycloak-26.4.1.zip creating: keycloak-26.4.1/ creating: keycloak-26.4.1/conf/ creating: keycloak-26.4.1/themes/ creating: keycloak-26.4.1/bin/ creating: keycloak-26.4.1/bin/cli

Keycloakを起動する際に管理者ユーザを作成するため、環境変数にユーザ名とぱパスワードを登録しておきます。

export KEYCLOAK_ADMIN=<ユーザ名> export KEYCLOAK_ADMIN_PASSWORD=<パスワード>

KeycloakにアクセスするためにはHTTPS通信が必要となります(設定次第でHTTPも許可できます) 証明書が必要となりますので、今回はLetsEncryptを利用して証明 書を発行していきます。

証明書発行に必要なパッケージ取得します。

# yum install certbot

※サーバには一時的で良いのでポート80からのアクセスを許可しておきましょう。

パッケージをインストールしたら証明書を発行していきます。

# certbot certonly --standalone -d <ドメイン名>

Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): <適当なメールアドレス>


Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf. You must agree in order to register with the ACME server. Do you agree?


(Y)es/(N)o: Y


Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.


(Y)es/(N)o: N Account registered. Requesting a certificate for <ドメイン名>

証明書が発行されたら、CA証明書をローカルにダウンロードしておきます。(OpenShift側でOIDC認証を設定する際に利用します。)

証明書を発行したら、いよいよKeycloakを起動します。
今回はdevモードで起動します。本番相当であれば、本番モードで起動してください。

bin/kc.sh start-dev --https-certificate-file=/etc/letsencrypt/live/<ドメイン名>/fullchain.pem --https-certificate-key-file=/etc/letsencrypt/live/<ドメイン名>/privkey.pem

Keycloakへのログイン

無事に起動したらkeycloakにログインします。
ログインする際は環境変数でしたユーザ名とパスワードを指定します。

keycloakログイン画面.png

無事にログイン出来ましたら、Manage realmsをクリックし、OpenShift用のレルムを作成していきます。

keycloakログイン後.png

Manage realmsをクリックすると以下画面になりますので、Create realmをクリックします。

keycloak_れるむ作成.png

Create realm画面で、Realm nameにレルムの名前を入力します。
今回はopenshiftで作成しております。

keycloak_れるむ作成2.png

レルムが出来ましたら、次はクライアントを作成します。
画面左側にあるClientsをクリックします。

keycloak_クライアント作成.png

クライアントの一覧が出ますので、Create clientをクリックします。

keycloak_クライアント作成0.png

クライアント作成ページで、ClientIDとNameを入力します。今回はtest用なので、以下のように入力しております。

keycloak_クライアント作成3.png

次のページで、Client authenticationをOnにします。
また、Authentication flowでStandard flowにチェックがついていることを確認します。

keycloak_クライアント作成4.png

次のページでは、特に入力せずデフォルトのままにしておきます。
厳密には、Keycloak側で認証を行う際にValid redirect URIsなどを設定しておくべきですが、今回は検証なのでデフォルトのままにしておきます。

keycloak_クライアント作成0.1.png

クライアントが無事作成されたことを確認し、タブのCredentialsをクリックします。

keycloak_クライアント作成5.png

Credentialsの中のClient Secretの文字列をコピーします。(OpenShift側でOIDC認証を設定する際に利用します。)


keycloak_クライアント作成6.png

クライアントまで作成したらユーザを作成していきます。
画面左のUsersをクリックします。また、Create new userをクリックし、適当なユーザを作成しておきます。

keycloak_ユーザ作成.png

今回はtestユーザを作成します。

keycloak_ユーザ作成2.png

testユーザが作成出来たら、パスワードを設定するため、タブのCredentialsをクリックし、パスワードを設定しておきます。

keycloak_ユーザ作成3.png

ユーザまで作成したら最後にissuerのURLをコピーしておきます。
画面左のRealm settingsをクリックすると、下のほうにEndpointsのリンクがあります。
リンクを押して、https://<ドメイン名>/realms/<レルム名>のURLがあるので、コピーしておきます。(OpenShift側でOIDC認証を設定する際に利用します。)

keycloak_issue.png

OpenShiftにOIDC認証を実施

Keycloakを設定した後は、OpenShift側でOIDC認証を追加していきます。
OpenShiftに管理者でログインした後、クラスター設定を開きます。

OpenShiftログイン設定.png

設定を開くと、設定の一覧が表示されますので、OAuthをクリックします。

OpenShiftログイン設定2.png

OAuthの画面の下のほうで、アイデンティープロバイダーの設定がありますので、追加をクリックします。
すると、登録したいアイデンティープロバイダーの一覧が表示されますので、OpenID Connectをクリックします。

OpenShiftログイン設定4.png

OpenID Connectの設定画面が表示されますので、以下の設定を追加します。

クライアントID:test ※Keycloakで作成したクライアントIDを指定します。

クライアントシークレット:<コピーしたシークレット> ※事前にコピーしたシークレットを張り付けます。

発行側のURL:IssuerのURL(https://<ドメイン名>/realms/<レルム名>) ※事前にコピーしたIssuerを張り付けます。

OpenShiftログイン設定5.png

最後にCAファイルを添付します。(Keycloakを構築した際にLet's Encryptで取得したCA証明書を添付します。)
CA証明書はBEGIN CERTIFICATEで始まるファイルです。ここで違うファイルを指定すると正しく設定されずエラーとなります。

OpenShiftログイン設定6.png

OIDCの設定が完了すると、OAuth用のpodが再デプロイされますので、デプロイが完了するまで少し待ちます。

OpenShiftログイン設定7.png

OpenShiftにログイン

デプロイ完了したらOpenShiftにログインしてみます。
OpenShiftのログイン用URLでアクセスすると、openidの項目が追加されています。
openidをクリックしてみましょう。

OpenShiftのログイン.png

openidをクリックすると、Keycloak側のログイン画面にリダイレクトされます。
事前に作成したtestユーザのIDとパスワードを入力しログインします。

OpenShiftのログイン2.png

無事ログインできました。
今回は特に権限もないので、プロジェクトなどは見れません。

OpenShiftのログイン3.png

まとめ

今回はKeycloakサーバを構築し、OpenShiftのログインに利用してみました。
特に権限回りの設定をしていないためプロジェクトなどは見れてませんが、今後は権限やグループなどを設定できないか模索してみます。
少しでも参考になれば幸いです。

出くわしたエラー

OpenShiftにOIDC認証を設定する際に誤ったCAファイルをアップロードすると、メッセージに以下のエラーが出力されpodがデプロイされてませんでした。
認証設定を間違えると再度設定追加が必要になりますので、気を付けてもらえればと思います。

エラー.png

Careersキャリア採用

ページトップへ戻る