第4章 高度な概念
ここでは、Red Hat Single Sign-On サーバーのキーストアおよびトラストストアの設定、管理者アカウントの作成、利用可能な Red Hat Single Sign-On クライアント登録方法の概要、クラスタリング設定のガイダンスなどの追加設定について取り上げます。
4.1. Red Hat Single Sign-On テンプレートの Passthrough TLS Termination の要件およびデプロイ
4.1.1. デプロイメントの準備
cluster:admin ロールを持つユーザーとして OpenShift CLI にログインします。
新しいプロジェクトを作成します。
$ oc new-project sso-app-demo
view
ロールをデフォルト
のサービスアカウントに追加します。これにより、サービスアカウントが sso-app-demo 名前空間のすべてのリソースを表示できるようになります。これは、クラスターの管理に必要です。$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
4.1.2. Red Hat Single Sign-On サーバーの HTTPS および JGroups キーストアの作成
passthrough TLS termination を使用する Red Hat Single Sign-On アプリケーションテンプレートには、以下が必要です。
- https トラフィックの暗号化に使用される HTTPS キーストア
- クラスターのノード間の JGroups 通信の暗号化に使用される JGroups キーストア
- Red Hat Single Sign-On 要求のセキュリティー保護に使用される Red Hat Single Sign-On サーバートラストストア
Red Hat Single Sign-On for OpenShift イメージが適切にデプロイされる
re-encryption TLS termination を使用した Red Hat Single Sign-On アプリケーションテンプレートは、前述の HTTPS および JGroups キーストアおよび Red Hat Single Sign-On サーバートラストストアを事前に準備する 要求 も 期待 しません。テンプレートは、OpenShift の内部 サービス提供 x509 証明書シークレット を使用して HTTPS および JGroups キーストアを自動的に作成します。Red Hat Single Sign-On サーバートラストストアも自動的に作成されます。このファイルには、これらのクラスター証明書の作成に使用される /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt CA 証明書ファイルが含まれます。さらに、Red Hat Single Sign-On サーバーのトラストストアには、Java システムパスにある既知の信頼できる CA 証明書ファイルすべてが事前に入力されています。
openssl ツールキットは、HTTPS キーストアに署名する CA 証明書を生成し、Red Hat Single Sign-On サーバーのトラストストアを作成するのに使用します。Java Development Kit に含まれる パッケージの keytool を使用して、これらのキーストアの自己署名証明書を生成します。
実稼働環境の場合、Red Hat は、SSL 暗号化接続 (HTTPS) 用に検証された認証局 (CA) から購入した独自の SSL 証明書を使用することを推奨します。
自己署名証明書または購入した SSL 証明書でキーストアを作成する方法に関する詳細は、「SSL 暗号化キーおよび証明書の生成」を参照してください。
HTTPS キーストアを作成します。
CA 証明書を生成します。パスワードを選択し、忘れないようにしてください。以下の CA 証明書で証明書署名要求に署名する際に、同じパスワードを指定します。
$ openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
HTTPS キーストアの秘密鍵を生成する
mykeystorepass
をキーストアパスワードとして提供します。$ keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
HTTPS キーストアの証明書署名要求を生成します。
mykeystorepass
をキーストアパスワードとして提供します。$ keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
CA 証明書を使用して証明書署名要求に署名します。CA 証明書の生成 に使用されたパスワードを指定します。
$ openssl x509 -req -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
CA 証明書を HTTPS キーストアにインポートします。
mykeystorepass
をキーストアパスワードとして提供します。Trust this certificate? [no]:
の質問にyes
を返信します。$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
署名済み証明書署名要求を HTTPS キーストアにインポートします。
mykeystorepass
をキーストアパスワードとして提供します。$ keytool -import -file sso.crt -alias jboss -keystore keystore.jks
JGroups キーストアのセキュアキーを生成します。
キーストアパスワードとして パスワード
を指定します。
$ keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
CA 証明書を新しい Red Hat Single Sign-On サーバートラストストアにインポートします。
mykeystorepass
をトラストストアのパスワードとして指定します。Trust this certificate? [no]:
の質問に yes
を返信します。
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
4.1.3. Secret
OpenShift は シークレット と呼ばれるオブジェクトを使用して、パスワードやキーストアなどの機密情報を保持します。
前のセクション で生成された HTTPS および JGroups キーストアのシークレットと Red Hat Single Sign-On サーバートラストストアを作成します。
$ oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
これらのシークレットを、Red Hat Single Sign-On Pod の実行に使用される default のサービスアカウントにリンクします。
$ oc secrets link default sso-app-secret
4.1.4. OpenShift CLI を使用した Red Hat Single Sign-On パススルー TLS テンプレートのデプロイ
上記の キーストア および シークレット の作成後に、利用可能な passthrough TLS termination の一部を以下のようにデプロイします。
簡単にするために、次のコマンド の SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD、HTTPS_PASSWORD、JGROUPS_ENCRYPT_PASSWORD、および SSO_TRUSTSTORE_PASSWORD 変数の値が、Red Hat Single Sign-On アプリケーションテンプレート sso74-https の各パラメーターのデフォルト値に一致するように選択されています。
実稼働環境の場合、Red Hat は、Red Hat Single Sign-On サーバーの管理者ユーザーアカウント用に十分に強力なユーザー名とパスワード、および HTTPS および JGroups キーストア、および Red Hat Single Sign-On サーバーのトラストストアを生成する方法について、お客様の組織に特化したオンサイトポリシーを参照することを推奨します。。
テンプレートのプロビジョニング時に提供されるパスワードは、キーストアの作成時に提供されたパスワードと一致する必要があること に注意してください。異なるユーザー名とパスワードを使用する場合には、それぞれの テンプレートパラメーター の値をお使いの環境に合わせて変更します。
以下のコマンドでは、keytool (Java Development Kit に含まれる パッケージ) を使用して、証明書に関連する名前を確認できます。
$ keytool -v -list -keystore keystore.jks | grep Alias Enter keystore password: mykeystorepass Alias name: xpaas.ca Alias name: jboss
$ keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias Enter keystore password: password Alias name: secret-key
最後に、次のコマンドの SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD、SSO_REALM テンプレートパラメーターは任意です。
$ oc new-app --template=sso74-https \ -p HTTPS_SECRET="sso-app-secret" \ -p HTTPS_KEYSTORE="keystore.jks" \ -p HTTPS_NAME="jboss" \ -p HTTPS_PASSWORD="mykeystorepass" \ -p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \ -p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \ -p JGROUPS_ENCRYPT_NAME="secret-key" \ -p JGROUPS_ENCRYPT_PASSWORD="password" \ -p SSO_ADMIN_USERNAME="admin" \ -p SSO_ADMIN_PASSWORD="redhat" \ -p SSO_REALM="demorealm" \ -p SSO_TRUSTSTORE="truststore.jks" \ -p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \ -p SSO_TRUSTSTORE_SECRET="sso-app-secret" --> Deploying template "openshift/sso74-https" to project sso-app-demo Red Hat Single Sign-On 7.4.10.GA (Ephemeral with passthrough TLS) --------- An example Red Hat Single Sign-On 7 application. For more information about using this template, see https://github.com/jboss-openshift/application-templates. A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm via the Red Hat Single Sign-On console is admin/redhat. Please be sure to create the following secrets: "sso-app-secret" containing the keystore.jks file used for serving secure content; "sso-app-secret" containing the jgroups.jceks file used for securing JGroups communications; "sso-app-secret" containing the truststore.jks file used for securing Red Hat Single Sign-On requests. * With parameters: * Application Name=sso * Custom http Route Hostname= * Custom https Route Hostname= * Server Keystore Secret Name=sso-app-secret * Server Keystore Filename=keystore.jks * Server Keystore Type= * Server Certificate Name=jboss * Server Keystore Password=mykeystorepass * Datasource Minimum Pool Size= * Datasource Maximum Pool Size= * Datasource Transaction Isolation= * JGroups Secret Name=sso-app-secret * JGroups Keystore Filename=jgroups.jceks * JGroups Certificate Name=secret-key * JGroups Keystore Password=password * JGroups Cluster Password=yeSppLfp # generated * ImageStream Namespace=openshift * Red Hat Single Sign-On Administrator Username=admin * Red Hat Single Sign-On Administrator Password=redhat * Red Hat Single Sign-On Realm=demorealm * Red Hat Single Sign-On Service Username= * Red Hat Single Sign-On Service Password= * Red Hat Single Sign-On Trust Store=truststore.jks * Red Hat Single Sign-On Trust Store Password=mykeystorepass * Red Hat Single Sign-On Trust Store Secret=sso-app-secret * Container Memory Limit=1Gi --> Creating resources ... service "sso" created service "secure-sso" created service "sso-ping" created route "sso" created route "secure-sso" created deploymentconfig "sso" created --> Success Run 'oc status' to view your app.