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の呼び出し。

注:この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_realmlast_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_userend_ocp_userによります。
    • このレルムの各ユーザーの名前は、値{{ocp_realm_user_base_name}}(デフォルト=ocp)で始まります。
  • OCP関連の役割: 役割はクラスター管理者によって割り当てる必要があります。

ocp-realmをRH-SSO内でプロビジョニングした後、OCPのマスターノードでいくつかの追加手順を実行する必要があります。これらの手順は、{{new_app_output_dir}}/ocp-realm-suggestion.txtに詳細が記載されています。 master-config.xmlIdentityProviderセクションでは、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"

一般的なレルム: ユーザー登録

このラボのこのセクションは、<>セクションに従って、1つ以上の一般的なSSOレルムがすでにプロビジョニングされていることを前提としています。

このセクションの目的は、学生に以前にプロビジョニングされた一般的な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
ライセンス
Unknown
ダウンロード
89
所有者
Ansible roles to support RHT middleware labs