アプリケーションプロパティを安全に隠す

logo cloud active logo hybrid disabled logo server disabled logo pcf disabled

CloudHub では、安全な隠しアプリケーションプロパティがサポートされています。つまり、プロパティの名前は Runtime Manager コンソールに表示されますが、値はどのユーザにも表示されず、取得することもできません。プロパティは機密情報を公開せずに実行時に解決されます。

内部では、安全な隠しアプリケーションプロパティは暗号化され、MuleSoft 管理 CloudHub プロパティデータベースに保存されます。このデータベースはユーザ組織ごとに暗号化されます。

CloudHub ワーカーにデプロイされたアプリケーションの場合、隠しアプリケーションを設定するには Runtime Manager UI を使用する必要があります。その他のデプロイメント戦略でデプロイするアプリケーションでは、アプリケーションの ZIP ファイルにバンドルされるセキュアなプロパティプレースホルダファイルを使用する必要があります。

安全な隠しアプリケーションプロパティは、セキュアな設定プロパティファイルに保存される暗号化された Mule アプリケーションのプロパティとは別の機能および概念です。

概要

アプリケーションプロパティは、Mule アプリケーションでプレースホルダとして動作する変数で、実行時に Mule Runtime で設定されます。Runtime Manager コンソールでアプリケーションをデプロイ、または既存のアプリケーションを更新するときに、Mule Runtime Engine は Runtime Manager コンソールの [Properties (プロパティ)] タブで設定される情報を使用してプロパティの変数の値を提供します。

ユースケース

たとえば、ユーザ名が ${dbUsername}、パスワードが ${dbPassword} に設定される JDBC コネクタを設定できます。Runtime Manager コンソールで、次のようにこれら 2 つのプロパティをアプリケーションプロパティとして設定できます。

dbproperties

機密情報の場合は、これらのプロパティに非表示としてフラグを付けることができます。そうすると、Runtime Manager で入力および保存された後、それらの値はコンソールに表示されず、コンソールと CloudHub サーバの間で渡されることもありません。

安全な隠しアプリケーションプロパティの作成

Mule 4.0 以降で安全な隠しアプリケーションプロパティを作成する手順は、次のとおりです。

  1. Mule アプリケーションの mule-artifact.json ファイル内で、安全に隠すプロパティ名を secureProperties キーにカンマ区切り配列としてリストします。例の 5 行目で、2 つのプロパティにセキュアのフラグが付けられています。 (省略可能) config.yaml でローカルテスト用の値を使用して 4 つのプロパティを定義します。

config.yaml
http:
    port: 8081
username: "testuser"
password: "testpass123"
birthdate: "01/01/2015"
mule-artifact.json
{
  "configs": [
    "secure-properties.xml"
  ],
  "secureProperties": ["password", "birthdate"],
  "redeploymentEnabled": true,
  "name": "secure-properties",
  "minMuleVersion": "4.1.1",
  "requiredProduct": "MULE_EE",
  "classLoaderModelLoaderDescriptor": {
    "id": "mule",
    "attributes": {
      "exportedResources": []
    }
  },
  "bundleDescriptorLoader": {
    "id": "mule",
    "attributes": {}
  }
}
secureProperties エントリは、定義されている場所 (または定義されているか否か) に関係なく、すべてのプロパティに影響します。

Mule 3 で安全な隠しアプリケーションプロパティを作成するには、mule-app.properties ファイルにプロパティを配置する必要があります。次に例を示します。

db.user=john
db.password=mypassword
salesforce.user=john1
salesforce.password=mysfpassword
secure.properties=db.password,salesforce.password
  1. Mule アプリケーションを CloudHub にデプロイします。

  2. 通常どおりにアプリケーションプロパティを入力します。

dbproperties2
  1. デプロイメントまたは更新をコミットします。アプリケーションがデプロイされたら、[Deployment (デプロイメント)] タブに移動し、アプリケーションプロパティをチェックします。安全な隠しプロパティとしてマークしたすべてのプロパティの値は、これで自分にも他のユーザにも表示されなくなります。次の例では、birthdate (生年月日) と password (パスワード) は安全に隠されますが、username (ユーザ名) は表示されます。

dbproperties3

値をコミットし、アプリケーションをアップロードしたら、安全な隠しプロパティはコンソールに表示されなくなります。また、コンソールと CloudHub サーバの間で送受信されることもありません。一旦設定したプロパティを取得する方法はありません。ただし、新しい値で上書きすることはできます。値を更新する必要がある場合は、次のように項目に新しい値を入力します。

dbproperties4

安全な隠しアプリケーションプロパティを持つアプリケーションがデプロイされたら、CloudHub ではそれらのプロパティのセキュリティフラグが維持されます。アプリケーションファイルを編集して mule-artifact.json ファイルから secureProperties 定義を削除し、編集したアプリケーションファイルを CloudHub にアップロードしたとしても、CloudHub では安全な隠しプロパティとして以前にフラグが付けられたプロパティの非表示が維持されます。

Sandbox 間での安全な隠しアプリケーションプロパティのコピー

アプリケーションを Sandbox 間で移動するとき、安全な隠しアプリケーションプロパティの値は新しい環境にコピーされません。すべての安全な隠しアプリケーションプロパティの名前はコピーされますが、値は空白のままになります。

暗号化されたアプリケーションプロパティと安全な隠しアプリケーションプロパティ

Mule アプリケーションでは、セキュアなプロパティプレースホルダを使用して、値が暗号化されたプロパティを保存することもできます。

セキュアな設定プロパティの作成と使用についての詳細は、「セキュアな設定プロパティ」を参照してください。

Mule アプリケーションでは、暗号化されたプロパティを使用して、Mule アプリケーションのデプロイ可能な .jar アーカイブファイル内にセキュアなプロパティプレースホルダファイルがバンドルされます。

セキュアなプロパティプレースホルダは、暗号化されたプロパティを含むファイルと、セキュアなプロパティ値を暗号化するために使用される暗号化アルゴリズムの詳細の組み合わせで構成されます。セキュアなプロパティは、秘密鍵を使用して暗号化されます。秘密鍵は、Mule アプリケーション内には絶対に保存しないでください。その代わりに、デプロイ時に秘密鍵値を安全 (セキュア) に渡す必要があります。

Mule アプリケーションに秘密鍵を安全に渡すには、秘密鍵値を表すプロパティプレースホルダを使用して Mule アプリケーションを開発します。オペレータがデプロイ時に秘密鍵値を安全に渡すには、いくつかの方法があります。

ファイルシステムとコマンドラインにアクセスできるオンプレミスのデプロイメントでは、システム環境変数を設定することで Mule Runtime のスタートアップ時に秘密鍵を渡すことができます。ファイルシステムがセキュリティで保護されている場合は、ファイルシステムにある特別なセキュアフォルダに秘密鍵を保存することもできます。Mule アプリケーションの制限付き権限でスタートアップ時に秘密鍵を読み取るようにすると安全です。

秘密鍵がメモリに読み込まれたら、Mule アプリケーションではそれを使用してセキュアなプロパティプレースホルダのその他すべてのプロパティを復号化し、復号化された値はメモリに保存されます。Mule アプリケーションをセキュリティで保護するには、Mule アプリケーションのメモリまたは JVM メモリを誰も読み取ることができないよう、Mule Runtime のホストへのアクセスをロックダウンすることが重要です。

セキュリティプロパティモジュールを使用して定義されたプロパティに、mule-artifact.json ファイルで secure properties を指定するときには、secure:: プレフィックスを忘れずに追加してください。

暗号化されたプロパティを使用する CloudHub アプリケーションの開始

Mule アプリケーションは、セキュアなプロパティプレースホルダファイルに暗号化されたプロパティが保存されるよう開発することもできます。

CloudHub デプロイメントの場合、オペレータには CloudHub ワーカーのファイルシステムへのアクセス権がなく、コマンドラインにログインして CloudHub ワーカーをスタートアップすることもできないため、お客様がホストするデプロイメントで説明したセキュアなデプロイメントアプローチは CloudHub ではどれも使用できません。

また、Mule アプリケーションの mule-artifact.json ファイルの secureProperties エントリに、暗号化されたプロパティの名前をリストすることで、暗号化されたプロパティに安全な隠しアプリケーションプロパティとしてフラグを付けることもできます。具体的には、暗号化されたプロパティを復号化するために使用する秘密鍵を、mule-artifact.json ファイルの secureProperties 鍵で安全な隠しプロパティとして設定できます。

例を挙げます。

config.yaml
http:
    port: 8081
username: "testuser"
password: "![r8weir09458riwe0r9484oi]"
birthdate: "01/01/2015"
mule-artifact.json
{
  "configs": [
    "secure-properties.xml"
  ],
  "secureProperties": ["secure::password", "birthdate", "secure.key"],
  "redeploymentEnabled": true,
  "name": "secure-properties",
  "minMuleVersion": "4.1.1",
  "requiredProduct": "MULE_EE",
  "classLoaderModelLoaderDescriptor": {
    "id": "mule",
    "attributes": {
      "exportedResources": []
    }
  },
  "bundleDescriptorLoader": {
    "id": "mule",
    "attributes": {}
  }
}

その後、デプロイ時に、オペレータは Runtime Manager の [Properties (プロパティ)] タブに secure.key 値を入力できます。 安全な鍵には、コンソールに表示されないようフラグが付けられているため、オペレータが入力している内容は誰にも表示されません。

秘密鍵が Mule アプリケーションに渡されたら、お客様がホストするデプロイメントと同じように、暗号化されたプロパティがメモリ内に複合化されます。CloudHub ワーカーは高度なセキュリティで保護されているので、これを CloudHub で行うと安全です。CloudHub ワーカーのコマンドラインはアクセス不可能で、侵入者が CloudHub ワーカーのメモリまたは JVM プロパティを読み取る手立てもありません。

暗号化されたプロパティの上書き方法

セキュアなプロパティプレースホルダファイル内で Mule アプリケーションにバンドルされる暗号化されたプロパティは、Runtime Manager の [Properties (プロパティ)] タブには表示されません。これによって値は Mule アプリケーション内部に安全にロックされます。

Runtime Manager コンソールは秘密鍵にアクセスできないため、暗号化された値を更新するには、Mule アプリケーションのソースファイルを開き、暗号化された新しい値を秘密鍵と共に記録した後、Mule アプリケーションのデプロイ可能なアーカイブを再生成する必要があります。

多くの環境では、ユーザがこの作業を行うことは不可能であるため、Mule アプリケーションを開発者に送り返して、この作業を依頼する必要があります。ただし、暗号化されているプロパティを安全に上書きできるように Mule アプリケーションを設計する方法もあります。

暗号化されたプロパティの名前が Mule アプリケーションの mule-artifact.jsonsecureProperties エントリにもリストされている場合、アプリケーションがデプロイされると、複合化されるプロパティと同じく、この暗号化されたプロパティの値も Runtime Manager の [Properties (プロパティ)] タブには表示されません。

複合化された値は Mule ワーカーのメモリと、ユーザアカウントの CloudHub データベースに安全に保存されます。これらの復号化された値は、CloudHub ワーカーのファイルに保存されたリ、(Runtime Manager コンソールを含む) その他のマシン間で渡されたりすることは決してありません。

したがって、Mule アプリケーションの secureProperties エントリで安全な隠しプロパティとしてもマークされている暗号化されたプロパティの場合は、暗号化されたプロパティをクリアテキスト値に安全に置き換えることができます。クリアテキスト値は、CloudHub プロパティデータベースに安全に保存され、Mule アプリケーションが開始されるたびに、Mule アプリケーションに安全に渡されます。

アプリケーションがデプロイされると、新しい値は非表示になり、二度と参照することはできません。

つまり、アプリケーションで CloudHub の [Properties (プロパティ)] タブでセキュアなプロパティを上書きするときには、値を暗号化する必要がありません。このシナリオでは、セキュアアプリケーションのデプロイまたは再デプロイ時にアプリケーションのソースファイルの値へのアクセス権を持つユーザのみが、セキュアなプロパティを上書きできます。

セキュアなプロパティを上書きする必要があるケースとしては、本番アプリケーションで db.userdb.password という 2 つのプロパティに保存されているデータベースユーザとパスワードを更新する必要がある場合などがあります。アプリケーションで CloudHub の [Properties (プロパティ)] タブで新しい db.userdb.password の値を入力して、アプリケーションを起動または再起動します。これにより、新しいアプリケーションでは、このセキュアなログイン情報をダウンタイムなしでアップグレードできます。すべての連動アプリケーションを移行したら、古いアカウントの使用を停止できます。

プロパティを更新するときは、アプリケーションの [Properties (プロパティ)] タブにあるリストビューを使用します。テキストビューを使用してプロパティを更新する場合は、secure\:\:someproperty のように、プロパティ名に含まれるコロンをエスケープする必要があります。

CloudHub ワーカーにのみデプロイされる Mule アプリケーション

CloudHub ワーカーにのみデプロイされる Mule アプリケーションのプロパティを暗号化しない場合は、Mule アプリケーションの mule-artifact.json ファイルの secureProperties エントリで、これらのプロパティに安全な隠しプロパティとしてのフラグを付けることができます。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub