0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Verify Identity Access 11.0.3 コンテナ版を VirtualBox + RHEL 9.x に構築する

0
Posted at

はじめに

本記事では、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/hosts127.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 .envPOSTGRES_PASSWORD
Database name ivia

Save 後に Deploy します。

③ Runtime Component の設定

Web → Runtime Component → Configure

  1. Main タブ: User Registry = LDAP Local
  2. Policy Server タブ: Administrator Password を設定(sec_master のパスワード)
  3. LDAP タブ: Clean existing data はチェックなし
  4. Finish → Deploy

④ ライセンスのアクティベーション

System → Updates and Licensing → Activated Modules → Import

Passport Advantage から Activation Code を入手し、インポートします。

IBM Verify Identity Access Base ApplianceEnabled: 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/hosts127.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

補足: 本番環境への移行ポイント

検証目的での利用から、本番利用に変更する際には、いくつか構成変更を検討するところがあります。ここでは、よく検討する項目だけ記載します。

  1. セッション情報の引継ぎの方式の変更 DSCではなくRedisに変更
  2. 構成DBDB (PostgreSQL)の外部化
  3. 組み込みLDAPの外部LDAPへの移行
  4. 冗長化
  5. WebSEALをアプリケーションの種別に合わせて分離
  6. Runtime(AAC)の役割に応じた分離
  7. ロードバランサーの配置
  8. 監視、バックアップ、ジョブ管理、ID管理などとの連携

おわりに

本記事では IVIA 11.0.3 コンテナ版を VirtualBox + RHEL 9.x 上に構築する手順を紹介しました。
いくつかハマりポイントがありましたが、特に以下の 2 点は注意が必要です。

  1. WebSEAL のポートマッピングは 9445:9443(内部は 443 ではなく 9443)
  2. /etc/hosts にコンテナ名を追加しない(127.0.0.1 に解決されて DB 接続が失敗する)

本記事の構築作業・トラブルシューティング・記事執筆はすべて IBM Bob を活用して実施しました。IBM Bob との対話を通じて、初めての IVIA コンテナ環境の構築をスムーズに進めることができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?