4.4. Maven バイナリーからの OpenShift アプリケーションの作成と、Red Hat Single Sign-On を使用した保護
OpenShift に既存のアプリケーションをデプロイするには、バイナリーソースの機能を使用できます。
4.4.1. EAP 6.4 / 7.1 JSP サービス呼び出しアプリケーションのバイナリービルドをデプロイし、Red Hat Single Sign-On を使用して保護 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、app-jee-jsp および service-jee-jaxrs クイックスタートの両方を使用して、Red Hat Single Sign-On を使用して認証する EAP 6.4 / 7.1 JSP サービスアプリケーションをデプロイします。
前提条件
- Red Hat Single Sign-On for OpenShift イメージは、以前に以下のテンプレートのいずれかを使用してデプロイされています。
- sso76-ocp3-postgresql
- sso76-ocp3-postgresql-persistent
- sso76-ocp3-x509-postgresql-persistent
- sso76-ocp4-postgresql
- sso76-ocp4-postgresql-persistent
- sso76-ocp4-x509-postgresql-persistent
4.4.1.1. EAP 6.4 / 7.1 JSP アプリケーションの Red Hat Single Sign-On レルム、ロール、およびユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
EAP 6.4 / 7.1 JSP サービスアプリケーションには、Red Hat Single Sign-On を使用して認証できるように専用の Red Hat Single Sign-On レルム、ユーザー名、およびパスワードが必要です。Red Hat Single Sign-On for OpenShift イメージをデプロイした後に、以下の手順を実行します。
Red Hat Single Sign-On レルムの作成
Red Hat Single Sign-On サーバーの管理コンソールにログインします。
https://secure-sso-sso-app-demo.openshift.example.com/auth/admin
- カーソルをサイドバーの上部にあるレルム名前空間 (デフォルトは Master) の上に置き、Add Realm をクリックします。
-
レルム名を入力して (この例では
demoを使用)、Create をクリックします。
公開鍵のコピー
新規に作成された demo レルムで Keys タブをクリックしてから Active タブを選択し、生成したタイプ RSA の公開鍵をコピーします。
OpenShift イメージバージョン 7.6.11 向けの Red Hat Single Sign-On は、デフォルトで複数のキーを生成します(例: HS256、RS256、AES )。OpenShift 7.6.11 イメージの Red Hat Single Sign-On の公開鍵情報をコピーするには、Keys タブをクリックしてから Active タブを選択し、キーテーブルでその行の Public key ボタンをクリックします。ここで、キーのタイプは RSA に一致します。次に、表示されるポップアップウィンドウの内容を選択し、コピーします。
Red Hat Single Sign-On 対応 EAP 6.4 / 7.1 JSP アプリケーションを 後でデプロイ するには、公開鍵に関する情報が必要になります。
Red Hat Single Sign-On のロールの作成
service-jee-jaxrs クイックスタートはサービスによって 3 つのエンドポイントを公開します。
-
public- 認証は必要ありません。 -
secured-userロールを持つユーザーが呼び出すことができます。 -
admin-adminロールを持つユーザーが呼び出すことができます。
Red Hat Single Sign-On で user ロールおよび admin ロールを作成します。これらのロールは Red Hat Single Sign-On アプリケーションユーザーに割り当てられ、ユーザーアプリケーションへのアクセスを認証します。
Configure サイドバーの Roles をクリックし、このレルムのロールをリスト表示します。
注記これは新しいレルムであるため、デフォルト (
offline_accessおよびuma_authorization) ロールのみが必要です。- Add Role をクリックします。
-
ロール名 (
user) を入力し、Save をクリックします。
admin ロールについてこれらの手順を繰り返します。
Red Hat Single Sign-On レルム管理ユーザーの作成
- Manage サイドバーで Users をクリックし、レルムのユーザー情報を表示します。
- Add User をクリックします。
-
有効な Username を入力し (この例ではユーザー
appuserを使用)、Save をクリックします。 ユーザー設定を編集します。
-
ユーザースペースの Credentials タブをクリックして、ユーザーのパスワードを入力します (この例ではパスワード
apppasswordを使用しています)。 - Temporary Password オプションを Off に設定して、後でパスワードの変更を要求しないようにし、Reset Password をクリックしてユーザーパスワードを設定します。ポップアップウィンドウが表示され、確認を求められます。
-
ユーザースペースの Credentials タブをクリックして、ユーザーのパスワードを入力します (この例ではパスワード
4.4.1.2. レルム管理ユーザーにユーザーロールを割り当てます リンクのコピーリンクがクリップボードにコピーされました!
以前に作成した appuser を、Red Hat Single Sign-On ロール user と関連付けるには、以下の手順を実行します。
-
Role Mappings をクリックし、レルムおよびクライアントロール設定をリスト表示します。Available Roles で、以前に作成した
userロールを選択し、Add selected> をクリックします。 Client Roles をクリックし、リストから realm-management エントリーを選択し、Available Roles のリストで各レコードを選択します。
注記Ctrl キーを保持し、最初の
偽装エントリーを同時にクリックすることで、複数の項目を一度に選択できます。Ctrl キーとマウスの左ボタンを押したままにしておくと、リストの最後をview-clientsエントリーに移動し、各レコードが選択されていることを確認します。- Add selected> をクリックしてロールをクライアントに割り当てます。
4.4.1.3. EAP 6.4 / 7.1 JSP アプリケーションの OpenShift デプロイメント向けの Red Hat Single Sign-On 認証の準備 リンクのコピーリンクがクリップボードにコピーされました!
手順
EAP 6.4 / 7.1 JSP アプリケーションの新しいプロジェクトを作成します。
$ oc new-project eap-app-demoviewロールをデフォルトのサービスアカウントに追加します。これにより、サービスアカウントがeap-app-demo名前空間のすべてのリソースを表示できるようになります。これは、クラスターの管理に必要です。$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):defaultEAP テンプレートには、SSL キーストアと JGroups キーストア が必要です。この例では、Java Development Kit に含まれるパッケージの
keytoolを使用して、これらのキーストアの自己署名証明書を生成します。SSL キーストアのセキュアなキーを生成します (この例では、キーストアのパスワードとして
passwordを使用します)。$ keytool -genkeypair \ -dname "CN=secure-eap-app-eap-app-demo.openshift.example.com" \ -alias https \ -storetype JKS \ -keystore eapkeystore.jksJGroups キーストアに、セキュリティーで保護されたキーを生成します (この例では、キーストアのパスワードとして
passwordを使用します)。$ keytool -genseckey \ -alias jgroups \ -storetype JCEKS \ -keystore eapjgroups.jceksSSL および JGroup キーストアファイルで、OpenShift シークレットの EAP 6.4 / 7.1 を生成します。
$ oc create secret generic eap-ssl-secret --from-file=eapkeystore.jks$ oc create secret generic eap-jgroup-secret --from-file=eapjgroups.jceksEAP アプリケーションシークレットを
defaultサービスアカウントに追加します。$ oc secrets link default eap-ssl-secret eap-jgroup-secret
4.4.1.4. EAP 6.4 / 7.1 JSP アプリケーションのバイナリービルドのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
手順
ソースコードのクローンを作成します。
$ git clone https://github.com/keycloak/keycloak-quickstarts.gitservice-jee-jaxrs アプリケーションと app-jee-jsp アプリケーションの両方をビルドします。
service-jee-jaxrsアプリケーションをビルドします。$ cd keycloak-quickstarts/service-jee-jaxrs/$ mvn clean package -DskipTests [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Keycloak Quickstart: service-jee-jaxrs 3.1.0.Final [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.153 s [INFO] Finished at: 2017-06-26T12:06:12+02:00 [INFO] Final Memory: 25M/241M [INFO] ------------------------------------------------------------------------maven-enforcer-pluginプラグインのapp-jee-jsp/config/keycloak.json要件を コメントアウト し、app-jee-jspアプリケーションをビルドします。service-jee-jaxrs]$ cd ../app-jee-jsp/app-jee-jsp]$ sed -i /\<executions\>/s/^/\<\!--/ pom.xmlapp-jee-jsp]$ sed -i '/\(<\/executions>\)/a\-->' pom.xmlapp-jee-jsp]$ mvn clean package -DskipTests [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Keycloak Quickstart: app-jee-jsp 3.1.0.Final [INFO] ------------------------------------------------------------------------ ... [INFO] Building war: /tmp/github/keycloak-quickstarts/app-jee-jsp/target/app-jsp.war [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.018 s [INFO] Finished at: 2017-06-26T12:22:25+02:00 [INFO] Final Memory: 35M/310M [INFO] ------------------------------------------------------------------------重要app-jee-jsp クイックスタートではアダプターの設定が必要で、アダプター設定ファイル (
keycloak.json) がクイックスタートのルートのconfig/ディレクトリーにあり、クイックスタートを正常にビルドする必要があります。ただし、この例では、EAP 6.4 / 7.1 for OpenShift イメージで利用可能な選択された環境変数を使用して後でアダプターを設定するため、現時点でkeycloak.jsonアダプター設定ファイルの形式を指定する必要はありません。
ローカルファイルシステムでディレクトリー構造を準備します。
メインのバイナリービルドディレクトリーの deployments/ サブディレクトリーにあるアプリケーションアーカイブは、OpenShift でビルドされるイメージの 標準のデプロイメントディレクトリー に直接コピーされます。アプリケーションをデプロイするには、web アプリケーションデータが含まれるディレクトリー階層が正しく設定される必要があります。
ローカルファイルシステム上にバイナリービルド用のメインディレクトリーと、そのディレクトリー内に deployments/ サブディレクトリーを作成します。service-jee-jaxrs および app-jee-jsp クイックスタートの両方のビルドされた WAR アーカイブを deployments/ サブディレクトリーにコピーします。
app-jee-jsp]$ ls config pom.xml README.md src targetapp-jee-jsp]$ mkdir -p sso-eap7-bin-demo/deploymentsapp-jee-jsp]$ cp target/app-jsp.war sso-eap7-bin-demo/deployments/app-jee-jsp]$ cp ../service-jee-jaxrs/target/service.war sso-eap7-bin-demo/deployments/app-jee-jsp]$ tree sso-eap7-bin-demo/ sso-eap7-bin-demo/ |__ deployments |__ app-jsp.war |__ service.war 1 directory, 2 files注記標準の deployments ディレクトリーの場所は、アプリケーションのデプロイに使用された基礎となるベースイメージによって異なります。以下の表を参照してください。
Expand 表4.1 デプロイメントディレクトリーの標準的な場所 基礎となるベースイメージの名前 デプロイメントディレクトリーの標準的な場所 EAP for OpenShift 6.4 and 7.1
$JBOSS_HOME/standalone/deployments
Java S2I for OpenShift
/deployments
JWS for OpenShift
$JWS_HOME/webapps
EAP 6.4 / 7.1 イメージのイメージストリームを特定します。
$ oc get is -n openshift | grep eap | cut -d ' ' -f 1 jboss-eap64-openshift jboss-eap71-openshift
イメージストリームおよびアプリケーション名を指定して、新しいバイナリービルドを作成します。
注記--image-stream=jboss-eap71-openshiftパラメーターを、以下の oc コマンドの--image-stream=jboss-eap64-openshiftに置き換え、JBoss EAP 6.4 for OpenShift イメージに JSP アプリケーションをデプロイします。$ oc new-build --binary=true \ --image-stream=jboss-eap71-openshift \ --name=eap-app --> Found image 31895a4 (3 months old) in image stream "openshift/jboss-eap71-openshift" under tag "latest" for "jboss-eap71-openshift" JBoss EAP 7.4 ------------- Platform for building and running Jakarta EE applications on JBoss EAP 7.4 Tags: builder, javaee, eap, eap7 * A source build using binary input will be created * The resulting image will be pushed to image stream "eap-app:latest" * A binary build was created, use 'start-build --from-dir' to trigger a new build --> Creating resources with label build=eap-app ... imagestream "eap-app" created buildconfig "eap-app" created --> Successバイナリービルドを開始します。直前の手順で 作成したバイナリービルドのメインディレクトリーを OpenShift ビルドのバイナリー入力が含まれるディレクトリーとして使用するよう
oc実行ファイルに指示します。app-jee-jsp の作業ディレクトリーで、次のコマンドを実行します。app-jee-jsp]$ oc start-build eap-app \ --from-dir=./sso-eap7-bin-demo/ \ --follow Uploading directory "sso-eap7-bin-demo" as binary input for the build ... build "eap-app-1" started Receiving source from STDIN as archive ... Copying all war artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment... Copying all ear artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment... Copying all rar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment... Copying all jar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment... Copying all war artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment... '/home/jboss/source/deployments/app-jsp.war' -> '/opt/eap/standalone/deployments/app-jsp.war' '/home/jboss/source/deployments/service.war' -> '/opt/eap/standalone/deployments/service.war' Copying all ear artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment... Copying all rar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment... Copying all jar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment... Pushing image 172.30.82.129:5000/eap-app-demo/eap-app:latest ... Pushed 6/7 layers, 86% complete Pushed 7/7 layers, 100% complete Push successfulビルドに基づいて新規の OpenShift アプリケーションを作成します。
$ oc new-app eap-app --> Found image 6b13d36 (2 minutes old) in image stream "eap-app-demo/eap-app" under tag "latest" for "eap-app" eap-app-demo/eap-app-1:aa2574d9 ------------------------------- Platform for building and running Jakarta EE applications on JBoss EAP 7.4 Tags: builder, javaee, eap, eap7 * This image will be deployed in deployment config "eap-app" * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "eap-app" * Other containers can access this service through the hostname "eap-app" --> Creating resources ... deploymentconfig "eap-app" created service "eap-app" created --> Success Run 'oc status' to view your app.現在の名前空間で EAP 6.4 / 7.1 JSP アプリケーションの実行中のコンテナーをすべて停止します。
$ oc get dc -o name deploymentconfig/eap-app$ oc scale dc/eap-app --replicas=0 deploymentconfig "eap-app" scaledデプロイメントの前に EAP 6.4 / 7.1 JSP アプリケーションをさらに設定します。
Red Hat Single Sign-On サーバーインスタンスに関する適切な詳細でアプリケーションを設定します。
警告以下の SSO_PUBLIC_KEY 変数の値を、コピー された
demoレルムの RSA 公開鍵の実際の内容に置き換えるようにしてください。$ oc set env dc/eap-app \ -e HOSTNAME_HTTP="eap-app-eap-app-demo.openshift.example.com" \ -e HOSTNAME_HTTPS="secure-eap-app-eap-app-demo.openshift.example.com" \ -e SSO_DISABLE_SSL_CERTIFICATE_VALIDATION="true" \ -e SSO_USERNAME="appuser" \ -e SSO_PASSWORD="apppassword" \ -e SSO_REALM="demo" \ -e SSO_URL="https://secure-sso-sso-app-demo.openshift.example.com/auth" \ -e SSO_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkdhXyKx97oIoO6HwnV/MiX2EHO55Sn+ydsPzbjJevI5F31UvUco9uA8dGl6oM8HrnaWWv+i8PvmlaRMhhl6Xs68vJTEc6d0soP+6A+aExw0coNRp2PDwvzsXVWPvPQg3+iytStxu3Icndx+gC0ZYnxoRqL7rY7zKcQBScGEr78Nw6vZDwfe6d/PQ6W4xVErNytX9KyLFVAE1VvhXALyqEM/EqYGLmpjw5bMGVKRXnhmVo9E88CkFDH8E+aPiApb/gFul1GJOv+G8ySLoR1c8Y3L29F7C81odkVBp2yMm3RVFIGSPTjHqjO/nOtqYIfY4Wyw9mRIoY5SyW7044dZXRwIDAQAB" \ -e SSO_SECRET="0bb8c399-2501-4fcd-a183-68ac5132868d" deploymentconfig "eap-app" updatedSSL および JGroups キーストアの両方の詳細を使用してアプリケーションを設定します。
$ oc set env dc/eap-app \ -e HTTPS_KEYSTORE_DIR="/etc/eap-secret-volume" \ -e HTTPS_KEYSTORE="eapkeystore.jks" \ -e HTTPS_PASSWORD="password" \ -e JGROUPS_ENCRYPT_SECRET="eap-jgroup-secret" \ -e JGROUPS_ENCRYPT_KEYSTORE_DIR="/etc/jgroups-encrypt-secret-volume" \ -e JGROUPS_ENCRYPT_KEYSTORE="eapjgroups.jceks" \ -e JGROUPS_ENCRYPT_PASSWORD="password" deploymentconfig "eap-app" updated先に作成した SSL および JGroups のシークレット両方に対して OpenShift ボリュームを定義します。
$ oc volume dc/eap-app --add \ --name="eap-keystore-volume" \ --type=secret \ --secret-name="eap-ssl-secret" \ --mount-path="/etc/eap-secret-volume" deploymentconfig "eap-app" updated$ oc volume dc/eap-app --add \ --name="eap-jgroups-keystore-volume" \ --type=secret \ --secret-name="eap-jgroup-secret" \ --mount-path="/etc/jgroups-encrypt-secret-volume" deploymentconfig "eap-app" updatedアプリケーションのデプロイメント設定を、
defaultの OpenShift サービスアカウントでアプリケーション Pod を実行するように設定します (デフォルト設定)。$ oc patch dc/eap-app --type=json \ -p '[{"op": "add", "path": "/spec/template/spec/serviceAccountName", "value": "default"}]' "eap-app" patched
変更されたデプロイメント設定を使用して EAP 6.4 / 7.1 JSP アプリケーションのコンテナーをデプロイします。
$ oc scale dc/eap-app --replicas=1 deploymentconfig "eap-app" scaledサービスをルートとして公開します。
$ oc get svc -o name service/eap-app$ oc get route No resources found.$ oc expose svc/eap-app route "eap-app" exposed$ oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD eap-app eap-app-eap-app-demo.openshift.example.com eap-app 8080-tcp None
4.4.1.5. アプリケーションにアクセスします。 リンクのコピーリンクがクリップボードにコピーされました!
URL http://eap-app-eap-app-demo.openshift.example.com/app-jsp を使用して、ブラウザーでアプリケーションにアクセスします。次のイメージのような出力が表示されます。
手順
アプリケーションをテストするには、以下を実行します。
INVOKE PUBLIC ボタンをクリックして、認証を必要としない
publicエンドポイントにアクセスします。Message: public 出力が表示されるはずです。
LOGIN ボタンをクリックして、ユーザー認証用に
demoレルムに対して Red Hat Single Sign-On サーバーインスタンスにリダイレクトされます。以前に設定した Red Hat Single Sign-On ユーザーのユーザー名とパスワード (
appuser/apppassword) を指定します。Log in をクリックします。以下のイメージで説明されているように、アプリケーションの変更を確認できます。
セキュリティー保護されたエンドポイントにアクセスするには、INVOKE SECURED ボタンをクリックします。Message: secured 出力が表示されるはずです。
INVOKE ADMIN ボタンをクリックして
adminエンドポイントにアクセスします。403 Forbidden 出力が表示されるはずです。
注記adminエンドポイントでは、adminRed Hat Single Sign-On ロールを持つユーザーが適切に呼び出す必要があります。appuserへのアクセスは、userロール権限のみで禁止され、セキュリティー保護されたエンドポイントへのアクセスが可能になります。
手順
appuser を Red Hat Single Sign-On ロール admin に追加するには、以下の手順を実行します。
Red Hat Single Sign-On サーバーのインスタンスの管理コンソールにアクセスします。
https://secure-sso-sso-app-demo.openshift.example.com/auth/admin.
-
Manage サイドバーで Users をクリックし、
demoレルムのユーザー情報を表示します。 - View all users ボタンをクリックします。
- appuser の ID リンクをクリックします。あるいは、Actions 列の Edit ボタンをクリックします。
- Role Mappings タブをクリックします。
-
Realm Roles 行の Available Roles リストから
adminエントリーを選択します。 -
Add selected> ボタンをクリックし、
adminロールをユーザーに追加します。 EAP 6.4 / 7.1 JSP サービスアプリケーションに戻ります。
http://eap-app-eap-app-demo.openshift.example.com/app-jsp.
-
LOGOUT ボタンをクリックして、
appuserのロールマッピングを再読み込みします。 -
再度 LOGIN ボタンをクリックし、プロバイダー
appuser認証情報をクリックします。 再度 INVOKE ADMIN ボタンをクリックします。
Message: admin というメッセージが表示されるはずです。