Terraform使ってIBM Verifyを3ステップでデプロイする
生成AIのPoCで作ってるGradioアプリやReactアプリに、ログイン・ログアウト機能やユーザー管理機能を付け加えるためにIBM Verify(IAM/SSOソリューション)を使っています。PoCアプリなので2カ月くらいの使い捨てなので、ちゃちゃっとデプロイしたいです。そこで、IBM Cloud上にIBM VerifyをTerraformで自動デプロイするのを作りました。
手動セットアップの手間を省き、.envファイルまで自動生成してくれます。
使い方(3ステップ)
1. 変数ファイルを作成
cp terraform.tfvars.example terraform.tfvars
ibmcloud_api_key = "your-api-key"
resource_group = "Default"
instance_name = "my-verify"
hostname = "mycompany" # mycompany.verify.ibm.com になる
2. デプロイ実行
./scripts/update_env.sh # Linux/Mac
# or
.\scripts\update_env.ps1 # Windows
3. 完了
.envファイルが自動生成されます:
IBM_VERIFY_HOSTNAME=mycompany.verify.ibm.com
IBM_VERIFY_DASHBOARD_URL=https://mycompany.verify.ibm.com/ui/admin/
IBM_VERIFY_ACCOUNT_URL=https://mycompany.verify.ibm.com
IBM_VERIFY_INSTANCE_ID=<guid>
ポイント
Infrastructure as Code化のメリット
- 複数環境への一貫したデプロイが可能
- Git管理でインフラ変更履歴が追跡できる
- チーム間での横展開が簡単
公式モジュールを使用
このリポジトリは以下の公式モジュールを組み合わせています:
terraform-ibm-modules/resource-groupterraform-ibm-modules/security-verify
認証情報も自動管理
Terraformが以下を自動生成:
- サービス認証情報(Administrator権限)
- 各種URL(ダッシュボード、OAuth、管理)
-
.envファイル
注意点
削除も簡単
./scripts/destroy.sh
API Client自動作成(追加機能)
IBM VerifyのREST APIを使うには、管理UIから手動でAPI Clientを作成する必要があります。この手動作業も自動化しました。
何が自動化されるのか
Playwrightが以下を自動実行:
- 管理UIにログイン
- Security → API accessに移動
- 新しいAPI Client作成(全権限付与)
- Client SecretをOCRで抽出
.envに認証情報を自動追記
セットアップと実行
cd tests
npm install
npx playwright install chromium
.envに管理者認証情報を追加:
IBM_VERIFY_ADMIN_EMAIL=your-email@jp.ibm.com
IBM_VERIFY_ADMIN_PASSWORD=your-password
実行:
npm test
完了後、.envに自動追記されます:
IBM_VERIFY_API_CLIENT_ID=<client-id>
IBM_VERIFY_API_CLIENT_SECRET=<client-secret>
技術ポイント:OCR処理
Client Secretは「Show password」で表示しても、DOM操作でコピー不可能だったので、OCRで文字列抽出しました(Client IDはDOM操作でコピーできます)
工夫した点:
- 1.5倍スケールのスクリーンショット(高解像度化)
- Tesseract.jsで英数字+記号のみ認識
- Sharp.jsで画像前処理(アップスケール、グレースケール、シャープ化)
OCR失敗時はMANUAL_ENTRY_REQUIREDとなるので、スクリーンショットから手動で記入してください。以下のURL画面から取れます https://ホスト名.verify.ibm.com/ui/admin/security/api-access
ブラウザ表示モード:
npm run test:headed
OCR単体テスト:
npm run test:ocr
なぜ自動化?
手動作業の課題:
- API Client作成は管理UIからのみ可能
自動化のメリット:
- 環境構築が完全自動化(インフラ→API認証情報まで)
HashiCorp Vault連携(セキュリティ強化版)
機密情報を.envやterraform.tfvarsに平文で保存したくないので、シークレット管理ソフトウェアのHashiCorp Vaultと連携する版を用意しました。
管理される機密情報
以下3つの機密情報をVaultで一元管理:
-
ibmcloud_api_key- IBM Cloud APIキー -
verify_admin_user- IBM Verify管理者ID -
verify_admin_pass- IBM Verify管理者パスワード
セットアップ(2ステップ)
1. Vault起動(Docker):
docker run --name vault-dev -d -p 8200:8200 \
-e "VAULT_DEV_ROOT_TOKEN_ID=root" hashicorp/vault
2. 機密情報を初期化:
./scripts/vault_setup.sh # Linux/Mac
# or
.\scripts\vault_setup.ps1 # Windows
対話形式で機密情報を入力すると、Vaultに安全に保存されます。
Vaultを使ったデプロイ
./scripts/update_env_vault.sh # Linux/Mac
# or
.\scripts\update_env_vault.ps1 # Windows
このスクリプトが自動実行:
- Vaultからシークレットを取得
- Terraformでデプロイ(
.tfvars不要) -
.envに管理者認証情報を書き込み(後述で利用)
セキュリティ上のメリット
| 項目 | Vault無し | Vault使用 |
|---|---|---|
| 機密情報の保存 | 平文ファイル | 暗号化 |
| Git誤コミット | リスクあり | リスクなし |
| 監査ログ | なし | あり |
| 機密情報のローテーション | 手動 | 容易 |
手動操作
機密情報の確認:
vault kv get secret/ibm
機密情報の更新:
vault kv put secret/ibm \
ibmcloud_api_key="new-key" \
verify_admin_user="email@ibm.com" \
verify_admin_pass="new-password"
詳細はリポジトリのREADMEをご覧ください。
Discussion