The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

設定のシークレット

暗号化された設定値を使用して、機密性の高いパスワード、シークレット、トークン、キーを保護してください。

シークレット設定は、 ${handler::value} のように表現できます。 handler は、 value をデコードまたは復号化するための io.smallrye.config.SecretKeysHandler の名前です。

設定値の暗号化

設定値を暗号化し、後で復号化するには、以下のマネージド依存関係を追加します:

pom.xml
<dependency>
    <groupId>io.smallrye.config</groupId>
    <artifactId>smallrye-config-crypto</artifactId>
</dependency>

QuarkusのCLIコマンドを使用して、 新しい暗号化された値を追加するか、 application.properties の既存の値を暗号化します:

コマンドラインインタフェース
quarkus config set --encrypt my.secret 1234

Quarkus CLIのインストール方法や使用方法については、 Quarkus CLIガイド を参照してください。

設定プロパティ my.secret は、値 1234 が暗号化され、 Base64 でエンコードされ、値を復号化するために必要なシークレットハンドラを持つ式 ${aes-gcm-nopadding::} とともに application.properties に追加されます。 存在しない場合は、暗号化キーも生成され、 smallrye.config.secret-handler.aes-gcm-nopadding.encryption-key に設定されます。

my.secret=${aes-gcm-nopadding::DLTb_9zxThxeT5iAQqswEl5Dn1ju4FdM9hIyVip35t5V}

smallrye.config.secret-handler.aes-gcm-nopadding.encryption-key=DDne5obnfH1RSeTg71xSZg
デフォルトのシークレットハンドラーは AES/GCM/NoPadding アルゴリズムを使用し、 value を復号するために ${aes-gcm-nopadding::value} 式を必要とします。

暗号化された設定の読み取り

Quarkusの設定システムでは、 my.secret を検索する際に、設定値が自動的に復号化されます。

値の暗号化に使用された暗号化キーは、値の復号化に使用され、 smallrye.config.secret-handler.aes-gcm-nopadding.encryption-key に設定されたものと同じでなければなりません。

class BusinessBean {
    @Inject
    SmallRyeConfig config;

    public void businessMethod() {
        ConfigValue mySecret = config.getConfigValue("my.secret");
        mySecret.getValue(); (1)
    }
}
1 1234 を返します。

キーストアへのシークレットの保存

暗号化された値を持つことは、平文の値よりも良いことですが、 application.properties で設定することは避けたいと思います。

Java KeyStoreは、ファイルベースの Vault として使用できます。 機密データをこの Vault にインポートし、Java SecretKey 値として安全に保存することができます。 KeyStore ConfigSource を使用するには、以下のマネージド依存関係を追加します:

<dependency>
    <groupId>io.smallrye.config</groupId>
    <artifactId>smallrye-config-source-keystore</artifactId>
</dependency>

KeyStoreの作成

次のコマンドは、単純なKeyStoreを作成します:

echo DLTb_9zxThxeT5iAQqswEl5Dn1ju4FdM9hIyVip35t5V | keytool -importpass -alias my.secret -keystore properties -storepass arealpassword -storetype PKCS12 -v

-alias my.secret オプションは、設定プロパティ名 my.secret を値 DLTb_9zxThxeT5iAQqswEl5Dn1ju4FdM9hIyVip35t5V と共にキーストアに格納します。 -storepass arealpassword は、キーストアにアクセスするために必要なパスワードです。

暗号鍵を安全に保管する必要もあります。鍵は他のシークレットと一緒に保存すべきではありません。 そのため、鍵用に別の KeyStore を作成することが出来ます:

echo DDne5obnfH1RSeTg71xSZg | keytool -importpass -alias smallrye.config.secret-handler.aes-gcm-nopadding.encryption-key -keystore key -storepass anotherpassword -storetype PKCS12 -v

KeyStoreの使用

新しく作成した KeyStore を使用するには、以下の設定を application.properties に追加します:

smallrye.config.source.keystore."properties".path=properties (1)
smallrye.config.source.keystore."properties".password=arealpassword (2)
smallrye.config.source.keystore."properties".handler=aes-gcm-nopadding (3)

smallrye.config.source.keystore."key".path=key (4)
smallrye.config.source.keystore."key".password=anotherpassword (5)
1 secretsプロパティを持つ´KeyStore`へのパス
2 KeyStore のシークレットを抽出するための KeyStore パスワード
3 KeyStore シークレットを復号化する SecretKeyHandler
4 暗号化キーが格納されている´KeyStore`へのパス。
5 暗号鍵を取り出すことが出来る KeyStore パスワード

KeyStoreパスワードの保護

Quarkusがキーストアからシークレットを抽出できるようにするには、 application.propertiesKeyStore パスワードを指定する必要があります。 このキーストアのパスワードは機密性の高い値であるため、漏洩のリスクを最小限に抑え、保護する方法を検討する必要があります。

注意すべき重要な点として、権限のないユーザーも実際のキーストアにアクセスする必要があるため、このパスワードが漏れたとしても、キーストアに保存されている実際のシークレットが漏れるとは限らないということがあります。 キーストアファイルへのアクセスを限られたロールに制限し、そのロールの1つでQuarkusプロセスを実行させることで、グループ外の人がキーストアにアクセスしにくくなります。 キーストアパスワードは環境変数として設定できます。攻撃者がキーストアにアクセスできる時間を制限するために、このパスワードを定期的に変更する必要があります。