Mule 4 のゲートウェイ起動暗号化

ゲートウェイ起動暗号化を使用すると、ポリシー、コントラクトや、Mule アプリケーションと Anypoint Platform 間の接続の設定に必要なログイン情報など、Mule Runtime Engine により保存される機密情報を暗号化できます。

エージェントを使用した Anypoint Platform ログイン情報の暗号化

最も短い時間でクライアントのログイン情報を保護する方法は、Runtime Manager エージェントを介して暗号化を設定する方法です。エージェントサーバの作成時に暗号化キーを追加する必要があります。これで、エージェントはプロパティの暗号化を自動的に処理します。
暗号化を使用してエージェントを設定する方法についての詳細は、​「Runtime Manager エージェントのインストールと設定」​を参照してください。

クライアント ID とシークレットの暗号化

エージェントを使用しなくても、プロパティを手動で暗号化できます。

最も一般的な方法は​セキュアプロパティツール​を使用することです。
暗号化されたプロパティを使用すると、API ゲートウェイは、CBC モードで AES アルゴリズムが使用されていると仮定します。

クライアント ID が ​bb458e566cba4e2ea5a826d27b46031a​ であり、暗号化キーを 128 ビット文字列 ​MyEncryptionKey1​ とするように選択したとします。これを暗号化するには、次のコマンドを実行する必要があります。

> java -jar secure-properties-tool.jar \
string \ (1)
encrypt \ (2)
AES \ (3)
CBC \
MyEncryptionKey1 \ (4)
bb458e566cba4e2ea5a826d27b46031a
1 1 つの値を暗号化するため、文字列パラメータを使用してその値を指定する必要があります。
2 値を暗号化するようにツールを設定します。
3 CBC モードで AES を使用します。
Mule Runtime Engine は後で値を復号化する際にこの設定のみを使用するため、これは重要です。
4 最後に、暗号化キーと、暗号化する値を記述します。

暗号化されたクライアント ID は、このコマンドにより次のように出力されます。

> smzbg​+aV2HbiC9Fv8KBsZpD5PlXiplsfhZ42RWNEbHhUeZ9ZIDftljUx6sYpuQ+​b

暗号化されたクライアント ID とクライアントシークレットを渡す

ログイン情報を暗号化したら、暗号化された値を、Mule Runtime のルートフォルダの ​conf​ ディレクトリ内にある ​wrapper.conf​ ファイルで設定する必要があります。

anypoint.platform.client_id.<n>
anypoint.platform.client_secret.<n>
anypoint.platform.proxy_password.

+

設定ファイルに ​wrapper.java.additional.n​ エントリを追加する場合、​<n>​ の各インスタンスを、連続する番号に変更する必要があります。それ以外の場合、Java はプロパティを正しく解析しません。

+ 詳細は、​「JVM に追加の引数を渡して Mule を制御」​を参照してください。

上記の例では、​client_id​ は次のようになります。

anypoint.platform.client_id.<n>=![smzbg​+aV2HbiC9Fv8KBsZpD5PlXiplsfhZ42RWNEbHhUeZ9ZIDftljUx6sYpuQ+​b]
![​ プレフィックスと ​]​ サフィックスが必要です。これらは、囲まれた値が暗号化されていることを Mule Runtime Engine に示します。

保護された値を Mule Runtime Engine で復号化できるようにするには、Mule Runtime を開始するときに、​anypoint.platform.encryption_key​ プロパティを使用してシークレットキーを渡す必要があります。

$​MULE_HOME​/bin/mule start -Danypoint.platform.encryption_key=MyEncryptionKey1

Mule Runtime Engine は、​anypoint.platform.encryption_key​ プロパティに渡された暗号化キーを使用して、プロパティを復号化します。

しくみ

Anypoint Platform ログイン情報 (クライアント ID、クライアントシークレット、およびプロキシパスワード) を暗号化し、その暗号化された値を暗号化キーと共にランタイムの ​wrapper.conf​ ファイルに追加できます。

Mule Runtime Engine は起動中に暗号化キーがあるかどうかを確認します。次にクライアント ID とクライアントシークレットの値をその ​wrapper.conf​ ファイルから取得します。このファイルの一部の値が暗号化インジケータ (​![​ と ​]​) で囲まれている場合、Mule Runtime Engine は以前に読み込んだ暗号化キーを使用して値を復号化し、その元のコンテンツを使用します。

起動暗号化のデバッグ

起動中に暗号化メカニズムに関する情報を表示するようにゲートウェイロガーを設定できます。

$MULE_HOME/conf/log4j2.xml​ で、ゲートウェイデプロイの非同期ロガーをセットアップします。

...
  <AsyncLogger name="com.mulesoft.mule.runtime.gw.deployment" level="DEBUG" />
...

キーを指定すると、Mule Runtime Engine は次のメッセージを表示します。

An encryption key is present. Policies and API contracts will be encrypted.

指定しない場合、Mule Runtime Engine は次のメッセージと共に起動します。

No encryption key provided. Policies and API contracts won't be encrypted.

暗号化プロセスが失敗した場合、Mule Runtime Engine はエラーを表示します。

Client ID cannot be decrypted

ログイン情報を復号化できない場合、Anypoint Platform との接続を確立できず、ポリシーやコントラクトをダウンロードできません。

ログイン情報に関するトラブルシューティング

暗号化されたログイン情報を Anypoint Platform に渡すときに問題が発生した場合、指定したログイン情報が有効であることを確認することをお勧めします。前述のセキュアプロパティツールを使用して、値を元の値に復号化し、Anypoint Platform に表示された値と比較することができます。

  1. セキュアプロパティツールを実行してログイン情報を復号化します。

    > java -jar secure-properties-tool.jar string decrypt AES CBC <yourEncryptionKey> <>
  2. 復号化された値を Anypoint Platform 内の値と比較します。
    Anypoint Platform のログイン情報を検証する方法についての詳細は、​「ログイン情報の取得」​を参照してください。

サポートされるプロパティ

暗号化をサポートする ​wrapper.conf​ プロパティを次に示します。

プロパティ 説明

Client ID (クライアント ID)

anypoint.platform.client_id.<n>

Anypoint Platform のクライアント ID

Client Secret (クライアントシークレット)

anypoint.platform.client_secret.<n>

Anypoint Platform のクライアントシークレット

Proxy Password (プロキシパスワード)

anypoint.platform.proxy_password.<n>

Anypoint Platform に接続するためのプロキシ設定のパスワード

ポリシーの暗号化

API ポリシーの設定は ​policies​ ディレクトリに保存されています。認証されていないパーティには非表示にする必要がある機密情報 (​Basic Authentication​ ヘッダーのパスワード項目など) が一部のポリシーに含まれている場合があります。
提供された API ポリシー内の機密値は、ポリシー設定用の API Manager UI では機密としてマークされます。カスタムポリシーを作成するときに、どの値が機密かを定義することができます。

ポリシーの暗号化の設定

ポリシーの暗号化を有効にするには、​wrapper.conf​ ファイルで 2 つのシステムプロパティを提供する必要があります。

  • anypoint.platform.encryption_key.<n>​。
    ポリシーの暗号化キー。

    すべてのポリシーを暗号化した後、暗号化キーなしで Mule Runtime Engine を再起動した場合、すべてのポリシーが再度ダウンロードされますが、機密情報はどれも暗号化されません。

  • anypoint.platform.encryption_mode.<n>​。
    このプロパティは、2 つの値を取ります。

    FULL

    すべての値が暗号化されます。

    SENSITIVE_ONLY

    sensitive​ としてマークした値のみが暗号化されます。
    これはデフォルトの暗号化モードです。

    wrapper.conf​ ファイルでこのプロパティを設定しない場合、デフォルトの ​SENSITIVE_ONLY​ 暗号化モードが使用されます。
    暗号化モードは適用後に変更できます。​policies​ ディレクトリ内のファイルは、新しい暗号化モードに従って再生成されます。

    FULL​ から ​SENSITIVE_ONLY​ に変更している場合、​sensitive​ としてマークされていないすべてのパラメータはファイルシステム内でプレーンテキストとして表示されます。

暗号化をサポートするポリシー

値の暗号化がサポートされるすべてのポリシーと、その機能をサポートするために必要な最小バージョンを以下のリストに示します。
これらのポリシーの以前のバージョンと以下のリストに示されていないポリシーでは、設定内の暗号化キーがゲートウェイ機能により検出されても、ポリシーの値は暗号化されません。

ポリシー バージョン

基本認証

1.2.0 以降。

クライアント ID 適用

1.2.0 以降。

ヘッダーの挿入

1.1.0 以降。

IP ホワイトリスト

1.2.0 以降。

IP ブラックリスト

1.2.0 以降。

JWT 検証

1.1.0 以降。

Open AM

1.2.0 以降。

Open ID

1.2.0 以降。

OAuth 2.0

1.2.0 以降。

Ping Federate

1.2.0 以降。

カスタムポリシーの暗号化

新しいカスタムポリシープロジェクトの推奨の作成方法は、Maven アーキタイプを使用することです。
アーキタイプを使用して新しいカスタムポリシープロジェクトを作成する場合、​-DencryptionSupported=true​ プロパティを渡して、カスタムポリシー内の暗号化を有効にできます。
この手順についての詳細は、​「アーキタイプを使用したプロジェクトのセットアップ」​を参照してください。

カスタムポリシーを手動で開発する場合、または既存のポリシーに暗号化を追加する場合、以下の手順を実行します。

  1. 必要な連動関係をポリシーの ​pom.xml​ ファイルに追加します。
    Secure Configuration Property モジュール​連動関係を ​pom.xml​ ファイルに追加する必要があります。

    <dependency>
       <groupId>com.mulesoft.modules</groupId>
       <artifactId>mule-secure-configuration-property-module</artifactId>
       <version>$​{securePropertyModuleVersion}​</version>
       <classifier>mule-plugin</classifier>
    </dependency>
  2. Secure Properties 要素​をポリシーのテンプレートファイルに追加します。
    次のスニペットをポリシーの XML テンプレートファイルの ​<mule …​>​ 要素の後に貼り付けます。

    ​{{#if encrypted}​}
    <secure-properties:config key="$​{anypoint.platform.encryption_key}​" file="$​{encryptedPropertiesFile}​" name="encryptionConfiguration">
       <secure-properties:encrypt algorithm="AES" mode="CBC"/>
    </secure-properties:config>
    ​{{/if}​}

    この機能は CBC モードの AES アルゴリズムのみをサポートします。
    ゲートウェイ機能は、ゲートウェイの起動時に設定されたシステムプロパティから ​anypoint.platform.encryption_key​ と ​encryptedPropertiesFile​ の値を取得します。

  3. ポリシーの YAML ファイルで機密値を定義します。
    デフォルトでは、カスタムポリシー内の値は機密ではありません。要素 ​sensitive​ を使用して、値が機密かどうかを指定できます。

      configuration:
       - propertyName: username
         type: string
         sensitive: false
       - propertyName: password
         type: string
         sensitive: true //​<1>​
    1 これで、ポリシー内の ​password​ 値は機密とみなされます。

オフラインポリシーの暗号化

オフラインポリシーの設定を暗号化するには、上述の​セキュアプロパティツール​を使用して値を暗号化できます。

> java -jar secure-properties-tool.jar \
string \ (1)
encrypt \ (2)
AES \ (3)
CBC \
MyEncryptionKey1 \ (4)
bb458e566cba4e2ea5a826d27b46031a
1 1 つの値を暗号化するため、文字列パラメータを使用してその値を指定する必要があります。
2 値を暗号化するようにツールを設定します。
3 CBC モードで AES を使用します。
Mule Runtime Engine は後で値を復号化する際にこの設定のみを使用するため、これは重要です。
4 最後に、暗号化キーと、暗号化する値を記述します。

詳細は、​オフラインポリシーの割り当て​を参照してください。

コントラクトの暗号化

ゲートウェイが暗号化を使用して設定されている場合、コントラクト適用ポリシーに関連付けられているコントラクトも暗号化されます。

スコープと考慮事項

クラスタのシナリオでは、ノードごとに暗号化プロパティを設定する必要があります。それ以外の場合、一部のノードを無保護のままとすることができます。

Was this article helpful?

💙 Thanks for your feedback!