JBoss EAP データソースのパスワードを
Elytron Credential Storeで管理する

こんにちは。平田です。

JBoss EAP 7.1から利用可能なElytronサブシステムでは、パスワードなどを平文で指定せずに安全に管理するための仕組みとしてCredential Storeという機能が用意されています。

今回は、Credential Storeを使ってデータソースのパスワードを管理してみます。

従来のsecurityサブシステム向けにもPassword Vaultという同様の仕組みがありましたが、より簡単に使えるそうです。

使い方はマニュアル How to Configure Server Security の4.1 Credential Storeに書かれています。

最初にCredential Store(機密情報を書き込むファイル)を作成するわけですが、Credential Storeへのアクセス自体にパスワードが必要となります。このパスワードをマスクするツールがEAPに同梱されています。

$ cd $JBOSS_HOME
$ bin/elytron-tools.sh mask -x p@ssw0rd -s 20180607 -i 2
MASK-24DhgSlssSlUd5h.yHA6sq;20180607;2

次に、サーバを起動し、CLIにてCredential Storeを作成します。

$ bin/jboss-cli.sh -c
/subsystem=elytron/credential-store=secrets:add( \
  location="credential-stores/secrets.jceks", \
  relative-to=jboss.server.data.dir, \
  credential-reference={clear-text=MASK-24DhgSlssSlUd5h.yHA6sq;20180607;2}, \
  create=true
)

次に、今回 Credential Store で管理するデータソースのパスワード(ExampleDSの接続パスワード “sa”)を書き込みます。

/subsystem=elytron/credential-store=secrets:add-alias(alias=example-ds-password, secret-value=sa)

最後に、ExampleDSのパスワード指定を、Credential Storeに変更します。

/subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password)
/subsystem=datasources/data-source=ExampleDS:write-attribute( \
  name=credential-reference, \
  value={store=secrets, alias=example-ds-password} \
)
:reload

データソースの接続性テストを使い、パスワードを参照して接続できるか確認します。

data-source test-connection-in-pool --name=ExampleDS
true

standalone.xmlのデータソース定義部分から平文パスワードを取り除くことができました。

<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
  <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
  <driver>h2</driver>
  <security>
    <user-name>sa</user-name>
    <credential-reference store="secrets" alias="example-ds-password"/>
  </security>
</datasource>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です