gpe_mw_ansible.rh_sso_multi_realm
rh-sso-multi-realm
概要
この役割は、Red HatのOpenShift Container Platform (OCP) において、永続的な Red Hat Single Sign-On (RH-SSO) のインストールを提供することを目的としています。
また、このRH-SSOインストール内で、構成可能な数のSSO レルム の管理(作成と削除)を可能にします。
このロールは、次のような状況で価値があるかもしれません:
指導者主導のトレーニング (ILT)、ハッカソン、ワークショップ:
- RH-SSOを必要とするILTのX人の学生を考え、それぞれの学生に専用のレルムが割り当てられた中央のマルチレルムRH-SSOを提供します。
- 学生は、自分の割り当てられたレルムへの管理者資格情報を提供されます。
- このアプローチは、各学生が自分自身のRH-SSOをプロビジョニングする代替策よりも望ましいかもしれません。
RH-SSOの機能強化
- 学習目標の一部は以下の通りです:
- OCP上にRH-SSOをプロビジョニングするデモを行います。
- 特に、OCPのリンク文書を活用するRH-SSOバリアントを対象とします。
- 外部smtpプロバイダーとの統合を通じて、ユーザーの自己登録ワークフローを促進します。
- OAuth2 アクセス トークンと リフレッシュ トークンを使用したRH-SSOのREST管理APIの呼び出し。
- OCP上にRH-SSOをプロビジョニングするデモを行います。
- 学習目標の一部は以下の通りです:
注:このAnsibleロールは、まだリンクされたKeycloak-オペレーターを使用していません。主に、オペレーターの現在の実装においてヘルスチェックやリクエスト制限を設定できないためです。オペレーターに関連する現在のオープンJIRAのリストはここにあります。
参考
前提条件および要件
- あなたのローカルマシンにAnsibleがインストールされていることを確認してください。
- このAnsibleロールは、最小6GBのRAMと2CPUを持つリモートOCPクラスターの存在を前提としています。
- このAnsibleロールでは、あなたのローカルマシンで動作する
oc
クライアントを多用します。このoc
クライアントがローカル環境の$PATHにあり、OCP環境のバージョンに一致していることを確認してください。
ワイルドカード証明書
このAnsibleロールは、既存のOCPクラスターが正当な認証局(たとえばLetsEncrypt)が署名した証明書で構成されていることを前提としています。
注:Red Hatパートナーデモシステム(RHPDS)やRed Hatオープンパートナー支援ネットワーク(OPEN)から取得したOCPクラスターのワークショップには、LetsEncrypt証明書が付属しています。このセクションはスキップできます。
LetsEncryptのワイルドカード証明書を取得してOCPクラスターに適用するための非常に良いチutorialは以下にあります。
- 値段の付け方からSSL証明書を適用するまでのドキュメント。
RH-SSOのデプロイ
環境変数
次の環境変数を設定し、Ansibleを実行するローカル環境のシェルで使用します。 これらの環境変数はこのロール全体で使用されます。
以下を更新し、実行してください:
echo "export OCP_PROJECT_PREFIX=<あなたのイニシャル>" >> ~/.bashrc echo "export ocp_sso_admin_id=sso0" >> ~/.bashrc
次を実行します:
echo "export SSO_SITE_ADMIN_USERNAME=master" >> ~/.bashrc echo "export SSO_SITE_ADMIN_PASSWORD=master" >> ~/.bashrc echo "export rhsso_project=rhsso-$ocp_sso_admin_id" >> ~/.bashrc source ~/.bashrc
OCPワイルドカードDNSの設定
echo "export SUBDOMAIN_BASE=oc whoami --show-server | cut -d'.' -f 2,3,4,5 | cut -d':' -f 1
" >> ~/.bashrc
source ~/.bashrc
Ansibleのセットアップ
- このロールをインストールします:
$ ansible-galaxy install gpe_mw_ansible.rh_sso_multi_realm --force -p /etc/ansible/roles
- プレイブックを作成します:
$ echo "
- hosts: all
become: false
gather_facts: False
vars_files:
roles:
- gpe_mw_ansible.rh_sso_multi_realm
" > /tmp/rh_sso_multi_realm.yml
RH-SSOをプロビジョニングする
RH-SSOマルチレルムアプリケーションのOCP名前空間は、{{ocp_sso_admin_id}}というユーザーによって所有されます。 ユーザー{{ocp_sso_admin_id}}には、3scaleに割り当てられた制限とリクエストを管理するためのクラスタークォータが割り当てられます。
openshift
名前空間にImageStreamが存在することを確認します。- redhat-sso73-openshiftイメージストリームが必要です。
接続が存在しない場合は、次を実行します:
$ oc create -f https://raw.githubusercontent.com/jboss-container-images/redhat-sso-7-openshift-image/v7.4.0.GA/templates/sso74-image-stream.json -n openshift
- 次を実行します:
$ ansible-playbook -i localhost, -c local /tmp/rh_sso_multi_realm.yml \
-e"ocp_user_needs_quota=true" \
-e"ACTION=create" \
-e"SSO_SITE_ADMIN_USERNAME=$SSO_SITE_ADMIN_USERNAME" \
-e"SSO_SITE_ADMIN_PASSWORD=$SSO_SITE_ADMIN_PASSWORD" \
-e"admin_username=$ocp_sso_admin_id" \
-e"subdomain_base=$SUBDOMAIN_BASE"
- 新しくプロビジョニングされたRH-SSOのURLを参照する環境変数を設定します:
echo "export rhsso_hostname=$(oc get route sso -n rhsso-$ocp_sso_admin_id --template "{{.spec.host}}" -n rhsso-$ocp_sso_admin_id)" >> ~/.bashrc
source ~/.bashrc
- プロビジョニングが完了したら、新しいRH-SSOサーバーに関連付けられた証明書を表示します:
$ echo '' | openssl s_client -connect `oc get route sso -n $rhsso_project --template "{{.spec.host}}"`:443 | more
- あなたのOCPクラスターがLetsEncryptから署名されたワイルドカード証明書を使用してプロビジョニングされている場合、応答には次のような情報が含まれます:
...
subject=CN = master.3295.openshift.opentlc.com
issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
...
- OCPクラスターがLetsEncrypt(または他の正当な)認証局からプロビジョニングされ、ワイルドカード証明書が発行された場合、その詳細を以下のように表示できます:
$ curl -v -X GET "https://$rhsso_hostname/auth/realms/master/.well-known/openid-configuration" | python -m json.tool
RH-SSO管理コンソール
- Webブラウザを開き、
master
レルムのコンソールにアクセスします:
$ echo -en "\nhttps://$rhsso_hostname/auth/admin/master/console\n\n"
RH-SSOインスタンスをプロビジョニングした際に使用した$SSO_SITE_ADMIN_USERNAMEおよび$SSO_SITE_ADMIN_PASSWORD環境変数の値を使用して認証します。
RH-SSOサイト管理者として、全てのリソースにアクセスできます。
RH-SSOの削除
$ ansible-playbook -i localhost, -c local /tmp/rh_sso_multi_realm.yml \
-e"ACTION=remove" \
-e"subdomain_base=$SUBDOMAIN_BASE"
レルムの作成/削除
RH-SSOは複数のレルムを作成できます。 各レルムは他のすべてのレルムから独立しています。
このインストールセクションでは、さまざまなユースケース向けにレルムを自動的に作成するのを支援します。
SMTPプロバイダー
RH-SSOのレルムがメールを送信できるようにしたい場合が多いでしょう。
たとえば、このAnsibleロールの一部として構成されたgeneric realms
は、新しいユーザーがメールで提供されたリンクを通じて登録を確認する必要のあるユーザーサインアップフロー用に構成されています。
RH-SSOでは、SMTP設定は_レルム_の範囲で構成されます。 レルムをプロビジョニングする際に、次のAnsible変数を指定できます:
- smtp_host
- smtp_userid
- smtp_passwd
いくつかの無料プランを持つSMTPプロバイダーが以下に示されています:
- SocketLabs: 現在2000通/月のメールを提供する無料プランを提供。
- SendGrid: 現在100通/日のメールを送信できる無料プランを提供。
一般的なレルム
このAnsibleを介して、次の変数の値に基づいて構成可能な数のSSOレルムを作成できます:first_generic_realm
とlast_generic_realm
。
レルムの作成時にlast_generic_realm
の値が1未満の場合、一般的なレルムは作成されません。
これらの一般的なレルムの名前は、Ansible変数:「_realm_base_name_」をオーバーライドすることでカスタマイズできます。
各SSOレルムは、1人以上のユーザーがこのレルムのユーザーとして登録できるように有効になっています。 登録されたレルムユーザーのデフォルト動作は、彼らがレルムのフル管理者であることを意味します。 これはデモや学習シナリオにのみ適した動作です。
KIEレルム
レルムを作成する際に_variable _loadKieRealm_をtrueに設定すると、ビジネスおよび意思決定マネージャーのシナリオをサポートするための特別なレルムが作成されます。
このプロビジョニングされた_kieRealm_の詳細は次の通りです:
- realmId: kieRealm
- ログインURL: https://$rhsso_hostname/auth/admin/kieRealm/console
- レルム管理者ユーザーID: ssoRealmAdmin
- レルム管理者パスワード: pam
このレルムに登録されたすべてのユーザーの詳細は次のようにして特定できます:
$ cat templates/kie-realm.json | jq .users
CRWレルム
レルムを作成する際に_variable _loadCRWRealm_をtrueに設定すると、Red Hat Code Ready Workspacesをサポートするための特別なレルムcrwRealm
が作成されます。
- このプロビジョニングされた_crwRealm_の詳細は以下の通りです:
- realmId: crwRealm
- ログインURL: https://$rhsso_hostname/auth/admin/crwRealm/console
- 管理者ユーザーID: admin
- 管理者パスワード: admin
OpenShiftレルム
レルムを作成する際に_variable _loadOCPRealm_をtrueに設定すると、RH-SSOにocp-realm
というレルムが作成されます。
この目的は、OCP用の認証のためのリンクを提供することです。
このプロビジョニングされた_ocp-realm_の詳細は次の通りです:
- realmId: ocp-realm
- ログインURL: https://$rhsso_hostname/auth/admin/ocp-realm/console
- SSOクライアント: ocp-client
- 管理者ユーザーID: gpte-mgr
- 管理者パスワード: r3dh4t1!
- SSOユーザー: このレルムに関連付けられたユーザーの構成可能な数が作成されます:
start_ocp_user
とend_ocp_user
によります。 - このレルムの各ユーザーの名前は、値{{ocp_realm_user_base_name}}(デフォルト=
ocp
)で始まります。
OCP関連の役割: 役割はクラスター管理者によって割り当てる必要があります。
ocp-realm
をRH-SSO内でプロビジョニングした後、OCPのマスターノードでいくつかの追加手順を実行する必要があります。これらの手順は、{{new_app_output_dir}}/ocp-realm-suggestion.txtに詳細が記載されています。
master-config.xml
のIdentityProviderセクションでは、htpasswdセクションをocp-client設定にオーバーライドすることを忘れないでください。
レルムの作成
- 次の環境変数をシェルに設定し、その後、下記のAnsibleコマンドを実行します:
smtp_host=
smtp_userid=
smtp_passwd=
FIRST_GENERIC_REALM=1
LAST_GENERIC_REALM=1
realm_base_name=realm
loadKieRealm=false
loadCRWRealm=false
crw_redirect_url=""
loadOCPRealm=true
end_ocp_user=1
$ ansible-playbook -i localhost, -c local /tmp/rh_sso_multi_realm.yml \
-e"ACTION=realm_mgmt" \
-e"create_realms=true" \
-e"subdomain_base=$SUBDOMAIN_BASE" \
-e"smtp_host=$smtp_host" \
-e"smtp_passwd=$smtp_passwd" \
-e"smtp_userid=$smtp_userid" \
-e"SSO_SITE_ADMIN_USERNAME=$SSO_SITE_ADMIN_USERNAME" \
-e"SSO_SITE_ADMIN_PASSWORD=$SSO_SITE_ADMIN_PASSWORD" \
-e"admin_username=$ocp_sso_admin_id" \
-e"first_generic_realm=$FIRST_GENERIC_REALM" \
-e"last_generic_realm=$LAST_GENERIC_REALM" \
-e"realm_base_name=$realm_base_name" \
-e"loadKieRealm=$loadKieRealm" \
-e"loadCRWRealm=$loadCRWRealm" \
-e"crw_redirect_url=$crw_redirect_url" \
-e"loadOCPRealm=$loadOCPRealm" \
-e"end_ocp_user=$end_ocp_user" \
-e"rhsso_hostname=$rhsso_hostname"
- Ansible実行の終了時には、次のようなコンソールメッセージが出力されるはずです:
[rh-sso-multi-realm : Realm Rollout Complete]
ok: [localhost] => {
"msg": [
"create_realms: true",
"new_app_output_dir: /home/jbride/provisioning_output/3295.openshift.opentlc.com",
"start and end realms = 1 25"
]
}
- 作成された各レルムのjson表現は、上記のコメントに記載されたディレクトリで見つけることができます。
レルムの削除
$ ansible-playbook -i localhost, -c local /tmp/rh_sso_multi_realm.yml \
-e"ACTION=realm_mgmt" \
-e"first_generic_realm=$FIRST_GENERIC_REALM" \
-e"last_generic_realm=$LAST_GENERIC_REALM" \
-e"subdomain_base=$SUBDOMAIN_BASE" \
-e"SSO_SITE_ADMIN_USERNAME=$SSO_SITE_ADMIN_USERNAME" \
-e"SSO_SITE_ADMIN_PASSWORD=$SSO_SITE_ADMIN_PASSWORD" \
-e"admin_username=$ocp_sso_admin_id" \
-e"rhsso_hostname=$rhsso_hostname" \
-e"create_realms=false"
一般的なレルム: ユーザー登録
このラボのこのセクションは、<
このセクションの目的は、学生に以前にプロビジョニングされた一般的なSSOレルムのユーザーとして登録する方法を詳細に説明する指示を提供することです。
- 使用する特定のレルムに対応する環境変数を設定します(例:<realm名> = realm1...realm20):
$ echo "export rhsso_realm=<realm name>" >> ~/.bashrc
$ source ~/.bashrc
- Webブラウザを開き、ターゲットレルムのコンソールに移動します:
$ echo -en "\nhttps://$rhsso_hostname/auth/admin/$rhsso_realm/console\n\n"
登録
リンクをクリックします。登録フォームのすべてのフィールドを入力します。有効なメールを使用していることを確認してください。
登録
をクリックします。ブラウザが、メールとアカウントを確認する必要があることを示すページにリダイレクトされます。メールをチェックして、確認リクエストを確認します。
メール内で、
メールアドレスの確認
のリンクをクリックします。ブラウザはターゲットSSOレルムのホームページにリダイレクトされるはずです。
注意:この新しく登録されたレルムユーザーは、レルムのすべての設定に管理アクセス権を持っています。
- あなたのローカルマシンのターミナルウィンドウで、この新しいレルムユーザーに特有の環境変数を設定します:
$ realmUserId=<変更してください>
$ realmPasswd=<変更してください>
- ブラウザで、あなたのレルムの
クライアント
に移動します。
これは、OAuth2用語の文脈でのクライアントは、_Resource Owner_の代理で保護されたリソースへのアクセスを要求するアプリケーションです。
RH-SSOはカスタム_クライアント_の作成を許可します。
このラボでは、出発点としてデフォルトのクライアントの1つを使用します。デフォルトのSOクライアントは、異なるOAuth2とOIDCプロトコルのために構成されています。
realm-management
の確認
これは、後のラボセクションでセキュアなバックエンドサービスに関連付けられる_be()
セキュアなバックエンドサービスは、特にRed Hat SSOへのログインを開始しませんが、有効なIDトークンが必要です。
admin-cli
の確認
このラボでは、admin-cli
という第二のクライアントも定義します。admin-cli
はOAuth2クライアントです。このラボの後で、テスト目的でadmin-cli
を使用します。
Red Hat Single Sign-On Multi-Realm Automated Provisioning
ansible-galaxy install gpe_mw_ansible.rh_sso_multi_realm