JS7® JOCコックピット HashiCorp Vault®連携

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しました。

V.2.2.0よりHashiCorp Vault® シークレット管理のサポートが追加されました。
参考：
https://kb.sos-berlin.com/display/PKB/Release+2.2.0
本書では、HashiCorp Vault®とJOCコックピットの連携方法を記載します。

HashiCorp Vault®とJOCコックピットの連携は以下のタイプがあります。
※Vaultのサービスは、複数の指定ができないため以下のタイプから1つ選択する必要があります。

- VAULT-JOC：
    - ユーザアカウント/パスワードはVaultにて管理します。
    - Vaultに登録されていないアカウントをJOCで追加しようとするとエラーが発生し、登録することができません。
    - ユーザアカウントのロールの割り当ては、JOCで行います。

- VAULT-JOC-ACTIVE：
    - ユーザアカウント/パスワードの作成はJOCを使用します。そのため、JOCで作成されたユーザアカウント/パスワードは、Vaultに転送され、Vault上にユーザアカウントが作成されます。
    （※既にVault上に存在するユーザアカウントをJOCで作成した場合、パスワードはJOCで登録したものに上書きされます。）
    - ユーザアカウントのロールの割り当ては、JOCで行います。

- VAULT：
    - ユーザアカウント/パスワードはVaultにて管理します。
    - Vaultポリシー（Vaultでユーザーアカウントが割り当てられている）のJOCロールへの自動マッピングが行われます。
    - JOCへのログインを実行すると、ユーザーアカウントにポリシー名に一致するロールが割り当てられます。

参考：
https://kb.sos-berlin.com/display/PKB/JS7+-+Identity+Services
https://kb.sos-berlin.com/pages/viewpage.action?pageId=74875952

詳細な情報については、以下をご覧下さい。
- ナレッジベース（英語）　https://kb.sos-berlin.com/display/PKB/JS7
- 日本語紹介資料 https://www.ossl.co.jp/
- フォーラム　https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
- Facebook https://www.facebook.com/Jobscheduler-Japan-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97-594469610565511/timeline/
- 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
- JIRA（英語） 　https://change.sos-berlin.com/secure/Dashboard.jspa
- User Forum（英語）　http://sourceforge.net/projects/jobscheduler/forums/forum/486122
- SOS社ホームページ　http://www.sos-berlin.com

HashiCorp Vault®の詳細は以下をご参照ください。
https://www.vaultproject.io

# １．前提条件

JS7® JobScheduler V.2.2以上がインストール済みであること
HashiCorp® Vault V.1.7.0以降を使用すること
JS7® JobSchedulerの概要及びインストール方法については以下を参照ください
**Dockerでのインストール手順**　https://qiita.com/satoruf/items/360fee5293611433ed33
**Windowsでのインストール手順**　https://qiita.com/Yoshitami/items/6804584592956a483364
**Linux/CLIでのインストール手順**　https://qiita.com/satoruf/items/fa9846f4376d1a50a67e

# ２．JS7/Vaultインストール環境

・CentOS 7.9
・PostgreSQL 13.5
・openjdk 11
・JS7 2.2.1
・Vault 1.9.2 
※JS7とVaultは同居する。

・SELinuxはDisabled、Firewalldは停止されていること
・作業はすべてrootで実施
・Vault等の必要パッケージをインストールするためインターネットへの接続が可能なこと

# ３．Vaultインストール手順

**（１）Vaultのインストール**

以下のコマンドでVaultのリポジトリを追加し、Vaultをインストールします。
参考）
https://www.vaultproject.io/downloads

```shell-session
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum -y install vault
```

Vault CLIを補完出来るようにしておくと便利のため以下のコマンドを実行します。

```shell-session
vault -autocomplete-install
exec $SHELL
```

また、本書ではVaultの証明書の作成にjqコマンドを使用するため、jqのパッケージのインストールを行います。

```shell-session
# yum -y install epel-release
# yum -y install jq
```

Vaultの設定ファイルを以下のように修正します。

```shell-session
# vim /etc/vault.d/vault.hcl
※本書では以下のように設定します、環境に合わせて修正を行ってください。
ui = true
storage "file" {
  path = "/opt/vault/data"
}
listener "tcp" {
  address = "0.0.0.0:8200"
  tls_disable = 1
}
```

設定後、Vaultのサービスの自動起動を有効化し、起動します。

```shell-session
# systemctl enable vault.service
# systemctl start vault.service
```

**（２）Vaultの初期設定**

Vaultの環境変数の定義します。
※以下のコマンドを実行しないとvaultコマンドを実行してもエラーになります。

```shell-session
# export VAULT_ADDR='http://localhost:8200'
```

Vaultの初期化を行い、unsealkeyとrootのトークンが表示されます。

```shell-session
# vault operator init
Unseal Key 1: as6ljo74gXU4NnLggMgdfOhYT1bxJo+Rap3SlnDHMdZb
Unseal Key 2: 69UT4vICwu7Z1wm9jhVG3Hp5r5kMMCq1Lg2SXWmjL53V
Unseal Key 3: O5xp+b2kS0go3uorPIRjc2XfEZJ/mHLof2x2o1t0+4PY
Unseal Key 4: b3Jr7kFhOfF0M94dqxwOEPdArUk8pdSENPin2ShdVhhr
Unseal Key 5: RrfZbfRroXbYd77fUdUrdxjBIOcKenT80MHlY6ZOnlzA

Initial Root Token: s.JzmTL990ctxVHYucQtrkOjml
＜以下略＞
```

Vaultをunsealします、1つめのキーを入力すると、Unseal Progressが0/3から1/3になります。

```shell-session
# vault operator unseal as6ljo74gXU4NnLggMgdfOhYT1bxJo+Rap3SlnDHMdZb
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
Total Shares       5
Threshold          3
Unseal Progress    1/3
Unseal Nonce       396c1758-c9c9-201e-5fd5-4a8c652a31ab
Version            1.9.2
Storage Type       file
HA Enabled         false
```

2つめのキーを入力し、Unseal Progressが1/3から2/3になります。

```shell-session
# vault operator unseal 69UT4vICwu7Z1wm9jhVG3Hp5r5kMMCq1Lg2SXWmjL53V
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
Total Shares       5
Threshold          3
Unseal Progress    2/3
Unseal Nonce       396c1758-c9c9-201e-5fd5-4a8c652a31ab
Version            1.9.2
Storage Type       file
HA Enabled         false
```

3つめのキーを入力し、シールドががfalseとなり、解除されます。

```shell-session
# vault operator unseal O5xp+b2kS0go3uorPIRjc2XfEZJ/mHLof2x2o1t0+4PY
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    5
Threshold       3
Version         1.9.2
Storage Type    file
Cluster Name    vault-cluster-b997839c
Cluster ID      229629ce-b3be-16d0-206c-11b7f877720c
HA Enabled      false
```

Root Tokenを使用して、ログインします。

```shell-session
# vault login s.JzmTL990ctxVHYucQtrkOjml
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                  Value
---                  -----
token                s.JzmTL990ctxVHYucQtrkOjml
token_accessor       YlKSbiNTsz86Bu2nKFWB4etS
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]
```

Vaultはデフォルトではログを出力しないため、ログをファイルに出力するように設定します。

```shell-session
# mkdir -p /var/log/vault/
# chown vault: /var/log/vault 
# vault audit enable -path="audit" file file_path=/var/log/vault/vault_audit.log \
   hmac_accessor=false mode=0644
```

# ４．Vault 証明書作成手順

**（１）Root証明書の作成**

VaultでPKIを構築します、pkiを有効化し、証明書の有効期間を設定します。

```shell-session
# vault secrets enable pki
# vault secrets tune -max-lease-ttl=87600h pki
```

証明書作成の作業ディレクトリを作成します、本書では「/root/vault」とします。

```shell-session
# mkdir /root/vault
# cd /root/vault
```

Root証明書を作成します。

```shell-session
# vault write -field=certificate pki/root/generate/internal common_name="Root CA" ttl=87600h > CA_cert.crt
# vault write pki/config/urls issuing_certificates="http://localhost/v1/pki/ca" crl_distribution_points="http://localhost:8200/v1/pki/crl"
```

**（２）中間証明書の作成**

次に中間証明書を作成します。

```shell-session
# vault secrets enable -path=pki_int pki
# vault secrets tune -max-lease-ttl=43800h pki_int
# vault write -format=json pki_int/intermediate/generate/internal common_name="Intermediate Authority" ttl="43800h" | jq -r '.data.csr' > pki_intermediate.csr
# vault write -format=json pki/root/sign-intermediate csr=@pki_intermediate.csr format=pem_bundle ttl="43800h" | jq -r '.data.certificate' > intermediate.cert.pem
# vault write pki_int/intermediate/set-signed certificate=@intermediate.cert.pem
```

**（３）ロールの作成**

証明書の署名要求を処理できるロールを作成します。

```shell-session
# vault write pki_int/roles/cpRole allow_any_name="true" allow_subdomains=true client_flag=true
```

**（４）Truststoreの生成**

ルート証明書およびすべての中間証明書をTruststoreにインポートします。

```shell-session
# keytool -import -alias root-ca -trustcacerts -file CA_cert.crt -keystore vault-truststore.jks
キーストアのパスワードを入力してください:  
新規パスワードを再入力してください: 
※本書ではパスワードは「changeit」にします。
```

生成された証明書をキーストアにインポートし、PKCS12形式に変換します。
※V.2.2.1ではJKS形式は非推奨のためPKCS12形式に変換します。

```shell-session
# keytool -import -alias js7-int-ca -trustcacerts -file intermediate.cert.pem -keystore vault-truststore.jks
キーストアのパスワードを入力してください: 
※本書ではパスワードは「changeit」にします。
# keytool -importkeystore -srckeystore vault-truststore.jks -srcstoretype JKS -destkeystore vault-truststore.p12 -deststoretype PKCS12  
キーストアvault-truststore.jksをvault-truststore.p12にインポートしています...
出力先キーストアのパスワードを入力してください:  
新規パスワードを再入力してください: 
ソース・キーストアのパスワードを入力してください:  
※本書ではパスワードは「changeit」にします。
```

**（５）Keystoreの生成**

PKCS12キーと証明書ファイルを作成します。

```shell-session
# vault write pki_int/issue/cpRole common_name="localhost" ttl="8760h" -format=json > certs.json
# cat certs.json | jq -r '.data.ca_chain[0]' > ca_chain.pem
# cat certs.json | jq -r '.data.certificate' > certificate.pem
# cat certs.json | jq -r '.data.private_key' > private_key.pem
# openssl pkcs12 -inkey private_key.pem -in certificate.pem  -export -out vault-keystore.p12
Enter Export Password:
Verifying - Enter Export Password:
※本書ではパスワードは「changeit」にします。
```

**（６）サーバ証明書のコピー**

上記（４）、（５）で作成した証明書ファイルをJOCのインストールディレクトリ、JETTY_BASEディレクトリにコピーします。
ファイル名：vault-keystore.p12、vault-truststore.p12
コピー先：/opt/sos-berlin.com/js7/joc/jetty_base

```shell-session
# cp -p vault-keystore.p12 vault-truststore.p12 /opt/sos-berlin.com/js7/joc/jetty_base/
# chown  scheduler. /opt/sos-berlin.com/js7/joc/jetty_base/*.p12
```

# ５．Vault ユーザの作成手順

**（１）認証方式の追加**

ユーザ名とパスワードを使った認証方式を追加します。

```shell-session
# vault write sys/auth/userpass type=userpass
```

**（２）ユーザの作成**

ユーザを作成します、本書では以下のユーザを作成します。
ユーザ名：yamashita
パスワード：P@ssword

```shell-session
# vault write auth/userpass/users/yamashita password=P@ssword
```

作成したユーザでログイン確認を行います。

```shell-session
# vault login -method=userpass username=yamashita
Password (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                    Value
---                    -----
token                  s.LwcqjCI87xWHsvecjjShJrXd
token_accessor         yZxY8m6GjLklU3p0ylXDUBpz
token_duration         768h
token_renewable        true
token_policies         ["default"]
identity_policies      []
policies               ["default"]
token_meta_username    yamashita
```

# ６．JOCコックピット　Vault連携手順

Vaultの設定が行えたため、JOCコックピットとVaultを連携します。
上記にも記載しましたが、Vaultのサービスは、複数の指定ができないため以下のタイプから1つ選択する必要があります。
（複数Vaultのサービスを作成した場合は、無効化し、1つだけVaultのサービスを有効にします。）
・VAULT-JOC
・VAULT-JOC-ACTIVE
・VAULT

## ６－１．Vault連携手順（IDサービスタイプ：VAULT-JOC）

本手順では、VaultのサービスタイプのVAULT-JOCでの連携手順を記載します。
（**５．Vault ユーザの作成手順**にて作成したユーザアカウントを使用します。）

**（１）IDサービス（VAULT-JOC）の作成**

JOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからroot ＞ アカウント管理 の順で移動し、「IDサービス作成」を選択し、Vault-JOCのサービスを登録します。
※本書ではshiroのローカル認証→Vaultの順で認証するものとします。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-33-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/1450c62a-6270-64a9-b655-e021445546fc.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-37-43_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/3bccf45a-171f-5e8b-dcbf-9ecd364a5894.png)


IDサービス名：Vault
IDサービスタイプ：VAULT-JOC
順位：2

作成した、「Vault」のアクションボタンにて、設定管理を選択し、以下の項目を入力し、登録します。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-39-49_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/5bca25b6-e1c7-6516-a1e8-1c7fc4e57d5f.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-1-31_12-40-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/9c9509bc-169e-9bd5-32b2-32465f4fe650.png)

Vault URL：http://localhost:8200
Vaultキーストアパス：vault-keystore.p12
Vaultキーストアパスワード：changeit
Vaultパスワード：changeit
Vaultキーストアタイプ：PKCS12
Vaultトラストアパス：vault-truststore.p12
Vaultトラストアパスワード：changeit
Vaultトラストアトアタイプ：PKCS12
Vaultアプリケーショントークン：s.JzmTL990ctxVHYucQtrkOjml　  #Root Tokenを記載

**（２）ロール/アカウントの作成**

作成した「Vault」のサービスを選択し、ロール管理の順で移動し、ロールを作成します。
※本書ではVault連携のアカウントは全権限付与するものとします。
　ロール/権限の詳細は以下をご参照ください。
　https://kb.sos-berlin.com/display/PKB/JS7+-+Management+of+User+Accounts%2C+Roles+and+Permissions

![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-54-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/46e3a634-9445-9638-ac7b-595e0e6b05a8.png)

ロール：all

作成したロール「all」のコントローラ：defaultを選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-55-42_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/d267613a-1bab-efac-ec1c-53b98db79332.png)

「products」を選択し、全権限を付与させます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-56-31_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/bd039bd1-1d25-e7fa-22ed-8dae7c04dac2.png)

次にアカウントに移動し、Vaultで作成したアカウント作成します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-59-41_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/6f0047d1-3daa-a13c-8609-3a0e4e30a4e7.png)


アカウント：yamashita
ロール：all

設定完了後、**「７．JOCコックピットVault連携確認」**を実施し動作確認を行います。

## ６－２．Vault連携手順（IDサービスタイプ：VAULT-JOC-ACTIVE）

本手順では、VaultのサービスタイプのVAULT-JOC-ACTIVEでの連携手順を記載します。

**（１）IDサービス（VAULT-JOC-ACTIVE）の作成**

JOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからroot ＞ アカウント管理 の順で移動し、「IDサービス作成」を選択し、Vault-JOC-ACTIVEのサービスを登録します。
※本書ではshiroのローカル認証→Vaultの順で認証するものとします。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-33-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/1450c62a-6270-64a9-b655-e021445546fc.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_19-55-18_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/3feccbd8-150f-3fb4-5c6c-c1fefdc7a683.png)

IDサービス名：Vault
IDサービスタイプ：VAULT-JOC-ACTIVE
順位：2

作成した、「Vault」のアクションボタンにて、設定管理を選択し、以下の項目を入力し、登録します。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-31_12-44-18_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/25678add-02ea-6ad1-ed26-328beb9419a9.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-1-31_12-40-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/5fbaad0b-c6ba-cacf-20f1-b07940c8a9ef.png)


Vault URL：http://localhost:8200
Vaultキーストアパス：vault-keystore.p12
Vaultキーストアパスワード：changeit
Vaultパスワード：changeit
Vaultキーストアタイプ：PKCS12
Vaultトラストアパス：vault-truststore.p12
Vaultトラストアパスワード：changeit
Vaultトラストアトアタイプ：PKCS12
Vaultアプリケーショントークン：s.JzmTL990ctxVHYucQtrkOjml　  #Root Tokenを記載

**（２）ロール/アカウントの作成**

作成した「Vault」のサービスを選択し、ロール管理の順で移動し、ロールを作成します。
※本書ではVault連携のアカウントは全権限付与するものとします。
　ロール/権限の詳細は以下をご参照ください。
　https://kb.sos-berlin.com/display/PKB/JS7+-+Management+of+User+Accounts%2C+Roles+and+Permissions

![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-54-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/ab62d0b4-3738-5529-f8cb-088ea2d3e401.png)

ロール：all

作成したロール「all」のコントローラ：defaultを選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-55-42_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/441bf833-d0d8-0bc9-736f-16d73187757e.png)

「products」を選択し、全権限を付与させます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-56-31_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/77206cd3-0fc4-131a-81d8-04a5e649751d.png)


次にアカウントに移動し、JOC上でアカウントを作成します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_12-3-36_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/f536e447-b882-1d44-fd30-45bace94a98c.png)


アカウント：yoshitami
パスワード：P@ssword123
ロール：all

JOC上でアカウントの作成が成功すると、Vaultに以下のようにユーザアカウントが作成されたログが出力されます。

```shell-session
# tailf /var/log/vault/vault_audit.log 
※ログはJSON形式で出力されます。
{"time":"2022-01-25T11:01:59.843125109Z","type":"request","auth":{"client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","accessor":"YlKSbiNTsz86Bu2nKFWB4etS","display_name":"root","policies":["root"],"token_policies":["root"],"token_type":"service","token_issue_time":"2022-01-25T10:56:26+09:00"},"request":{"id":"5766ca93-940d-fa26-56fd-1ef7962421b7","operation":"update","mount_type":"userpass","client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","client_token_accessor":"YlKSbiNTsz86Bu2nKFWB4etS","namespace":{"id":"root"},"path":"auth/userpass/users/yoshitami","data":{"password":"hmac-sha256:1cb3a9817190e2bc5b508cd2876047e381757dbf9d48f4028251d9c14779d00d","username":"hmac-sha256:ef716e43d73466efd352860ccfbb528f215b41c913c8948e37bf26cf0fcffc0e"},"remote_address":"127.0.0.1"}}
{"time":"2022-01-25T11:01:59.923257201Z","type":"response","auth":{"client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","accessor":"YlKSbiNTsz86Bu2nKFWB4etS","display_name":"root","policies":["root"],"token_policies":["root"],"token_type":"service","token_issue_time":"2022-01-25T10:56:26+09:00"},"request":{"id":"5766ca93-940d-fa26-56fd-1ef7962421b7","operation":"update","mount_type":"userpass","client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","client_token_accessor":"YlKSbiNTsz86Bu2nKFWB4etS","namespace":{"id":"root"},"path":"auth/userpass/users/yoshitami","data":{"password":"hmac-sha256:1cb3a9817190e2bc5b508cd2876047e381757dbf9d48f4028251d9c14779d00d","username":"hmac-sha256:ef716e43d73466efd352860ccfbb528f215b41c913c8948e37bf26cf0fcffc0e"},"remote_address":"127.0.0.1"},"response":{"mount_type":"userpass"}}
{"time":"2022-01-25T11:01:59.950543344Z","type":"request","auth":{"client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","accessor":"YlKSbiNTsz86Bu2nKFWB4etS","display_name":"root","policies":["root"],"token_policies":["root"],"token_type":"service","token_issue_time":"2022-01-25T10:56:26+09:00"},"request":{"id":"5e997336-3083-882e-72e7-f66a60cf26b2","operation":"update","mount_type":"userpass","client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","client_token_accessor":"YlKSbiNTsz86Bu2nKFWB4etS","namespace":{"id":"root"},"path":"auth/userpass/users/yoshitami","data":{"token_policies":["hmac-sha256:3e40fa7ffb7391404c895283ec83e4a3fe0c2cf1710cf3bee97a4e9c957ebbcd"]},"remote_address":"127.0.0.1"}}
{"time":"2022-01-25T11:01:59.951031263Z","type":"response","auth":{"client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","accessor":"YlKSbiNTsz86Bu2nKFWB4etS","display_name":"root","policies":["root"],"token_policies":["root"],"token_type":"service","token_issue_time":"2022-01-25T10:56:26+09:00"},"request":{"id":"5e997336-3083-882e-72e7-f66a60cf26b2","operation":"update","mount_type":"userpass","client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","client_token_accessor":"YlKSbiNTsz86Bu2nKFWB4etS","namespace":{"id":"root"},"path":"auth/userpass/users/yoshitami","data":{"token_policies":["hmac-sha256:3e40fa7ffb7391404c895283ec83e4a3fe0c2cf1710cf3bee97a4e9c957ebbcd"]},"remote_address":"127.0.0.1"},"response":{"mount_type":"userpass"}}
~
```

Vaultにてユーザを確認します。

```shell-session
# vault list /auth/userpass/users
Keys
----
yamashita
yoshitami    # JOC上で作成したユーザアカウントが確認できる
```

JOC上で作成したユーザアカウント情報でログイン確認を行います。

```shell-session
# vault login -method=userpass username=yoshitami
Password (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                    Value
---                    -----
token                  s.SuDU5sykWJ0XCzAg9DuoUMhy
token_accessor         PcUR1guW4XjEZP2zrmcvde6Q
token_duration         768h
token_renewable        true
token_policies         ["all" "default"]
identity_policies      []
policies               ["all" "default"]
token_meta_username    yoshitami
```

また、JOCのWebUIに以下のVaultで作成したユーザ/パスワードでログインできることを確認します。
http://＜IPアドレス＞:4446
ユーザ：yoshitami
パスワード：P@ssword123

設定完了後、**「７．JOCコックピットVault連携確認」**を実施し動作確認を行います。

## ６－３．Vault連携手順（IDサービスタイプ：VAULT）

本手順では、VaultのサービスタイプのVAULTでの連携手順を記載します。
（**５．Vault ユーザの作成手順**にて作成したユーザアカウントを使用します。）

**（１）IDサービス（VAULT）の作成**

JOCのWebUIにrootアカウントでログインし、
http://＜IPアドレス＞:4446
ユーザ：root
パスワード：root

JobSchedulerメニューからroot ＞ アカウント管理 の順で移動し、「IDサービス作成」を選択し、Vaultのサービスを登録します。
※本書ではshiroのローカル認証→Vaultの順で認証するものとします。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-33-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/1450c62a-6270-64a9-b655-e021445546fc.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_10-49-58_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/c949b3b1-0ca5-0aa1-f40c-faae2fa76ecd.png)

IDサービス名：Vault
IDサービスタイプ：VAULT
順位：2

作成した、「Vault」のアクションボタンにて、設定管理を選択し、以下の項目を入力し、登録します。

![SnapCrab_JS7controller — Mozilla Firefox_2022-1-25_13-39-49_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/5bca25b6-e1c7-6516-a1e8-1c7fc4e57d5f.png)
![SnapCrab_JS7controller — Mozilla Firefox_2022-1-31_12-40-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/9c9509bc-169e-9bd5-32b2-32465f4fe650.png)

Vault URL：http://localhost:8200
Vaultキーストアパス：vault-keystore.p12
Vaultキーストアパスワード：changeit
Vaultパスワード：changeit
Vaultキーストアタイプ：PKCS12
Vaultトラストアパス：vault-truststore.p12
Vaultトラストアパスワード：changeit
Vaultトラストアトアタイプ：PKCS12
Vaultアプリケーショントークン：s.JzmTL990ctxVHYucQtrkOjml　  #Root Tokenを記載

作成した「Vault」のサービスを選択し、ロール管理の順で移動し、ロールを作成します。
※本書ではVault連携のアカウントは全権限付与するものとします。
　ロール/権限の詳細は以下をご参照ください。
　https://kb.sos-berlin.com/display/PKB/JS7+-+Management+of+User+Accounts%2C+Roles+and+Permissions

![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-35-34_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/3ff631cc-db2f-62eb-0c01-054591e738e2.png)

ロール：all-vault

作成したロール「all-vault」のコントローラ：defaultを選択します。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_11-33-42_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/226790c4-a468-82d4-9f80-7297cc157b87.png)


「products」を選択し、全権限を付与させます。
![SnapCrab_JS7controller — Mozilla Firefox_2022-2-2_10-56-50_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/e5fc611c-a9dc-089b-2671-7fc45ef9a328.png)

**（２）Vault ユーザのロールの割り当て**

**５．Vault ユーザの作成手順**にて作成したユーザアカウントに上記のJOCで作成したロール「ALL-VAULT」を割り当てます。

```shell-session
# vault write auth/userpass/users/yamashita policies=all-vault
```

Vaultのユーザでログイン確認し、token_policies、policiesにJOCで作成したロール「ALL-VAULT」が割り当てられていることを確認します。

```shell-session
# vault login -method=userpass username=yamashita
Password (will be hidden): 
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                    Value
---                    -----
token                  s.MOGEI0i3GSvGq04uzNdA5vL0
token_accessor         Ft6yIyLZOlgORObzuNxnRCWr
token_duration         768h
token_renewable        true
token_policies         ["all-vault" "default"]
identity_policies      []
policies               ["all-vault" "default"]
token_meta_username    yamashita
```

これで、Vaultポリシーが、JOCロールへの自動マッピングが行われます。

設定完了後、**「７．JOCコックピットVault連携確認」**を実施し動作確認を行います。

# ７．JOCコックピットVault連携確認

JOCのWebUIに以下のVaultで作成したユーザ/パスワードでログインできることを確認します。
http://＜IPアドレス＞:4446
ユーザ：＜Vaultユーザアカウント名＞
パスワード：＜Vaultユーザアカウントパスワード＞

また、Vaultのログで以下のようにログインが成功しているログが出力されていることを確認します。

```shell-session
# tailf /var/log/vault/vault_audit.log
※ログはJSON形式で出力されます。
{"time":"2022-01-25T05:23:27.766218496Z","type":"response","auth":{"client_token":"hmac-sha256:0ab6cc70c281f2972f1d8a6efbfac87d0d2f0e3d71b1e64ce2066b995e315c5c","accessor":"AAW442Fkk8l4k7gjiBdTmUFc","display_name":"userpass-yamashita","policies":["all","default"],"token_policies":["all","default"],"metadata":{"username":"yamashita"},"entity_id":"e7815399-9cde-f444-70f0-fcfc3481b591","token_type":"service","token_ttl":2764800},"request":{"id":"6560c001-ee25-43e5-25f2-f666dd9a04b7","operation":"update","mount_type":"userpass","client_token":"hmac-sha256:9131e3a0f7912fdf826938dce5c0d7690aeb66eb9461e8dd70d543e03ead008b","client_token_accessor":"YlKSbiNTsz86Bu2nKFWB4etS","namespace":{"id":"root"},"path":"auth/userpass/login/yamashita","data":{"password":"hmac-sha256:9742d772e8df1e34eef75290c8adcebfd5c5410523817d76e6694c85472cd23a","tokenPolicies":null,"username":"hmac-sha256:f92738c4ecbf3133a93529396505dc42abd9a4fe80d2ee346f5ca6d90059e5a0"},"remote_address":"127.0.0.1"},"response":{"auth":{"client_token":"hmac-sha256:0ab6cc70c281f2972f1d8a6efbfac87d0d2f0e3d71b1e64ce2066b995e315c5c","accessor":"AAW442Fkk8l4k7gjiBdTmUFc","display_name":"userpass-yamashita","policies":["all","default"],"token_policies":["all","default"],"metadata":{"username":"yamashita"},"entity_id":"e7815399-9cde-f444-70f0-fcfc3481b591","token_type":"service","token_ttl":2764800},"mount_type":"userpass"}}
```