2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rancher のログイン認証に Keycloak を使ってみる

Posted at

はじめに

前回は ID 管理ソフトウェアである Keycloak を kubernetes 上に Deploy しました。
今回は Deploy した Keycloak を使って、Rancher のログイン認証を設定していきます。

設定に際し日本語化やSAMLの設定などを以下の AdventCalendar で勉強させていただきました。
https://qiita.com/advent-calendar/2017/keycloak-by-openstandia

Rancher の Keycloak(SAML) 用ページもあります。
https://rancher.com/docs/rancher/v2.x/en/admin-settings/authentication/keycloak/

が、上記だけでは難しかったので、手順は以下のサイトを参考にしています。
https://number1.co.za/using-keycloak-identity-provider-for-rancher-sso/
https://gist.github.com/PhilipSchmid/506b33cd74ddef4064d30fba50635c5b

環境情報

docker-ce:18.09
kubernetes:1.17
Rancher:2.4.2
Keycloak:9.0.2

※kubernetes は vagrant 上の CentOS で クラスタを構築しています。
※rancher / keycloak のアクセス URL は以下を指定しています。設定される際は適宜ご自身の環境に読み替えてください。
rancher:https://192.168.10.50/
keycloak:https://192.168.10.51:31995/

設定(Keycloak)

前準備

SAML 設定をする前にテスト用に realm や group、user を作成していきます。

realm 作成

まずは管理者アカウント(keycloak)でログインして、rancher 用に realm を作成します。

image.png

今回は「rancher」という realm を作成しました。

image.png

作成ボタンを押すと、「rancher」realm のダッシュボードに移動します。

image.png

realm 間の移動は左上の realm 名にマウスオーバーすると realm の一覧が表示されます。

group 作成

次にグループを作成します。
「管理 - グループ」⇒「新規作成」から「admin」「user」の名前で2つ作成します。

image.png

user 作成

次にユーザを作成します。
「管理 - ユーザー」⇒「ユーザの追加」から作成します。

image.png

以下を指定して2つ作成します。
※今回のEメールは送信先用には使いません。試用であれば適当な値でも問題ありません。

ユーザ名 Eメール 備考
radmin radmin@localhost.invalid admin rancher 管理者アカウント
ruser ruser@localhost.invalid user rancher 一般アカウント

image.png

「クレデンシャル」タブでパスワードを設定しておきます。
今回は「一時的」を「オフ」に設定します(初回パスワード変更をスキップ)。
「Set Password」ボタンを押すのを忘れずに。

image.png

また、「グループ」タブでグループに参加させます。
「radmin」ユーザ ⇒「admin」と「user」グループ、「ruser」ユーザ ⇒「user」グループ にそれぞれ参加させておきます。

image.png

一度ログアウトして、作成したユーザーでログインします。
ログインする際の URL ですが、realm を新しく作成したので、管理者用の URL と異なります。
「設定 - クライアント」から「account」に記載がある URL からアクセスします。

※realm 毎のログイン先 URL は以下になります。
ログイン URL:https://<keycloak Access URL>/auth/realms/<realm 名>/account/

image.png

realm 名が表示されているログイン画面が表示されます。

image.png

正常にログインできました。

image.png

SAML 設定

ログアウトし、管理用の URL から管理者アカウントでログインします。
ここから SAML の設定を行います。

SAML Client 作成

まずは Rancher 用に SAML Client を作成します。
「クライアント」から「作成」ボタンから作成します。

image.png

以下でクライアントを作成します。
※認証の利用元、今回は Rancher の情報を登録します
クライアント ID:https://192.168.10.50/v1-saml/keycloak/saml/metadata
クライアントプロトコル:saml
クライアント SAML エンドポイント:https://192.168.10.50/v1-saml/keycloak/saml/

image.png

作成が完了すると、クライアントの設定ページに遷移します。
まずは、SAML 鍵のページで証明書、鍵情報をメモしておいてください。後で使います。

設定ページ
image.png

SAML 鍵
※設定を保存した際に「SAML鍵」タブが消えてしまうので先にメモして下さい。
※メモできなかった場合でも以降で取得する Metadata XML の中でも確認することはできます。

image.png

設定タブに戻り、以下を設定します。
設定後、最下段の「保存」ボタンを忘れずに。

名前:Rancher(任意)
説明:任意
ログインテーマ:keycloak(任意)

有効:オン
ドキュメントを署名する:オン
その他のオン/オフの設定:オフ

有効なリダイレクト URI:https://192.168.10.50/v1-saml/keycloak/saml/acs
※「+」をクリックして追加するのを忘れないように。
SAML を処理するマスター URL:https://192.168.10.50/v1-saml/keycloak/saml/

image.png

image.png

プロトコルマッパーの作成

Rancher 側で指定する際に必要なフィールドと、Keycloak の情報とをマッピングするプロトコルマッパーを作成します。
まず、ビルトインのプロトコルマッパーを追加します。
「マッパー」タブから「ビルトインを追加」をクリックします。
今回は全て追加します。

「ビルトインを追加」
image.png

全てを選択して追加
image.png

また、UID / group 用にプロトコルマッパーを作成します。
「作成」をクリックし、以下内容で作成します。

プロトコル:saml(編集不可)
名前:groups
マッパータイプ:Group list
Group attribute name:member
SAML Attribute NameFormat:Basic

group 用マッパー
image.png

プロトコル:saml(編集不可)
名前:username to uid
マッパータイプ:User Property
プロパティ:username
SAML Attribute Name:uid
SAML Attribute NameFormat:Basic

UID 用マッパー
image.png

最終的なマッパー一覧

image.png

Metadata XML の取得

最後に Metadata XML を取得します。
メニューから「レルムの設定」ページにアクセスして 「エンドポイント」⇒「SAML 2.0アイデンティティー・プロバイダー・メタデータ」をクリックします。
表示されたページをローカルに保存してください。

image.png

取得後、以下のように編集します。

【修正前】descriptor.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
・・・
  -->

<EntitiesDescriptor Name="urn:keycloak" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    <EntityDescriptor entityID="https://192.168.10.51:31995/auth/realms/rancher">
・・・
    </EntityDescriptor>
</EntitiesDescriptor>

上記内容を以下のように修正します。

  • コメントアウト()を削除
  • EntitiesDescriptor 」の要素(Name など)を「EntityDescriptor」に移動
  • 上記で要素を移動後 EntitiesDescriptor のタグを削除(閉じタグも合わせて)
  • タブを空白(半角スペース4つ)に置換(空白とタブが混ざっていたため、念のため置換しました)
【修正後】descriptor.xml
<?xml version="1.0" encoding="UTF-8"?>
    <EntityDescriptor entityID="https://192.168.10.51:31995/auth/realms/rancher" Name="urn:keycloak" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
・・・
    </EntityDescriptor>

ここまでで Keycloak 側の準備は完了です。
次は Rancher 側の設定です。

設定(Rancher)

Rancher 側の設定をしていきます。
「グローバル」⇒「セキュリティ」⇒「認証」から認証プロバイダ選択画面に遷移します。

image.png

Keycloak を選択し、以下を入力します。

表示名フィールド:givenName
ユーザー名フィールド:uid
UID フィールド:uid
グループ フィールド:member
Rancher APIホスト:Rancher のアクセスURL(デフォルト)
プライベートキー:SAML 鍵(署名鍵)でメモした秘密鍵
※以下の形式で入力する

-----BEGIN RSA PRIVATE KEY-----
※秘密鍵
-----END RSA PRIVATE KEY-----

CA Certificate:SAML 鍵(署名鍵)でメモした証明書
※以下の形式で入力する

-----BEGIN CERTIFICATE-----
※証明書
-----END CERTIFICATE-----

メタデータ:編集したメタデータファイル(descriptor.xml、ファイルから読み込んでも、中身をコピペしてもよい)

image.png

入力完了後、下段の「Keycloak による認証」をクリックしテストします。

image.png

別ウィンドウでログイン画面が表示されるので、作成したユーザ(radmin)でログインします。

image.png

ログイン画面が表示されていたウィンドウが閉じて、「認証」画面に Keycloak の設定が表示されるようになります。
※この状態ですでに設定は保存されています
※認証を外したい場合は、「アクセスコントロールを無効化」をクリックすると設定前の状態に戻ります。

image.png

最後にサイトアクセスの設定でグループを指定します。
「クラスターのメンバーと認証済み ユーザー、組織 を許可」をチェックし、右側のプルダウンリストから「admin」と「user」を追加します。

image.png

保存して完了です。
Rancher 側の SAML 設定は以上になります。

ログインしてみる

管理者でログイン

最後にログインして、設定を確認します。
ローカルのユーザをログアウトしてみると、ログイン画面に Keycloak 用のログインリンクが追加されています。

image.png

「Log in with Keycloak」をクリックすると設定の際にログインした情報(radmin)を元に SSO が適用され Rancher に自動ログインされると思います。

image.png

また、Keycloak へ未ログインだった場合には、Keycloak 側のログイン画面に遷移し、ログイン完了後に Rancher のダッシュボードに遷移します。

image.png

グループへロール割当て

radmin でログイン後、アクセス権の設定を行っていきます。
「セキュリティ」⇒「Groups」から「グローバルロールの割り当て」をクリックします。

image.png

以下で、設定を行います。

追加するグループ:/user
グローバル権限:User-Base にのみチェック

追加するグループ:/admin
グローバル権限:管理者、一般ユーザーにチェック

image.png

また、「Default」のプロジェクトに権限を割振ります。
クラスターを選択後、「Default」プロジェクト⇒「メンバー」⇒「メンバーを追加」をクリック。
以下で、メンバーを追加します。
メンバー:/user
Project 権限:メンバー

image.png

一般ユーザでログイン

Rancher / keycloak 共にログアウトし、今度は「ruser」でログインして確認します。
設定したクラスターの「Default」プロジェクトは操作できるのですが、Rancher の管理系の設定や、クラスターのノード情報、「System」プロジェクトの情報が見えなくなっているかと思います。

image.png

image.png

おわりに

Rancher の 2.1.0 から利用が可能となった Keycloak ですが、設定自体はお手軽にできるのではと思います。
今回は詳しく触れてはいないのですが、Rancher 自身の操作権限や各プロジェクトの利用権限も詳細に設定可能となっています。
設定していて、気を付ける点としては

  • グループの設定の際には、設定するユーザが設定対象のグループに参加している必要がある
  • Rancher をログアウトしても、Keycloak 側のセッションが残っていると、Rancher に再ログインの際に残っている Keycloak のセッションで自動でログインしてしまう
  • UID をちゃんと紐づけないと Rancher の管理者に紐づいてしまう場合がある

認証、権限は奥が深く、難しい・・・

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?