はじめに
本記事では、Windows PC 上の VirtualBox に RHEL 9.x をインストールし、Podman を使って IBM Verify Identity Access(IVIA)11.0.3 のコンテナ版を構築したので、そのときの手順を紹介します。
PoC・検証用途を想定した構成です。
本記事の作業は IBM Bob を使って実施しました。
IBM Bob は IBM が提供する AI コーディングアシスタントです。構築手順の計画策定、コマンドのトラブルシューティング、設定ファイルの作成、そしてこの記事の執筆まで、一連の作業を IBM Bob と対話しながら進めました。セットアップ中に発生した問題(SELinux ラベル、ポートマッピング、DNS 解決の問題等)も IBM Bob が原因を特定し、対処方法を提案してくれました。
Podman の利用は初めてだったのですが、IBM Bob を利用することで構成することができました。
構築にあたって、実行した各種コマンド、構成パラメータも、ほぼ IBM Bob が準備をしてくれたおかげで、パスワードとトラブルシューティングに記載した項目ぐらいで、それも大部分は自分で修復してくれたので簡単に構成し、それを記事にすることができました。
構成概要
Windows PC
└── VirtualBox
└── RHEL 9.8 (192.168.102.110)
└── Podman
├── ivia-config (LMI管理画面 :9443)
├── ivia-webseal (WebSEAL :9445)
├── ivia-runtime (AAC/Federation :9444)
├── ivia-dsc (分散セッションキャッシュ :9446)
└── ivia-db (PostgreSQL :5432)
ネットワーク構成
| アダプター | 種別 | 用途 |
|---|---|---|
| enp0s3 | NAT | インターネット接続(icr.io へのアクセス等) |
| enp0s8 | ホストオンリー | Windows PC から VM への SSH・LMI アクセス |
アクセス先
| サービス | URL |
|---|---|
| LMI(管理画面) | https://192.168.102.110:9443/ |
| WebSEAL | https://192.168.102.110:9445/ |
タスク 0: VirtualBox + RHEL VM のセットアップ
VM スペック
| 項目 | 値 |
|---|---|
| メモリ | 16 GB 以上 |
| vCPU | 4 以上 |
| ディスク | 100 GB |
| OS | RHEL 9.8 (Plow) |
ネットワーク設定
VirtualBox の VM 設定でアダプターを 2 枚構成にします。
- アダプター 1: NAT
- アダプター 2: ホストオンリーアダプター
サブスクリプション登録
# Red Hat Developer アカウントで登録(無償)
sudo subscription-manager register \
--username <RedHat_アカウント> \
--password <パスワード> \
--auto-attach
# システムを最新化
sudo dnf update -y
VirtualBox Guest Additions について
VirtualBox Guest Additions の構成はできませんでしたが、PoC用途のため SSH で操作すれば十分と判断し、VirtualBox Guest Additions は構成せずに進めることにしました。
VirtualBox 7.1.6 + RHEL 9.8 の組み合わせだったためか from_timer() API の処理で Guest Additions のビルドが失敗していました。
タスク 1: ホスト前提条件の整備
Podman と podman-compose のインストール
sudo dnf install -y podman podman-compose
podman --version # 5.8.2
podman-compose --version # 1.5.0
SELinux の確認
getenforce # Enforcing であることを確認(このまま運用)
SELinux は Enforcing のまま運用します。後述のボリュームマウントに :z を付けることで対応します。
DNS の設定(VPN 環境では必須)
環境によっては、VPN の DNS が icr.io を解決できないことがあります。この手順では、Google DNS を追加します。
sudo nmcli connection modify enp0s3 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.ignore-auto-dns yes
sudo nmcli connection up enp0s3
# 確認
nslookup icr.io # 169.60.98.83 等が返ればOK
ファイアウォールの設定
LMI, WebSEAL などで利用するポートへの接続を許可します。構成当初の計画では 9445 ポートはありませんでしたが、処理を進める上で必要になり 9445 も追加しています。
sudo firewall-cmd --add-port=9443/tcp --permanent # LMI
sudo firewall-cmd --add-port=9445/tcp --permanent # WebSEAL
sudo firewall-cmd --add-port=9444/tcp --permanent # AAC Runtime
sudo firewall-cmd --add-port=9446/tcp --permanent # DSC
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
時刻同期の確認
VirtualBox ゲストは時刻を合わせるため、chronyd を確認します。
sudo systemctl enable --now chronyd
sudo chronyc makestep
timedatectl status # "NTP service: active" を確認
IVIA コンテナイメージの取得
icr.io/ivia/ から IVIA イメージを取得します。
sudo podman pull icr.io/ivia/ivia-config:latest
sudo podman pull icr.io/ivia/ivia-wrp:latest
sudo podman pull icr.io/ivia/ivia-runtime:latest
sudo podman pull icr.io/ivia/ivia-dsc:latest
sudo podman pull icr.io/ivia/ivia-postgresql:latest
# 確認
sudo podman images | grep ivia
取得したコンテナイメージは、それぞれ以下のサイズでした。
| イメージ | サイズ |
|---|---|
| ivia-config | 1.81 GB |
| ivia-runtime | 1.28 GB |
| ivia-wrp | 822 MB |
| ivia-dsc | 700 MB |
| ivia-postgresql | 258 MB |
タスク 2: Docker Compose ファイルの作成
作業ディレクトリの作成
mkdir -p ~/ivia-poc/ivia-volume ~/ivia-poc/pgdata
chmod 777 ~/ivia-poc/ivia-volume ~/ivia-poc/pgdata
# SELinux ラベルを設定(これをしないとコンテナがボリュームを読めない)
sudo chcon -Rt svirt_sandbox_file_t ~/ivia-poc/ivia-volume
.env ファイルの作成
cat > ~/ivia-poc/.env << 'EOF'
# IVIA イメージバージョン
IVIA_VERSION=latest
# 設定コンテナ(LMI)
CONFIG_HTTPS_PORT=9443
ADMIN_PASSWORD=<管理者パスワードを設定>
# WebSEAL
WEBSEAL_INSTANCE_NAME=default
WEBSEAL_HTTPS_PORT=9445
# AAC Runtime
AAC_HTTPS_PORT=9444
# DSC
DSC_PORT=9446
# PostgreSQL
POSTGRES_DB=ivia
POSTGRES_USER=ivia
POSTGRES_PASSWORD=<DBパスワードを設定>
# タイムゾーン
TIMEZONE=Asia/Tokyo
EOF
docker-compose.yaml の作成
cat > ~/ivia-poc/docker-compose.yaml << 'EOF'
version: "3.8"
services:
ivia-db:
image: icr.io/ivia/ivia-postgresql:${IVIA_VERSION}
container_name: ivia-db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data:z
networks:
- ivia-net
ivia-config:
image: icr.io/ivia/ivia-config:${IVIA_VERSION}
container_name: ivia-config
restart: unless-stopped
environment:
ADMIN_PWD: ${ADMIN_PASSWORD}
TIMEZONE: ${TIMEZONE}
ports:
- "9443:9443"
volumes:
- ./ivia-volume:/var/shared:z
depends_on:
- ivia-db
networks:
- ivia-net
ivia-dsc:
image: icr.io/ivia/ivia-dsc:${IVIA_VERSION}
container_name: ivia-dsc
restart: unless-stopped
environment:
INSTANCE: "1"
TIMEZONE: ${TIMEZONE}
ports:
- "${DSC_PORT}:9446"
volumes:
- ./ivia-volume:/var/shared:z
depends_on:
- ivia-config
networks:
- ivia-net
ivia-webseal:
image: icr.io/ivia/ivia-wrp:${IVIA_VERSION}
container_name: ivia-webseal
restart: unless-stopped
environment:
INSTANCE: ${WEBSEAL_INSTANCE_NAME}
TIMEZONE: ${TIMEZONE}
ports:
- "${WEBSEAL_HTTPS_PORT}:9443"
volumes:
- ./ivia-volume:/var/shared:z
depends_on:
- ivia-config
networks:
- ivia-net
ivia-runtime:
image: icr.io/ivia/ivia-runtime:${IVIA_VERSION}
container_name: ivia-runtime
restart: unless-stopped
environment:
TIMEZONE: ${TIMEZONE}
ports:
- "${AAC_HTTPS_PORT}:9444"
volumes:
- ./ivia-volume:/var/shared:z
depends_on:
- ivia-db
- ivia-webseal
- ivia-dsc
networks:
- ivia-net
networks:
ivia-net:
driver: bridge
EOF
重要: WebSEAL のポートマッピング
WebSEAL コンテナは内部で 9443 ポートでリッスンしています(443 ではありません)。
そのため docker-compose.yaml のポートマッピングは ${WEBSEAL_HTTPS_PORT}:9443 と指定します。
9445:443 と指定すると接続できません。
重要: /etc/hosts にコンテナ名を追加しない
/etc/hosts に 127.0.0.1 ivia-db のようなエントリを追加すると、コンテナ内からの名前解決が 127.0.0.1 になり Runtime Database への接続が失敗します。
コンテナ間の名前解決は Podman の内部 DNS に任せてください。
タスク 3: コンテナの起動
cd ~/ivia-poc
sudo podman-compose up -d
# 起動確認
sudo podman ps
全コンテナが Up 状態になることを確認します。
CONTAINER ID IMAGE PORTS NAMES
xxxxxxxxxxxx icr.io/ivia/ivia-postgresql:latest 5432/tcp ivia-db
xxxxxxxxxxxx icr.io/ivia/ivia-config:latest 0.0.0.0:9443->9443/tcp ivia-config
xxxxxxxxxxxx icr.io/ivia/ivia-dsc:latest 0.0.0.0:9446->9446/tcp ivia-dsc
xxxxxxxxxxxx icr.io/ivia/ivia-wrp:latest 0.0.0.0:9445->9443/tcp ivia-webseal
xxxxxxxxxxxx icr.io/ivia/ivia-runtime:latest 0.0.0.0:9444->9444/tcp ivia-runtime
起動完了の確認
ivia-config の起動には 2〜3 分かかります。以下で起動完了を確認します。
sudo podman logs ivia-config --tail 3
# "The default server is ready to run a smarter planet." が表示されれば OK
ブラウザで https://192.168.102.110:9443/ にアクセスして LMI のログイン画面が表示されれば成功です。
タスク 4: LMI による初期設定
① ライセンス同意とパスワード設定
初回アクセス時にライセンス同意画面が表示されます。同意して管理者パスワードを設定し、「Complete Setup」をクリックします。
② Runtime Database の設定
System → Database Configuration → Runtime Database タブ
| 項目 | 値 |
|---|---|
| Type | PostgreSQL |
| Address | ivia-db |
| Port | 5432 |
| Username | ivia |
| Password |
.env の POSTGRES_PASSWORD
|
| Database name | ivia |
Save 後に Deploy します。
③ Runtime Component の設定
Web → Runtime Component → Configure
-
Main タブ: User Registry =
LDAP Local -
Policy Server タブ: Administrator Password を設定(
sec_masterのパスワード) - LDAP タブ: Clean existing data はチェックなし
- Finish → Deploy
④ ライセンスのアクティベーション
System → Updates and Licensing → Activated Modules → Import
Passport Advantage から Activation Code を入手し、インポートします。
IBM Verify Identity Access Base Appliance が Enabled: True になったら Deploy します。
ライセンスを有効化すると Web メニューに「Reverse Proxy」等が表示されるようになります。
⑤ WebSEAL インスタンスの作成
Web → Reverse Proxy → New
| タブ | 項目 | 値 |
|---|---|---|
| Instance | Instance Name | default |
| IBM Verify Identity Access | Administrator Name | sec_master |
| IBM Verify Identity Access | Administrator Password | ③で設定したパスワード |
| IBM Verify Identity Access | Domain | Default |
| Transport | Enable HTTPS | チェックあり |
作成後に Deploy し、WebSEAL コンテナを再起動します。
sudo podman restart ivia-webseal
⑥ DSC(分散セッションキャッシュ)の設定
System → Network Settings → DSC Configuration
General Settings:
| 項目 | 値 |
|---|---|
| Service Port | 9446 |
| Replication Port | 9447 |
External Connection Settings(Primary):
| 項目 | 値 |
|---|---|
| Address | ivia-dsc |
| Service Port | 9446 |
| Replication Port | 9447 |
Save → Deploy します。
⑦ WebSEAL に DSC を接続
Web → Reverse Proxy → default → Edit → Session タブ
| 項目 | 値 |
|---|---|
| Enable Distributed Sessions | チェックあり |
| Session cache type | Distributed session cache |
Save → Deploy → WebSEAL を再起動します。
sudo podman restart ivia-webseal
タスク 5: 動作確認
コンテナ起動確認
sudo podman ps
LMI へのアクセス
https://192.168.102.110:9443/ にアクセスし、admin でログインします。
ダッシュボードで以下を確認します。
| 項目 | 期待値 |
|---|---|
| Version | 11.0.3.0 |
| Deployment Model | Docker |
| Runtime Database | Configured |
WebSEAL へのアクセス
https://192.168.102.110:9445/ にアクセスし、sec_master でログインします。
「IBM Verify Identity Access」の画面が表示されれば成功です。
DSC 起動確認
sudo podman logs ivia-dsc --tail 5
# "DPWDS0604W: The distributed session cache server has started." を確認
トラブルシューティング
icr.io へのログインが失敗する
原因: icr.io/ivia/ の IVIA イメージはログイン不要です。
対処: podman login は不要。直接 podman pull icr.io/ivia/ivia-config:latest を実行してください。
Runtime Database への接続が失敗する
原因: /etc/hosts に 127.0.0.1 ivia-db のエントリがある。
対処:
sudo vi /etc/hosts
# 以下の行をコメントアウトまたは削除
# 127.0.0.1 ivia-config ivia-webseal ivia-runtime ivia-dsc ivia-db
# コンテナを再起動
cd ~/ivia-poc && sudo podman-compose down && sudo podman-compose up -d
WebSEAL が起動しない(Permission denied)
原因: SELinux ラベルが設定されていない。
対処:
sudo chcon -Rt svirt_sandbox_file_t ~/ivia-poc/ivia-volume
sudo podman restart ivia-webseal
WebSEAL のポートに接続できない
原因: docker-compose.yaml のポートマッピングが 9445:443 になっている。
対処: 9445:9443 に変更してコンテナを再起動します。
ports:
- "${WEBSEAL_HTTPS_PORT}:9443" # 内部ポートは 9443(443 ではない)
Web メニューに Reverse Proxy が表示されない
原因: ライセンスが未アクティベート。
対処: System → Activated Modules から Activation Code をインポートして Deploy します。
LMI がリロードを繰り返す
原因: ブラウザのキャッシュ。
対処: Ctrl + Shift + Delete でキャッシュをクリアします。
補足: コンテナ管理コマンド
# 全コンテナの状態確認
sudo podman ps
# 全コンテナの停止
cd ~/ivia-poc && sudo podman-compose down
# 全コンテナの起動
cd ~/ivia-poc && sudo podman-compose up -d
# 特定コンテナの再起動
sudo podman restart ivia-webseal
# ログの確認
sudo podman logs ivia-config --tail 20
sudo podman logs ivia-webseal --tail 20
sudo podman logs ivia-dsc --tail 10
# 完全リセット(設定が全て消えるので注意)
cd ~/ivia-poc
sudo podman-compose down
sudo rm -rf ~/ivia-poc/ivia-volume/* ~/ivia-poc/pgdata/*
sudo podman-compose up -d
補足: 本番環境への移行ポイント
検証目的での利用から、本番利用に変更する際には、いくつか構成変更を検討するところがあります。ここでは、よく検討する項目だけ記載します。
- セッション情報の引継ぎの方式の変更 DSCではなくRedisに変更
- 構成DBDB (PostgreSQL)の外部化
- 組み込みLDAPの外部LDAPへの移行
- 冗長化
- WebSEALをアプリケーションの種別に合わせて分離
- Runtime(AAC)の役割に応じた分離
- ロードバランサーの配置
- 監視、バックアップ、ジョブ管理、ID管理などとの連携
おわりに
本記事では IVIA 11.0.3 コンテナ版を VirtualBox + RHEL 9.x 上に構築する手順を紹介しました。
いくつかハマりポイントがありましたが、特に以下の 2 点は注意が必要です。
-
WebSEAL のポートマッピングは
9445:9443(内部は 443 ではなく 9443) -
/etc/hostsにコンテナ名を追加しない(127.0.0.1 に解決されて DB 接続が失敗する)
本記事の構築作業・トラブルシューティング・記事執筆はすべて IBM Bob を活用して実施しました。IBM Bob との対話を通じて、初めての IVIA コンテナ環境の構築をスムーズに進めることができました。