セキュア設定プロパティ

設定プロパティはアプリケーションの別のセキュリティレベルとして暗号化できます。セキュア設定プロパティを作成するには、次のプロセスを確認してください。

  1. セキュア設定プロパティファイルを作成します。

  2. 暗号化された値をシーケンス ​![value]​ 間に囲み、ファイルでセキュアプロパティを定義します。

  3. Mule Secure Configuration Properties Extension Module を使用してプロジェクトでファイルを設定します。ファイルでは復号化キーを参照するか、復号化キーが含まれている必要があります。

属性

セキュアなプロパティファイルを作成してそのプロパティを定義する前に、プロセスで使用されるセキュア設定プロパティ属性と暗号化属性を確認してください。

Table 1. セキュア設定プロパティの属性
属性名 説明

Name (名前)

グローバルセキュア設定プロパティの一意の名前。

Key (キー)

プロパティ値をロック解除するために指定する単語またはフレーズ。たとえば、​${production.myproperty}​ と指定すると、Mule Runtime Engine は実行時にキーを要求します。

ファイル

キーが復号化するファイルの場所。

Encoding (エンコード)

キーがロック解除するファイルのエンコード。デフォルト値は UTF-8 です。

File Level Encryption (ファイルレベル暗号化)

ファイル全体を暗号化する場合は ​true​ に設定します。デフォルト値は ​false​ です。

Table 2. セキュア設定プロパティの暗号化属性
属性名 説明

Algorithm (アルゴリズム)

プロパティのコンテンツを暗号化するために使用するアルゴリズムの種別。完全なリストについては、​サポートされているアルゴリズム​を参照してください。

Mode (モード)

Mule Runtime Engine が単一のキーでブロック暗号を繰り返し使用するためのプロシージャーです。完全なリストについては、​サポートされているモード​を参照してください。

Use random IVs (ランダム IV の使用)

ランダム初期化ベクトル (IV) を使用するには、この属性を ​true​ にします。このオプションを ​true​ に設定すると、復号化アルゴリズムは復号化操作中に IV が暗号テキストの先頭に追加されていると見なします。

セキュア設定プロパティファイルを作成する

設定プロパティをセキュアにする最初のタスクは、プロパティを定義する YAML 設定ファイル (​.yaml​) または Spring 形式のプロパティファイル (​.properties​) を作成することです。Mule Secure Configuration Properties Extension Module を使用すれば、YAML またはプロパティファイル種別を設定できます。

セキュア設定プロパティファイルは、Mule プロジェクトの ​src/main/resources​ で、または絶対パスを使用して作成できます。

ファイルでセキュア設定プロパティを定義する

暗号化された値をシーケンス ​![value]​ 間に囲み、ファイルでセキュアプロパティを定義します。このファイルには、Mule アプリケーション内のどの場所でも使用できる暗号化された値と暗号化されていない値の両方を含むことができます。

オペレーティングシステムへのアクセスをセキュアにしてください。​ps​ コマンドを実行できたり、Java コンソールを表示できたりするユーザーであれば、Mule アプリケーションのメモリに格納されている復号化された値を見ることができてしまうからです。

次の ​file1.yaml​ の例には、暗号化された設定プロパティ値と暗号化されていない設定プロパティ値が含まれています。

encrypted:
    value1: "![nHWo5JhNAYM+TzxqeHdRDXx15Q5R56YVGiQgXCoBCew=]"
    value2: "![nHWo6XyCADP+TzxqeHdRDXx15Q5R56YVGiQgXCoDFaj=]"

testPropertyA: "testValueA"
testPropertyB: "testValueB"
暗号化された値は、文字列として読めるように引用符で囲む必要があります。

次の ​file1.properties​ の例には、前の例で使用した設定プロパティが含まれていますが、Spring 形式のプロパティファイルを使用しています。

encrypted.value1=![nHWo5JhNAYM+TzxqeHdRDXx15Q5R56YVGiQgXCoBCew=]
encrypted.value2=![nHWo6XyCADP+TzxqeHdRDXx15Q5R56YVGiQgXCoDFaj=]

testPropertyA=testValueA
testPropertyB=testValueB

セキュアプロパティツールを使用してプロパティを暗号化する

テキスト文字列、プロパティファイル内の値、またはプロパティファイルのすべてのコンテンツを暗号化または復号化するには、セキュアプロパティツールを使用します。

この記事で説明するすべての機能を使用するには、このツールの使用可能な最新バージョンを使用していることを確認してください。
ダウンロードリンク: セキュアプロパティツール Jar ファイル​。
最新リリース: 2022 年 9 月 14 日。

構文は、以前のバージョンから変更されています。問題を回避するため、この記事で指定されている構文と JAR ファイルを使用してください。

受け入れられるすべてのパラメーターの完全なリストおよび定義については、​パラメーターリファレンス​を参照してください。

テキスト文字列を暗号化する

次の構文を使用して、パラメーターとして指定されたテキスト文字列を暗号化または復号化します。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
<method> \
<operation> \
<algorithm> \
<mode> \
<key> \
<value> \
--use-random-iv [optional]
  • テキスト文字列を処理するようにツールを設定するには、​<method>​ を ​string​ に設定します。

  • 目的の操作が実行されるようにその他のパラメーターを指定します。

たとえば、次の操作を実行するとします。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
string \
encrypt \
Blowfish \
CBC \
mulesoft \
"some value to encrypt"

この場合、ツールで次の内容が返されます。

8q5e1+jy0cND2iV2WPThahmz6XsDwB6Z

ファイルを暗号化する

文字列の処理に加えて、暗号化ツールでは ​.yaml​ または ​.properties​ ファイルも処理されます。プロパティファイル内の値、またはファイルのすべてのコンテンツを暗号化または復号化できます。

ファイル内のプロパティを暗号化する

次の構文を使用して、プロパティファイル内のすべての値を暗号化または復号化します。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
<method> \
<operation> \
<algorithm> \
<mode> \
<key> \
<input file> \
<output file> \
--use-random-iv [optional]
  • <method>​ を ​file​ に設定します。

  • <input file>​ を処理するプロパティファイルに設定します。

  • <output file>​ をプロセス後に生成されるファイルに設定します。

  • 目的の操作が実行されるようにその他のパラメーターを指定します。

たとえば、次のコンテンツが含まれるファイル ​example_in.yaml​ を考えます。

properties:
  example1:
    value: "Muleman is here"
  example2: "Max the mule"

次の操作を実行したとします。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
file \
encrypt \
Blowfish \
CBC \
mulesoft \
example_in.yaml \
example_out.yaml

この場合、ツールで次のコンテンツが含まれるファイル ​example_out.yaml​ が生成されます。

properties:
  example1:
    value: "![qCReIPK3jcqD7WR84ISSIQ==]"
  example2: "![En8lII21ZHrdIaINw0+mSA==]"

ファイルのすべてのコンテンツを暗号化する

次の構文を使用して、プロパティファイルのすべてのコンテンツを暗号化または復号化します。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
<method> \
<operation> \
<algorithm> \
<mode> \
<key> \
<input file> \
<output file>
--use-random-iv [optional]
  • <method>​ を ​file-level​ に設定します。

  • <input file>​ を処理するプロパティファイルに設定します。

  • <output file>​ をプロセス後に生成されるファイルに設定します。

  • 目的の操作が実行されるようにその他のパラメーターを指定します。

たとえば、次のコンテンツが含まれるファイル ​example_in.yaml​ を考えます。

properties:
  example1:
    value: "Muleman is here"
  example2: "Max the mule"

次の操作を実行したとします。

java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
file-level \
encrypt \
Blowfish \
CBC \
mulesoft \
example_in.yaml \
example_out.yaml

この場合、ツールで次のコンテンツが含まれるファイル ​example_out.yaml​ が生成されます。

k/J1EHyxJagOcyQELoaqIDCzzKc1bLGJiHY2dv6jzuhtVpP1LTlgK3y8EH7OkK5iuuu8kik3P5dCDMixZXwn/EV6xbUwLFKnEb4x1pUX6aopLP/KULm0pQ==

パラメーターリファレンス

パラメーター 説明

<method>

暗号化または復号化メソッドを設定します。可能な値:

string

パラメーター ​<value>​ として指定された 1 つのテキスト文字列を暗号化します。

file

パラメーター ​<input file>​ として指定されたプロパティファイルで設定された各プロパティの値を暗号化します。

file-level

<input file>​ として指定されたプロパティファイルのすべてのコンテンツを暗号化します。

<operation>

実行する操作を設定します。可能な値:

encrypt

暗号化する操作を設定します。

decrypt

復号化する操作を設定します。

<algorithm>

操作中に使用するアルゴリズムを指定します。
完全なリストについては、​サポートされているアルゴリズム​を参照してください。

<mode>

操作中に使用するモードを指定します。
完全なリストについては、​サポートされているモード​を参照してください。

<key>

操作中にファイルまたは値をロックまたはロック解除するために使用する単語を指定します。

  • キーで ​$​ 文字を使用する場合、その前に ​\​ を置く必要があります。 たとえば、キー ​myKey#$%123​ を使用するには、​<key>​ パラメーターを ​myKey#\$%123​ として指定する必要があります。

  • Java Cryptography Extension (JCE) バージョン 1.8.0_161​ 以降、AES キーの長さは 32 文字 (128 ビット) にする必要があります。

<value>

string​ 操作中に暗号化または復号化される文字列値を指定します。

<use random IV>

操作中にランダム初期化ベクトル (IV) が使用されるかどうかを指定します。

<input file>

file​ または ​file-level​ 操作中に暗号化または復号化されるプロパティファイルを指定します。

<output file>

file​ または ​file-level​ 操作後に作成される暗号化または復号化されたプロパティファイルを指定します。

プロジェクトでファイルを設定する

セキュアなプロパティファイルは、 Exchange​ から入手できる Mule Secure Configuration Properties Extension Module を使用して、スタンドアロン XML と Anypoint Studio のどちらでも設定できます。

XML で Extension Module を使用してファイルを設定する

XML フローで、モジュール ​<secure-properties:config>​ を使用してファイルを設定します。次の例を確認してください。

デフォルト値を使用したセキュア設定プロパティ

<secure-properties:config key="${runtime.property}"
  file="file1.yaml" name="test">
    <secure-properties:encrypt/>
</secure-properties:config>

<global-property name="prop" value="my-${secure::property.key1}"/>
  • デフォルト値を使用する場合でも ​<secure-properties:encrypt>​ タグは必要です。

  • プレフィックス ​secure::​ はキーの読み込みに必要です。

    セキュアなプロパティファイル内の値にアクセスするには、値が暗号化されていない場合でも ​secure::​ プレフィックスを使用する必要があります。これにより、設定全体を変更しなくてもファイル (または環境) を切り替えることができます。
  • デプロイメント時に、復号化キーはシステム環境変数 ​runtime.property​ として Mule Runtime Engine に渡されます。このプロパティは、​file1.yaml​ ファイルに格納されている値を暗号化するために使用するのとまったく同じキーでなければなりません。

  • デフォルトの暗号化アルゴリズムとモードが使用されます。

  • たとえば、​property.key1​ プロパティの実際の (復号化された) 値が ​"property"​ であれば、​prop​ プロパティの値は ​"my-property"​ となります。

<secure-properties:encrypt>​ タグで追加の属性を設定して、暗号化アルゴリズムや暗号化モードを変更することもできます。

カスタム値を使用したセキュア設定プロパティ

<secure-properties:config key="${runtime.property}"
  file="file1.properties" name="test">
    <secure-properties:encrypt algorithm="AES" mode="CBC" useRandomIVs="true"/>
</secure-properties:config>

上の例で、​<secure-properties:encrypt>​ タグでは ​AES​ アルゴリズム、​CBC​ モード、​random IV​ を使用しています。

<secure-properties:config>​ で設定された ​key​、​algorithm​、​mode​、​useRandomIVs​ の値は、プロパティファイルを暗号化するために使用した値と一致する必要があります。

Studio で Extension Module を使用してファイルを設定する

Anypoint Studio を使用してアプリケーションを開発している場合、Mule アプリケーションで連動関係として追加したモジュールを使用してセキュア設定プロパティを作成することもできます。

Extension Module をインストールする

  1. Anypoint Studio で Mule プロジェクトを開きます。

  2. [Mule Palette (Mule パレット)] セクションに移動します。

  3. [Search in Exchange (Exchange 内を検索)]​ をクリックします。

  4. [Add Module to Project (モジュールをプロジェクトに追加)] ウィンドウの ​[Type a search term to look up in Exchange (検索語を入力して Exchange 内で検索)]​ ボックスで、​[Mule Secure Configuration Property Extension (Mule セキュア設定プロパティ拡張)]​ を検索します。

  5. リストでモジュール名を選択します。

  6. [Add (追加)]​ に続いて ​[Finish (完了)]​ をクリックします。

セキュア設定プロパティをアプリケーションに追加して設定する

  1. Mule アプリケーションの設定ファイルに移動します。

  2. [Global Elements (グローバル要素)]​ タブを選択します。

  3. [Create (作成)]​ をクリックします。

  4. [Secure Properties Config (セキュアプロパティ設定)]​ を選択します。

  5. [File (ファイル)]​ の場所、​[Key (キー)]​、​[Algorithm (アルゴリズム)]​、​[Mode (モード)]​、​[Use random IV (ランダム IV の使用)]​、​[File level encryption (ファイルレベル暗号化)]​、​[Encoding (エンコード)]​ を使用してグローバル要素を設定します。

  6. [OK]​ をクリックします。

設定の拡張

Secure Configuration Properties Module で設定された ​key​、​algorithm​、​mode​、​use random IV​ の値は、プロパティファイルを暗号化するために使用した値と一致する必要があります。

開発時にセキュア設定プロパティを確認する

Studio でアプリケーションを開発している場合、コネクタ接続をテストしてコネクタのセキュア設定プロパティが正しくセットアップされていることを確認できます。 次の例では、そのセキュアプロパティ (ユーザー名、パスワード、トークン) が ​.yaml​ ファイルで暗号化された Salesforce Connector 設定を示しています。

config extension2

値が暗号化されていない場合でもセキュアなプロパティファイル内のすべての値にアクセスできるように、​secure::​ プレフィックスがプロパティ名の定義の前に追加されます。

[Test Connection (接続をテスト)]​ をクリックすれば、接続が期待どおりに機能していることを確認し、セキュアなプロパティが正常に読み取られることを保証できます。

ファイルレベル暗号化

セキュア設定プロパティモジュールのバージョン 1.1.0 以降では、各プロパティの値だけでなく、ファイル全体を暗号化できるようになっています。XML または Anypoint Studio の両方でファイルを暗号化できます。

XML フローで、​fileLevelEncryption​ 属性を追加して ​true​ に設定します。

<secure-properties:config key="${runtime.property}" file="file1.yaml" fileLevelEncryption="true" name="test">
    <secure-properties:encrypt algorithm="AES" mode="CBC"/>
</secure-properties:config>

Studio の [Secure Configuration Properties (セキュア設定プロパティ)] ウィンドウで、​[File level encryption (ファイルレベル暗号化)]​ に ​[True]​ を選択します。

config extension3

セキュア設定プロパティのユースケース

セキュア設定プロパティに関する次のユースケースを確認してください。このユースケースでは、フローで暗号化された値と暗号化されていない値を使用する方法、セキュア設定プロパティファイルを動的に設定する方法、複数の設定ファイルを使用する方法を学ぶことができます。

暗号化された値と暗号化されていない値

次の例では、フローで暗号化された ​encrypted.value1​ 値を使用してペイロードを設定する方法を示しています。実行時には、復号化アルゴリズムによって ​encrypted.value1​ を復号化した値をメモリに格納します。

<flow name="main">
    <set-payload value="${secure::encrypted.value1}"/>
</flow>

次の例では、フローで同じセキュアプロパティファイルから暗号化されていない値を使用する方法を示しています。

<flow name="mainNonEncrypted">
    <set-payload value="${secure::testPropertyA}"/>
</flow>

セキュア設定プロパティファイルを動的に設定する

一般的な設定のユースケースとして、プロパティ (例: env​) によって使用するファイルを決定するようにファイルを設定することができます。
たとえば、開発フェーズ中に (暗号化できなかった) ​development-properties​ ファイルと (暗号化された値を使用する) 本番ファイルのどちらかを使用するように設定できます。

環境ファイルが定義されたセキュア設定プロパティ

<secure-properties:config key="${runtime.property}" file="${env}-properties.yaml" name="test"/>

この方法を使用すると、​env​ プロパティの値によって、セキュア設定プロパティを読み込むために使用するファイルが決定されます。その ​env​ プロパティは、​global property​、システムプロパティ、または環境プロパティで設定することもできます。

環境ファイルが定義されたセキュアなグローバル設定プロパティ

<global-property name="env" value="dev"/>

<secure-properties:config key="${runtime.property}" file="${env}-properties.yaml" name="test"/>

この方法を使用すると、​env​ プロパティのデフォルト値は ​"dev"​ になりますが、システムプロパティや環境プロパティで上書きすることはできます。Anypoint Studio では、この方法はメタデータの解決に​必須​となります。コマンドラインで渡されるプロパティのデフォルト値を定義しないと、それらのプロパティに連動するすべてのメッセージプロセッサーのアプリケーションモデルを作成するときにエラーが発生します。

複数の設定ファイルを操作する

プロパティを読み込む設定ファイルを複数定義することができます。必要なのは、読み込みたい各ファイルに対して ​<secure-properties:config />​ タグを定義するだけです。各セキュア設定プロパティファイルは、それぞれの暗号化アルゴリズム、暗号化モード、そして暗号化/復号化キーによって独立して設定されます。これらの設定はファイル間で同じになるとは限りません。
次の例は、複数の設定ファイルの使用方法を示しています。

<secure-properties:config key="${runtime.property}" file="file1.yaml" name="test">
    <secure-properties:encrypt algorithm="AES" mode="CBC"/>
</secure-properties:config>

<secure-properties:config key="${runtime.property}" file="file2.yaml" name="otherConfig">
    <secure-properties:encrypt algorithm="AES" mode="CBC"/>
</secure-properties:config>

サポートされる設定ファイル種別

  • Spring 形式のプロパティ: .properties

  • YAML: .yaml

サポートされているアルゴリズムとモード

サポートされているアルゴリズム

  • AES (デフォルト)

  • Blowfish

  • DES

  • DESede

  • RC2

  • RCA

次のアルゴリズムは、サポートが追加される Java Cryptography Extension (JCE) プロバイダー​を設定する場合のみ使用できます。

  • Camellia

  • CAST5

  • CAST6

  • Noekeon

  • Rijndael

  • SEED

  • Serpent

  • Skipjack

  • TEA

  • Twofish

  • XTEA

  • RC5

  • RC6

サポートされているモード

  • CBC (デフォルト)

  • CFB

  • ECB

  • OFB

よくある質問と回答

セキュア設定プロパティファイルについて学び、作成して、しばらく使用したら、トラブルシューティングおよびその最大限の活用法についてさらに疑問が生まれる可能性もあります。一般的な質問と回答をいくつか紹介します。「関連情報」でリンクしているトピックも参照してください。

複数のファイルで同じプロパティを設定したらどうなりますか?

その場合は、最初に定義されたプロパティの値が実際のプロパティ値となります。

以前に定義したセキュアプロパティに依存するセキュアプロパティを定義できますか?

はい。単に同じ構文を使用するだけです: property=My dependent ${secure::dependent.property} value​。

セキュア設定プロパティは他のセキュア設定プロパティには依存できますが、他の Mule 設定プロパティには依存できません。