Red Hat build of Apache Camel 向け Quarkus CXF セキュリティーガイド
Red Hat が提供する Red Hat build of Apache Camel 向け Quarkus CXF セキュリティーガイド
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Apache Camel ドキュメントに関するフィードバック
エラーを報告したり、ドキュメントの改善を提案したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- 次のリンクをクリックして チケットを作成 します。
- Summary に課題の簡単な説明を入力します。
- Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
- Submit をクリックすると、課題が作成され、適切なドキュメントチームに転送されます。
第1章 Quarkus CXF セキュリティーガイド リンクのコピーリンクがクリップボードにコピーされました!
この章では、Quarkus CXF エクステンションを使用する際のセキュリティーに関する情報を提供します。
1.1. セキュリティーガイド リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーガイドには、Quarkus CXF のセキュリティーに関連するさまざまな側面が記載されています。
1.1.1. SSL、TLS、および HTTPS リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、SSL、TLS、HTTPS に関連するさまざまなユースケースを説明します。
このセクションで使用されているサンプルコードは、Quarkus CXF のソースツリーにある WS-WS-SecurityPolicy integration test からの抜粋です。
1.1.1.1. クライアント SSL 設定 リンクのコピーリンクがクリップボードにコピーされました!
クライアントが、クライアントのオペレーティングシステムによって SSL 証明書が信頼されていないサーバーと通信する場合は、クライアント用にカスタムトラストストアを設定する必要があります。
トラストストアの作成と維持には、openssl や Java keytool などのツールがよく使用されます。
Quarkus CXF ソースツリーには、両方のツールの例があります。
トラストストアを準備したら、それを使用するようにクライアントを設定する必要があります。
1.1.1.1.1. application.properties にクライアントトラストストアを設定する リンクのコピーリンクがクリップボードにコピーされました!
これは、最も簡単にクライアントトラストストアを設定できる方法です。次のプロパティーには、重要な役割があります。
以下に例を示します。
application.properties
- 1
pkcs12とjksは、よく使用される 2 つのキーストア形式です。PKCS12 は、Java 9 以降の デフォルトの Java キーストア形式 です。PKCS12 はより強力な暗号化アルゴリズムを提供し、拡張可能で、標準化されており、言語に中立で、広くサポートされているため、JKS ではなく PKCS12 を使用することを推奨します。- 2
- 参照される
client-truststore.pkcs12ファイルは、クラスパスまたはファイルシステムのいずれかで使用可能である必要があります。
1.1.1.2. サーバー SSL 設定 リンクのコピーリンクがクリップボードにコピーされました!
HTTPS プロトコル経由でサービスを利用できるようにするには、まずサーバーキーストアを設定する必要があります。サーバーの SSL 設定は、Quarkus の HTTP レイヤーである Vert.x によって実行されます。{link-quarkus-docs-base}/http-reference#ssl[Quarkus HTTP ガイド] には、設定オプションに関する情報が記載されています。
以下に基本的な例を示します。
application.properties
# Server side SSL quarkus.tls.key-store.p12.path = localhost-keystore.pkcs12 quarkus.tls.key-store.p12.password = localhost-keystore-password quarkus.tls.key-store.p12.alias = localhost quarkus.tls.key-store.p12.alias-password = localhost-keystore-password
# Server side SSL
quarkus.tls.key-store.p12.path = localhost-keystore.pkcs12
quarkus.tls.key-store.p12.password = localhost-keystore-password
quarkus.tls.key-store.p12.alias = localhost
quarkus.tls.key-store.p12.alias-password = localhost-keystore-password
1.1.1.3. 相互 TLS (mTLS) 認証 リンクのコピーリンクがクリップボードにコピーされました!
これまでは、サーバーのみが SSL 証明書を通じてアイデンティティーを証明し、クライアントがその証明書を信頼するように設定する必要がある単純なケース、つまり片側だけのケースを説明しました。相互 TLS 認証では、クライアントにも同じ公開鍵暗号化手段を使用してアイデンティティーを証明させます。
したがって、相互 TLS (mTLS) 認証の場合、上記のようにサーバーキーストアとクライアントトラストストアをセットアップすることに加えて、クライアント側のキーストアとサーバー側のトラストストアをセットアップする必要があります。
ストアを作成および維持するためのツールは同じであり、使用する設定プロパティーは Simple TLS の場合に使用されるものとほぼ類似しています。
Quarkus CXF ソースツリーの mTLS インテグレーションテスト は、適切なスタートポイントになります。
キーストアとトラストストアは、openssl (または Java Java keytool) を使用して作成されます。
application.properties ファイルは次のとおりです。
application.properties
1.1.1.4. WS-SecurityPolicy を通じて SSL を強制する リンクのコピーリンクがクリップボードにコピーされました!
クライアントが HTTPS 経由で接続するための要件は、ポリシーで定義できます。
この機能は、quarkus-cxf-rt-ws-security エクステンションにより提供されます。
以下は、ポリシーファイルの例です。
https-policy.xml
ポリシーは、サービスエンドポイントインターフェイス (SEI) から参照される必要があります。
HttpsPolicyHelloService.java
このセットアップを行うと、HTTP 経由で配信されるすべてのリクエストは PolicyVerificationInInterceptor によって拒否されます。
ERROR [org.apa.cxf.ws.pol.PolicyVerificationInInterceptor] Inbound policy verification failed: These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding: TLS is not enabled
...
ERROR [org.apa.cxf.ws.pol.PolicyVerificationInInterceptor] Inbound policy verification failed: These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding: TLS is not enabled
...
1.1.2. 認証および認可 リンクのコピーリンクがクリップボードにコピーされました!
このセクションに示されているサンプルコードは、Quarkus CXF のソースツリーにある Client and server integration test からの抜粋です。これは、実行可能な例として使用できます。
1.1.2.1. クライアント HTTP Basic 認証 リンクのコピーリンクがクリップボードにコピーされました!
quarkus-cxf エクステンションによって提供される次のクライアント設定オプションを使用して、HTTP Basic 認証のユーザー名とパスワードを渡します。
以下に例を示します。
application.properties
quarkus.cxf.client.basicAuth.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuth.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuth
quarkus.cxf.client.basicAuth.username = bob
quarkus.cxf.client.basicAuth.password = bob234
quarkus.cxf.client.basicAuth.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuth.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuth
quarkus.cxf.client.basicAuth.username = bob
quarkus.cxf.client.basicAuth.password = bob234
1.1.2.1.1. Basic 認証で保護された WSDL へのアクセス リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、quarkus.cxf.client."client-name".secure-wsdl-access を true に設定しない限り、Quarkus CXF によって作成されたクライアントは Authorization ヘッダーを送信しません。
application.properties
quarkus.cxf.client.basicAuthSecureWsdl.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuthSecureWsdl.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuthSecureWsdl
quarkus.cxf.client.basicAuthSecureWsdl.username = bob
quarkus.cxf.client.basicAuthSecureWsdl.password = ${client-server.bob.password}
quarkus.cxf.client.basicAuthSecureWsdl.secure-wsdl-access = true
quarkus.cxf.client.basicAuthSecureWsdl.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
quarkus.cxf.client.basicAuthSecureWsdl.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuthSecureWsdl
quarkus.cxf.client.basicAuthSecureWsdl.username = bob
quarkus.cxf.client.basicAuthSecureWsdl.password = ${client-server.bob.password}
quarkus.cxf.client.basicAuthSecureWsdl.secure-wsdl-access = true
1.1.2.2. 相互 TLS (mTLS) 認証 リンクのコピーリンクがクリップボードにコピーされました!
SSL、TLS、HTTPS ガイドの 相互 TLS (mTLS) 認証 セクションを参照してください。
1.1.2.3. サービスエンドポイントの保護 リンクのコピーリンクがクリップボードにコピーされました!
サーバー側の認証と認可は、特に次の場合に {link-quarkus-docs-base}/security-overview[Quarkus Security] によって実行されます。
- {link-quarkus-docs-base}/security-authentication-mechanisms[認証メカニズム]
- {link-quarkus-docs-base}/security-identity-providers[アイデンティティープロバイダー]
- {link-quarkus-docs-base}/security-authorize-web-endpoints-reference[ロールベースのアクセス制御 (RBAC)]
具体的な例は、Client and server integration test を参照してください。主に以下が含まれます。
-
アイデンティティープロバイダーとしての
io.quarkus:quarkus-elytron-security-properties-file依存関係 Basic 認証の有効化と、
application.propertiesでロールが設定されているユーザー。application.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
@RolesAllowedアノテーションによって強制されるロールベースのアクセス制御。
BasicAuthHelloServiceImpl.java
1.1.3. WS-SecurityPolicy によって強制される認証 リンクのコピーリンクがクリップボードにコピーされました!
クライアント と サービス に対して、相互 TLS と Basic HTTP 認証の代わりに、WS-SecurityPolicy を通じて認証を強制できます。
WS-SecurityPolicy を通じて認証を強制するには、次の手順に従います。
- WSDL コントラクトのエンドポイントにサポートトークンポリシーを追加します。
-
サーバー側では、認証コールバックハンドラーを実装し、
application.propertiesまたは環境変数を介してエンドポイントに関連付けます。クライアントから受信した認証情報は、コールバックハンドラーによって認証されます。 -
クライアント側では、
application.properties内の設定または環境変数を通じて認証情報を提供します。または、認証コールバックハンドラーを実装して認証情報を渡すこともできます。
1.1.3.1. 認証ポリシーの指定 リンクのコピーリンクがクリップボードにコピーされました!
サービスエンドポイントで認証を強制する場合は、サポートトークン ポリシーアサーションを関連するエンドポイントバインディングに関連付け、その下に 1 つ以上の トークンアサーション を指定します。
サポートトークンポリシーアサーションにはいくつかの種類があり、その XML 要素名はすべて SupportingTokens で終わります (たとえば、SupportingTokens、SignedSupportingTokens など)。完全なリストは、WS-SecurityPolicy 仕様の Supporting Tokens のセクションを参照してください。
1.1.3.2. UsernameToken ポリシーアサーションの例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションで使用されるサンプルコードスニペットは、Quarkus CXF のソースツリーにある WS-SecurityPolicy インテグレーションテスト からのものです。これは、実行可能な例として使用できます。
次のリストは、WS-Security UsernameToken (ユーザー名/パスワードの認証情報を含む) をセキュリティーヘッダーに含めることを要求するポリシーの例を示しています。
username-token-policy.xml
このポリシーファイルをサービスエンドポイントに関連付けるには、次の 2 つの方法があります。
次のように、サービスエンドポイントインターフェイス (SEI) のポリシーを参照します。
UsernameTokenPolicyHelloService.java
@WebService(serviceName = "UsernameTokenPolicyHelloService") @Policy(placement = Policy.Placement.BINDING, uri = "username-token-policy.xml") public interface UsernameTokenPolicyHelloService extends AbstractHelloService { ... }@WebService(serviceName = "UsernameTokenPolicyHelloService") @Policy(placement = Policy.Placement.BINDING, uri = "username-token-policy.xml") public interface UsernameTokenPolicyHelloService extends AbstractHelloService { ... }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
WSDL 契約に ポリシーを含め、
PolicyReference要素 を介して参照します。
ポリシーを設定したら、サービスエンドポイントとクライアントで認証情報を設定します。
application.properties
上記のリストでは、usernameTokenPasswordCallback は、javax.security.auth.callback.CallbackHandler を実装する @jakarta.inject.Named Bean の名前です。Quarkus CXF は、CDI コンテナー内でこの 名前 の Bean を検索します。
以下は Bean の実装例です。
UsernameTokenPasswordCallback.java
セットアップ全体をテストするには、単純な {link-quarkus-docs-base}/getting-started-testing[@QuarkusTest] を作成します。
UsernameTokenTest.java
mvn test -Dtest=UsernameTokenTest でテストを実行すると、Username と Password を含む Security ヘッダーを含む SOAP メッセージがログに記録されます。
UsernameTokenTest のログ出力
1.1.3.3. SAML v1 および v2 ポリシーアサーションの例 リンクのコピーリンクがクリップボードにコピーされました!
WS-SecurityPolicy インテグレーションテスト には、SAML v1 および SAML v2 アサーションを使用した類似の例も含まれています。
第2章 Camel のセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
この章では、Camel ルートのセキュリティーオプションを説明します。
2.1. Camel セキュリティーの概要 リンクのコピーリンクがクリップボードにコピーされました!
Camel は、Camel ルートで利用できるさまざまな形式およびレベルのセキュリティー機能を提供します。これらのさまざまな形式のセキュリティーは、相互に組み合わせて使用することも、個別に使用することもできます。
提供される大まかなカテゴリーは次のとおりです。
- ルートセキュリティー - ルートまたはルートセグメントを続行するための認証および認可サービス
- ペイロードセキュリティー - ペイロードレベルで暗号化/復号化サービスを提供するデータ形式
- エンドポイントセキュリティー - コンポーネントに関連付けられた endpointUri で利用できるコンポーネントによって提供されるセキュリティー
- 設定セキュリティー - 設定ファイルまたは外部の Secured Vault システムからの機密情報を暗号化することで提供されるセキュリティー。
Camel は、多数の Camel コンポーネントの SSL/TLS 関連の側面を設定するための JSSE ユーティリティー を提供します。
2.2. ルートセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
認証および認可サービス
Camel は、ルートまたはルートセグメントに組み込むことができる ルートポリシー 駆動型のセキュリティー機能を提供します。Camel のルートポリシーは、Camel プロセッサーにインターセプターを適用するためのストラテジーパターンを利用します。Camel ルートの横断的な懸念事項 (セキュリティー、トランザクションなど) を適用する機能を提供します。
2.3. ペイロードセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
Camel は、ペイロードを保護したり、ペイロードの一部/セクションに暗号化/復号化機能を選択的に適用したりするための暗号化/復号化サービスを提供します。
Marshal を利用してペイロードの暗号化/復号を提供するデータ形式は次のとおりです。
2.4. エンドポイントセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
Camel の一部のコンポーネントは、エンドポイントを保護する機能 (インターセプターなどを使用) を提供しているため、それによりペイロードの保護や、コンポーネントを使用して作成されたエンドポイントでの認証および認可機能を実現する能力を備えています。
2.5. 設定セキュリティー リンクのコピーリンクがクリップボードにコピーされました!
Camel は、設定値をプロパティーファイルに外部化するための Properties コンポーネントを提供します。これらの値には、ユーザー名やパスワードなどの機密情報が含まれている可能性があります。
これらの値は、Camel によって以下を使用して暗号化および自動的に復号化できます。
Camel は、外部の Vault システムからの保護された設定へのアクセスもサポートします。
2.5.1. Vault を使用した設定セキュリティー リンクのコピーリンクがクリップボードにコピーされました!
Camel では次の Vault がサポートされています。
2.5.1.1. AWS Vault の使用 リンクのコピーリンクがクリップボードにコピーされました!
AWS Secrets Manager を使用するには、accessKey、secretKey、および リージョン を指定する必要があります。これは、アプリケーションを起動する前に環境変数を使用して実行できます。
export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey
export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey
export $CAMEL_VAULT_AWS_REGION=region
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.aws.accessKey = accessKey camel.vault.aws.secretKey = secretKey camel.vault.aws.region = region
camel.vault.aws.accessKey = accessKey
camel.vault.aws.secretKey = secretKey
camel.vault.aws.region = region
代わりに AWS のデフォルトの認証情報プロバイダー を使用する場合は、次の環境変数を指定する必要があります。
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_REGION=region
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.aws.defaultCredentialsProvider = true camel.vault.aws.region = region
camel.vault.aws.defaultCredentialsProvider = true
camel.vault.aws.region = region
AWS Secrets Manager にアクセスするための特定のプロファイル名を指定することもできます。
export $CAMEL_VAULT_AWS_USE_PROFILE_CREDENTIALS_PROVIDER=true export $CAMEL_VAULT_AWS_PROFILE_NAME=test-account export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_USE_PROFILE_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_PROFILE_NAME=test-account
export $CAMEL_VAULT_AWS_REGION=region
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.aws.profileCredentialsProvider = true camel.vault.aws.profileName = test-account camel.vault.aws.region = region
camel.vault.aws.profileCredentialsProvider = true
camel.vault.aws.profileName = test-account
camel.vault.aws.region = region
この時点で、{{ }} 構文で aws: を接頭辞として使用して、次のようにプロパティーを参照できるようになります。
ここで、route は、AWS Secrets Manager Service に保存されているシークレットの名前になります。
AWS Secret Manager にシークレットが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。
また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。
たとえば次のように、ルート内で単一のシークレット値を取得できます。
または、エンドポイントの一部としてプロパティーを再利用します。
AWS Secret Manager に特定のシークレットフィールドが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "admin" にフォールバックします。
現時点では、回転機能は (適用される場合があるとしても) 考慮していませんが、作業項目の一部に含まれています。
唯一の要件は、Camel アプリケーションに camel-aws-secrets-manager JAR を追加することです。
2.5.1.2. Google Secret Manager GCP Vault の使用 リンクのコピーリンクがクリップボードにコピーされました!
GCP Secret Manager を使用するには、serviceAccountKey ファイルと GCP projectId を提供する必要があります。これは、アプリケーションを起動する前に環境変数を使用して実行できます。
export $CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY=file:////path/to/service.accountkey export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
export $CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY=file:////path/to/service.accountkey
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.gcp.serviceAccountKey = accessKey camel.vault.gcp.projectId = secretKey
camel.vault.gcp.serviceAccountKey = accessKey
camel.vault.gcp.projectId = secretKey
代わりに GCP のデフォルトのクライアントインスタンス を使用する場合は、次の環境変数を指定する必要があります。
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.gcp.useDefaultInstance = true camel.vault.aws.projectId = region
camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = region
この時点で、{{ }} 構文で gcp: を接頭辞として使用することで、次のようにプロパティーを参照できるようになります。
ここで、route は GCP Secret Manager サービスに保存されているシークレットの名前になります。
GCP Secret Manager にシークレットが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。
また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。
たとえば次のように、ルート内で単一のシークレット値を取得できます。
または、エンドポイントの一部としてプロパティーを再利用します。
GCP Secret Manager に特定のシークレットフィールドが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "admin" にフォールバックします。
現時点では、回転機能は (適用される場合があるとしても) 考慮していませんが、作業項目の一部に含まれています。
要件は 2 つだけです: - Camel アプリケーションに camel-google-secret-manager JAR を追加します。- サービスアカウントに、シークレット管理レベルで操作を行うための権限を付与します (たとえば、シークレットペイロードにアクセスする、シークレットマネージャーサービスの管理者になるなど)。
2.5.1.3. Azure Key Vault の使用 リンクのコピーリンクがクリップボードにコピーされました!
この機能を使用するには、環境変数として Azure Key Vault サービスに認証情報を提供する必要があります。
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.azure.tenantId = accessKey camel.vault.azure.clientId = clientId camel.vault.azure.clientSecret = clientSecret camel.vault.azure.vaultName = vaultName
camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
または、次の方法で Azure Identity の使用を有効にすることもできます。
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。
camel.vault.azure.azureIdentityEnabled = true camel.vault.azure.vaultName = vaultName
camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
この時点で、次の方法でプロパティーを参照できるようになります。
ここで、route は Azure Key Vault サービスに保存されているシークレットの名前になります。
Azure Key Vault サービスにシークレットが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。
また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得することもできます。
たとえば次のように、ルート内で単一のシークレット値を取得できます。
または、エンドポイントの一部としてプロパティーを再利用します。
特定のシークレットフィールドが Azure Key Vault に存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "admin" にフォールバックします。
現時点では、回転機能は (適用される場合があるとしても) 考慮していませんが、作業項目の一部に含まれています。
唯一の要件は、Camel アプリケーションに camel-azure-key-vault jar を追加することです。
2.5.1.4. Hashicorp Vault の使用 リンクのコピーリンクがクリップボードにコピーされました!
この機能を使用するには、環境変数として Hashicorp vault の認証情報を提供する必要があります。
export $CAMEL_VAULT_HASHICORP_TOKEN=token export $CAMEL_VAULT_HASHICORP_HOST=host export $CAMEL_VAULT_HASHICORP_PORT=port export $CAMEL_VAULT_HASHICORP_SCHEME=http/https
export $CAMEL_VAULT_HASHICORP_TOKEN=token
export $CAMEL_VAULT_HASHICORP_HOST=host
export $CAMEL_VAULT_HASHICORP_PORT=port
export $CAMEL_VAULT_HASHICORP_SCHEME=http/https
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.hashicorp.token = token camel.vault.hashicorp.host = host camel.vault.hashicorp.port = port camel.vault.hashicorp.scheme = scheme
camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme
この時点で、次の方法でプロパティーを参照できるようになります。
ここで、route は、Hashicorp Vault インスタンスの 'secret' エンジンに保存されているシークレットの名前になります。
Hashicorp Vault インスタンスにシークレットが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが 'secret' エンジンに存在しない場合は、プロパティーの値は "default" に戻ります。
また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。
たとえば次のように、ルート内の 'secret' エンジンで単一のシークレット値を取得できます。
または、エンドポイントの一部としてプロパティーを再利用します。
Hashicorp Vault インスタンスの 'secret' エンジンに、特定の secret フィールドが存在しない場合は、デフォルト値を指定できます。
この場合、シークレットが存在しないか、シークレットが存在する ('secret' エンジン内) がユーザー名フィールドがシークレットの一部ではない場合、プロパティーの値は "admin" にフォールバックされます。
フィールド/デフォルト値を指定して、またはシークレットのみを使用して、両方のアプローチでシークレットの特定のバージョンを取得するための構文もあります。
このアプローチでは、'secret' エンジンでバージョン '2' の RAW ルートシークレットが返されます。
このアプローチでは、('secret' エンジン内に) シークレットが存在しない場合、またはバージョンが存在しない場合、バージョン '2' またはデフォルト値のルートシークレット値が返されます。
このアプローチでは、データベースシークレットのユーザー名フィールドがバージョン '2' で返されます。あるいは、('secret' エンジン内) にシークレットが存在しない場合、またはバージョンが存在しない場合は、admin が返されます。
2.5.1.5. AWS Secrets Manager 使用時の Secret Refresh での Camel コンテキストの自動リロード リンクのコピーリンクがクリップボードにコピーされました!
シークレットの更新時に Camel コンテキストをリロードできるようにするには、通常の認証情報 (AWS Secret Manager Property 関数で使用されるものと同じ) を指定します。
環境変数を使用する場合:
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=accessKey export $CAMEL_VAULT_AWS_REGION=region
export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=accessKey
export $CAMEL_VAULT_AWS_REGION=region
または単純な Camel のメインプロパティーとしての場合:
camel.vault.aws.useDefaultCredentialProvider = true camel.vault.aws.region = region
camel.vault.aws.useDefaultCredentialProvider = true
camel.vault.aws.region = region
または、デフォルトの認証情報プロバイダーチェーンを使用する代わりに、accessKey/SecretKey とリージョンを指定します。
自動更新を有効にするには、追加のプロパティーを設定する必要があります。
camel.vault.aws.refreshEnabled=true camel.vault.aws.refreshPeriod=60000 camel.vault.aws.secrets=Secret camel.main.context-reload-enabled = true
camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
ここで、camel.vault.aws.refreshEnabled は、自動コンテキストリロードを有効にし、camel.vault.aws.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔であり、camel.vault.aws.secrets は更新を追跡するシークレットを表す正規表現です。
camel.vault.aws.secrets は、必須ではないことに注意してください。指定されていない場合は、更新イベントのチェックを行うタスクが aws: 接頭辞を持つプロパティーを考慮します。
唯一の要件は、camel-aws-secrets-manager jar を Camel アプリケーションに追加することです。
2.5.1.6. AWS Secrets Manager を Eventbridge および AWS SQS サービスとともに使用する際に、シークレットの更新時に Camel コンテキストを自動的にリロードする リンクのコピーリンクがクリップボードにコピーされました!
もう 1 つのオプションは、AWS EventBridge を AWS SQS サービスと組み合わせて使用することです。
AWS 側では、次のリソースを作成する必要があります。
- AWS Couldtrail トレイル
- AWS SQS キュー
- 次のような Eventbridge ルール
このルールにより、AWS Secrets Manager に関連するイベントがフィルタリングされます
- Eventbridge ルールの AWS SQS キューにルールターゲットを設定する必要があります。
- 上記の SQS キューに書き込むには、Eventbrige ルールに権限を与える必要があります。これを行うには、次のような json ファイルを定義する必要があります。
{
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"<queue_arn>/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"<queue_arn>\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"<eventbridge_rule_arn>\"}}}]}"
}
{
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"<queue_arn>/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"<queue_arn>\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"<eventbridge_rule_arn>\"}}}]}"
}
queue_arn と eventbridge_rule_arn の値を変更し、policy.json という名前でファイルを保存して、AWS CLI で次のコマンドを実行します。
aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
ここで、queue_url は、先ほど作成されたキューの AWS SQS キュー URL です。
これで、Camel 側で設定をセットアップできるはずです。SQS 通知を有効にするには、次のプロパティーを追加します。
ここで、queue_url は、先ほど作成されたキューの AWS SQS キュー URL です。
'Secret' という名前のシークレットの PutSecretValue のイベントが発生するたびに、メッセージが AWS SQS キューにエンキューされて Camel 側で消費され、コンテキストのリロードがトリガーされます。
2.5.1.7. Google Secret Manager 使用時のシークレット更新での Camel コンテキストの自動リロード リンクのコピーリンクがクリップボードにコピーされました!
通常の認証情報 (Google Secret Manager Property 関数で使用されるものと同じ) を指定することで、シークレット更新時に Camel コンテキストをリロードできるようになります。
環境変数を使用する場合:
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
または単純な Camel のメインプロパティーとしての場合:
camel.vault.gcp.useDefaultInstance = true camel.vault.aws.projectId = projectId
camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = projectId
または、デフォルトのインスタンスを使用する代わりに、サービスアカウントキーファイルへのパスを指定します。
自動更新を有効にするには、追加のプロパティーを設定する必要があります。
ここで、camel.vault.gcp.refreshEnabled は自動コンテキストリロードを有効にし、camel.vault.gcp.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔で、camel.vault.gcp.secrets は更新を追跡するシークレットを表す正規表現です。
camel.vault.gcp.secrets は必須ではないことに注意してください。指定されていない場合は、更新イベントのチェックを行うタスクが gcp: 接頭辞を持つプロパティーを考慮します。
camel.vault.gcp.subscriptionName は、追跡されたシークレットに関連付けられた Google PubSub トピックに関連して作成されたサブスクリプション名です。
このメカニズムは、Google Secret Manager に関連する通知システムを利用します。この機能により、すべてのシークレットを 1 つから最大 10 個の Google Pubsub トピックに関連付けることができます。これらのトピックは、シークレットのライフサイクルに関連するイベントを受け取ります。
要件は 2 つだけです: - Camel アプリケーションに camel-google-secret-manager JAR を追加します。- サービスアカウントに、シークレット管理レベルで操作を行うための権限を付与します (たとえば、シークレットペイロードにアクセスする、シークレットマネージャーサービスの管理者になる、Pubsub サービスに対する権限も持つなど)。
2.5.1.8. Azure Key Vault 使用時のシークレット更新時の Camel コンテキストの自動リロード リンクのコピーリンクがクリップボードにコピーされました!
シークレット更新時に Camel コンテキストをリロードできるようにするには、通常の認証情報 (Azure Key Vault Property 関数で使用されるものと同じ) を指定します。
環境変数を使用する場合:
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
または単純な Camel のメインプロパティーとしての場合:
camel.vault.azure.tenantId = accessKey camel.vault.azure.clientId = clientId camel.vault.azure.clientSecret = clientSecret camel.vault.azure.vaultName = vaultName
camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Azure アイデンティティーを環境変数と共に使用したい場合は、次の方法で実行できます。
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。
camel.vault.azure.azureIdentityEnabled = true camel.vault.azure.vaultName = vaultName
camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
自動更新を有効にするには、追加のプロパティーを設定する必要があります。
ここで、camel.vault.azure.refreshEnabled は自動コンテキストリロードを有効にし、camel.vault.azure.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔で、camel.vault.azure.secrets は更新を追跡するシークレットを表す正規表現です。
ここで、camel.vault.azure.eventhubConnectionString は通知を取得するイベントハブ接続文字列、camel.vault.azure.blobAccountName、camel.vault.azure.blobContainerName、camel.vault.azure.blobAccessKey は、Azure Eventhub に必要なチェックポイントストアの Azure Storage Blob パラメーターです。
camel.vault.azure.secrets は必須ではないことに注意してください。指定されていない場合、更新イベントのチェックを行うタスクは、azure: 接頭辞を持つプロパティーを考慮します。
唯一の要件は、Camel アプリケーションに camel-azure-key-vault jar を追加することです。