プロキシーレジストリーの使用
previewこのガイドの項目:
-
グローバルプロキシーの設定方法
-
名前付きプロキシーの設定方法
-
クレデンシャルプロバイダーとの統合方法
はじめに
プロキシーは、アプリケーションと外部サービスの間で仲介役として機能します。アプリケーションは、リモートホストに直接接続する代わりに、プロキシーサーバーを経由してリクエストを送信します。その後、プロキシーサーバーはリクエストを宛先に転送します。
Java アプリケーションでは、プロキシーは、直接的なアウトバウンドネットワークアクセスが制限されている環境で一般的に必要とされます。これは、企業ネットワークや、厳格なセキュリティールールを持つクラウド環境で典型的です。また、トラフィックの検査と監査を必要とする本番システムでも頻繁に要求されます。
プロキシーは一般的に次の目的で使用されます。
-
アウトバウンドネットワークアクセスを制御および制限する
-
セキュリティーおよびネットワークポリシーを適用する
-
外部接続に認証を提供する
-
発信トラフィックを監視およびログに記録する
プロキシー設定
多くの Java アプリケーションは、プロキシーサポートを有効にするために JVM システムプロパティーまたはクライアント固有の設定に依存しています。このアプローチは、設定の重複やクライアント間での一貫性のない動作につながる可能性があります。
Quarkus は、プロキシーレジストリーを使用してプロキシーを設定する一元的な方法を提供します。すべてのプロキシー設定は、quarkus.proxy 設定ルートの下で定義されます。
以下を設定できます。
-
デフォルト (グローバル) プロキシー
-
エクステンションが参照できる 1 つ以上の名前付きプロキシー
Quarkus プロキシーレジストリーとすでに統合されている Quarkus エクステンションには、以下が含まれます。
-
quarkus-cxf (バージョン 3.31.0 以降)
デフォルトプロキシーの設定
デフォルト (グローバル) プロキシーを設定するには、application.properties に以下のプロパティーを追加します。
quarkus.proxy.host=localhost (1)
quarkus.proxy.port=8443 (2)
quarkus.proxy.type=HTTP (3)
-
プロキシーホスト
-
プロキシーポート
-
プロキシータイプ。可能な値は
HTTP(デフォルト)、SOCKS4、およびSOCKS5です。
プロキシーレジストリーを認識するエクステンションは、名前付きプロキシーがエクステンションの設定で明示的に参照されない限り、デフォルトプロキシーを使用します。
名前付きプロキシーの設定
名前付きプロキシーを使用すると、異なるクライアントまたはエクステンションで異なるプロキシー設定を使用できます。
次の例では、2 つの名前付きプロキシーを定義しています。
quarkus.proxy.local.host=localhost
quarkus.proxy.local.port=3333
quarkus.proxy.local.type=SOCKS5
quarkus.proxy.my-proxy.host=localhost
quarkus.proxy.my-proxy.port=8443
quarkus.proxy.my-proxy.type=HTTP
quarkus.proxy.my-proxy.non-proxy-hosts=proxy.mycompany.com,proxy.org.acme (1)
-
プロキシーをバイパスする必要があるホスト名または IP アドレス
この例では、local と my-proxy という 2 つの名前付きプロキシーが設定されています。エクステンションは必要に応じてこれらのプロキシーを名前で参照できます。
クレデンシャルの使用
プロキシー認証は、username および password プロパティーを使用して直接設定できます。
quarkus.proxy.my-proxy.host=localhost
quarkus.proxy.my-proxy.port=8443
quarkus.proxy.my-proxy.type=HTTP
quarkus.proxy.my-proxy.non-proxy-hosts=proxy.mycompany.com,proxy.org.acme
quarkus.proxy.my-proxy.username=${PROXY_USERNAME}
quarkus.proxy.my-proxy.password=${PROXY_PASSWORD}
クレデンシャルは環境変数を使用して外部化できます。クレデンシャルは、他のサポートされている Quarkus 設定ソースを使用しても外部化できます。
クレデンシャルプロバイダーを介したクレデンシャルの提供
設定でクレデンシャルを直接定義する代わりに、Quarkus クレデンシャルプロバイダーと統合できます。これにより、クレデンシャルを外部システム (Vault やシークレットマネージャーなど) から安全に取得できます。
この機能は、クレデンシャルプロバイダー 機能に依存しています。
プロキシー認証用のクレデンシャルプロバイダーを設定するには、次のプロパティーを使用します。
quarkus.proxy.host=localhost
quarkus.proxy.port=3838
quarkus.proxy.credentials-provider.name=credential
quarkus.proxy.credentials-provider.bean-name=credentialBean
quarkus.proxy.credentials-provider.username-key=userKey
quarkus.proxy.credentials-provider.password-key=passwordKey
プロキシーレジストリーはクレデンシャルを自動的に取得し、プロキシー設定に適用します。
クレデンシャルが適用される方法
プロキシーがクレデンシャルプロバイダーで設定されている場合、プロキシーレジストリーは起動時にクレデンシャルを自動的に取得します。取得されたクレデンシャルはプロキシー設定に適用されます。
動作は次のとおりです。
-
usernameとpasswordが明示的に設定されている場合は、それらが使用されます。 -
それ以外の場合、クレデンシャルプロバイダーが設定されている場合は、プロバイダーからクレデンシャルが取得されます。
-
クレデンシャルが設定されていない場合、プロキシーは認証なしで使用されます。
username または password のいずれかのみが定義されている場合、アプリケーションは起動時に失敗します。クレデンシャルがプロバイダーから取得できない場合も、アプリケーションは失敗します。どちらの場合も、設定エラーが報告されます。
これにより、プロキシー設定が早期に検証されます。この検証は、すべてのクライアントとエクステンションで一貫しています。
設定リファレンス
ビルド時に固定される設定プロパティー - 他のすべての設定プロパティーは実行時にオーバーライド可能
Configuration property |
タイプ |
デフォルト |
|---|---|---|
string |
||
int |
||
Name of the credential bucket to retrieve from the A credentials provider offers a way to retrieve the key store password as well as alias password. Note that the credentials provider is only used if the username and password are not set in the configuration. Environment variable: Show more |
string |
|
Name of the bean providing the credentials provider. The name is used to select the credentials provider to use. The credentials provider must be exposed as a CDI bean and with the If not set, the default credentials provider is used. Environment variable: Show more |
string |
|
The key used to retrieve the username from the credentials provider. If username, password or both cannot be retrieved from the credentials provider, an exception is thrown. Environment variable: Show more |
string |
|
The key used to retrieve the password from the credentials provider. If username, password or both cannot be retrieved from the credentials provider, an exception is thrown. Environment variable: Show more |
string |
|
Proxy username. See also Environment variable: Show more |
string |
|
Proxy password See also Environment variable: Show more |
string |
|
Hostnames or IP addresses to exclude from proxying Environment variable: Show more |
文字列のリスト |
|
Proxy connection timeout. Environment variable: Show more |
|
|
The proxy type. Possible values are: Environment variable: Show more |
|
|
Proxy host. Environment variable: Show more |
string |
|
Proxy port Environment variable: Show more |
int |
|
Name of the credential bucket to retrieve from the A credentials provider offers a way to retrieve the key store password as well as alias password. Note that the credentials provider is only used if the username and password are not set in the configuration. Environment variable: Show more |
string |
|
Name of the bean providing the credentials provider. The name is used to select the credentials provider to use. The credentials provider must be exposed as a CDI bean and with the If not set, the default credentials provider is used. Environment variable: Show more |
string |
|
The key used to retrieve the username from the credentials provider. If username, password or both cannot be retrieved from the credentials provider, an exception is thrown. Environment variable: Show more |
string |
|
The key used to retrieve the password from the credentials provider. If username, password or both cannot be retrieved from the credentials provider, an exception is thrown. Environment variable: Show more |
string |
|
Proxy username. See also Environment variable: Show more |
string |
|
Proxy password See also Environment variable: Show more |
string |
|
Hostnames or IP addresses to exclude from proxying Environment variable: Show more |
文字列のリスト |
|
Proxy connection timeout. Environment variable: Show more |
|
|
The proxy type. Possible values are: Environment variable: Show more |
|
|
|
期間フォーマットについて
期間の値を書くには、標準の 数字で始まる簡略化した書式を使うこともできます:
その他の場合は、簡略化されたフォーマットが解析のために
|