[MuleSoft]セキュアプロパティの設定


## 1. プロパティの暗号化

### 1.1 セキュアプロパティツールJarファイルをダウンロードします。
[セキュアプロパティツールを使用してプロパティを暗号化する](https://docs.mulesoft.com/jp/mule-runtime/latest/secure-configuration-properties#secure_props_tool)からダウンロードできます。

### 1.2 プロパティ（文字列）を暗号化します。
```sh
java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool \
string \
encrypt \
Blowfish \
CBC \
mulesoft \
"password"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/9315a1f7-5b2d-9f37-f207-cf364b1a6f8d.png)

### 1.3 プロパティファイルに暗号化したプロパティを追加します。
properties-dev-secure.yamlファイルを作成し、暗号化したプロパティを![]で追加します。
```yaml
tls:
  keystore:
    keyPassword: "![Qvg+/L86Aw7HxUc+4uszNw==]"
    password: "![Qvg+/L86Aw7HxUc+4uszNw==]"
```

## 2. Muleアプリケーションの設定

### 2.1 Anypoint Studioで「Mule Secure Configuration Properties Extension Module」を追加します。
「Search in Exchange」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/f7407c38-7804-f657-607e-7c171d5b7aa7.png)
「secure」で検索し「Mule Secure Configuration Properties Extension Module」をAddします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/44df850d-284c-f1d9-db16-b43a93e229b3.png)

### 2.2 1.3で作成したプロパティファイルを「Secure Configuration Properties」に登録します。

Global Elements画面で「Create」をクリックし、「Secure Properties Config」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/6ab61f42-d3ee-30ca-0271-c9c01414c470.png)
必要な情報を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/45e6686e-0f3c-781c-3de8-614a36c35efa.png)

```xml
	<secure-properties:config
		name="securePropertiesConfig"
		doc:name="Secure Properties Config"
		doc:id="66d97761-a04b-4323-9c8c-19f0adfc9677"
		file="properties-${env}-secure.yaml"
		key="${secure.key}">
		<secure-properties:encrypt
			algorithm="Blowfish" />
	</secure-properties:config>
```

### 2.3 登録したセキュアなプロパティファイル内の値にアクセスします。
セキュアなプロパティファイル内の値にアクセスするには、値が暗号化されていない場合でも ​secure::​ プレフィックスを使用する必要があります。

例えば以下のようにアクセスできます。

```xml
	<tls:context
		name="TLS_Context"
		doc:name="TLS Context"
		doc:id="95e36dfe-ba2a-43cf-b21c-5fe01e7124ab">
		<tls:key-store
			type="${tls.keystore.type}"
			path="${tls.keystore.path}"
			alias="${tls.keystore.alias}"
			keyPassword="${secure::tls.keystore.keyPassword}"
			password="${secure::tls.keystore.password}" />
	</tls:context>
```

## 3. Safely Hide Application Properties

mule-artifact.jsonを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/02431115-00e5-6191-d296-6123e092c4cd.png)

## 4. Muleアプリケーションのデプロイ

Anypoint StudioでMule Appを実行する場合、JVM引数を設定する必要があります。

```
-M-Denv=dev -M-Dsecure.key=mulesoft
```

CloudHubへデプロイする際に、Runtime Manager画面にてPropertiesのenvとsecure.keyを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/cf35b195-8ae2-3a5d-e8ab-149f02fb1df1.png)
デプロイ後のPropertiesのsecure.keyとanypoint.platform.client_secretがSafely Hideになっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/b4283678-a24e-f62b-be4a-6bfe4eb9a1c4.png)


## 参考情報

* [セキュア設定プロパティ](https://docs.mulesoft.com/jp/mule-runtime/latest/secure-configuration-properties)
* [Safely Hide Application Properties](https://docs.mulesoft.com/cloudhub/secure-application-properties)