Red Hat build of Apache Camel 向け Quarkus CXF セキュリティーガイド


Red Hat build of Apache Camel 4.8

Red Hat が提供する Red Hat build of Apache Camel 向け Quarkus CXF セキュリティーガイド

概要

TitleCQSecurityGuide では、Red Hat がサポートする Quarkus XXF エクステンションのセキュリティー面を説明します。

はじめに

Red Hat build of Apache Camel ドキュメントに関するフィードバック

エラーを報告したり、ドキュメントの改善を提案したりするには、Red Hat Jira アカウントにログインし、課題を送信してください。Red Hat Jira アカウントをお持ちでない場合は、アカウントを作成するように求められます。

手順

  1. 次のリンクをクリックして チケットを作成 します。
  2. Summary に課題の簡単な説明を入力します。
  3. Description に課題や機能拡張の詳細な説明を入力します。問題があるドキュメントのセクションへの URL も記載してください。
  4. 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

# Client side SSL
quarkus.cxf.client.hello.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/hello
quarkus.cxf.client.hello.service-interface = io.quarkiverse.cxf.it.security.policy.HelloService
1

quarkus.cxf.client.hello.trust-store-type = pkcs12
2

quarkus.cxf.client.hello.trust-store = client-truststore.pkcs12
quarkus.cxf.client.hello.trust-store-password = client-truststore-password
Copy to Clipboard Toggle word wrap

1
pkcs12jks は、よく使用される 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
Copy to Clipboard Toggle word wrap

1.1.1.3. 相互 TLS (mTLS) 認証

これまでは、サーバーのみが SSL 証明書を通じてアイデンティティーを証明し、クライアントがその証明書を信頼するように設定する必要がある単純なケース、つまり片側だけのケースを説明しました。相互 TLS 認証では、クライアントにも同じ公開鍵暗号化手段を使用してアイデンティティーを証明させます。

したがって、相互 TLS (mTLS) 認証の場合、上記のようにサーバーキーストアとクライアントトラストストアをセットアップすることに加えて、クライアント側のキーストアとサーバー側のトラストストアをセットアップする必要があります。

ストアを作成および維持するためのツールは同じであり、使用する設定プロパティーは Simple TLS の場合に使用されるものとほぼ類似しています。

Quarkus CXF ソースツリーの mTLS インテグレーションテスト は、適切なスタートポイントになります。

キーストアとトラストストアは、openssl (または Java Java keytool) を使用して作成されます。

application.properties ファイルは次のとおりです。

application.properties

# Server keystore for Simple TLS
quarkus.tls.localhost-pkcs12.key-store.p12.path = localhost-keystore.pkcs12
quarkus.tls.localhost-pkcs12.key-store.p12.password = localhost-keystore-password
quarkus.tls.localhost-pkcs12.key-store.p12.alias = localhost
quarkus.tls.localhost-pkcs12.key-store.p12.alias-password = localhost-keystore-password
# Server truststore for Mutual TLS
quarkus.tls.localhost-pkcs12.trust-store.p12.path = localhost-truststore.pkcs12
quarkus.tls.localhost-pkcs12.trust-store.p12.password = localhost-truststore-password
# Select localhost-pkcs12 as the TLS configuration for the HTTP server
quarkus.http.tls-configuration-name = localhost-pkcs12

# Do not allow any clients which do not prove their indentity through an SSL certificate
quarkus.http.ssl.client-auth = required

# CXF service
quarkus.cxf.endpoint."/mTls".implementor = io.quarkiverse.cxf.it.auth.mtls.MTlsHelloServiceImpl

# CXF client with a properly set certificate for mTLS
quarkus.cxf.client.mTls.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/mTls
quarkus.cxf.client.mTls.service-interface = io.quarkiverse.cxf.it.security.policy.HelloService
quarkus.cxf.client.mTls.key-store = target/classes/client-keystore.pkcs12
quarkus.cxf.client.mTls.key-store-type = pkcs12
quarkus.cxf.client.mTls.key-store-password = client-keystore-password
quarkus.cxf.client.mTls.key-password = client-keystore-password
quarkus.cxf.client.mTls.trust-store = target/classes/client-truststore.pkcs12
quarkus.cxf.client.mTls.trust-store-type = pkcs12
quarkus.cxf.client.mTls.trust-store-password = client-truststore-password

# Include the keystores in the native executable
quarkus.native.resources.includes = *.pkcs12,*.jks
Copy to Clipboard Toggle word wrap

1.1.1.4. WS-SecurityPolicy を通じて SSL を強制する

クライアントが HTTPS 経由で接続するための要件は、ポリシーで定義できます。

この機能は、quarkus-cxf-rt-ws-security エクステンションにより提供されます。

以下は、ポリシーファイルの例です。

https-policy.xml

<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy wsp:Id="HttpsSecurityServicePolicy"
            xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:TransportBinding>
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken RequireClientCertificate="false" />
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:IncludeTimestamp />
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic128 />
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                </wsp:Policy>
            </sp:TransportBinding>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
Copy to Clipboard Toggle word wrap

ポリシーは、サービスエンドポイントインターフェイス (SEI) から参照される必要があります。

HttpsPolicyHelloService.java

package io.quarkiverse.cxf.it.security.policy;

import jakarta.jws.WebMethod;
import jakarta.jws.WebService;

import org.apache.cxf.annotations.Policy;

/**
 * A service implementation with a transport policy set
 */
@WebService(serviceName = "HttpsPolicyHelloService")
@Policy(placement = Policy.Placement.BINDING, uri = "https-policy.xml")
public interface HttpsPolicyHelloService extends AbstractHelloService {

    @WebMethod
    @Override
    public String hello(String text);

}
Copy to Clipboard Toggle word wrap

このセットアップを行うと、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
 ...
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

1.1.2.1.1. Basic 認証で保護された WSDL へのアクセス

デフォルトでは、quarkus.cxf.client."client-name".secure-wsdl-accesstrue に設定しない限り、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
Copy to Clipboard Toggle word wrap

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

    quarkus.http.auth.basic = true
    quarkus.security.users.embedded.enabled = true
    quarkus.security.users.embedded.plain-text = true
    quarkus.security.users.embedded.users.alice = alice123
    quarkus.security.users.embedded.roles.alice = admin
    quarkus.security.users.embedded.users.bob = bob234
    quarkus.security.users.embedded.roles.bob = app-user
    Copy to Clipboard Toggle word wrap

  • @RolesAllowed アノテーションによって強制されるロールベースのアクセス制御。

BasicAuthHelloServiceImpl.java

package io.quarkiverse.cxf.it.auth.basic;

import jakarta.annotation.security.RolesAllowed;
import jakarta.jws.WebService;

import io.quarkiverse.cxf.it.HelloService;

@WebService(serviceName = "HelloService", targetNamespace = HelloService.NS)
@RolesAllowed("app-user")
public class BasicAuthHelloServiceImpl implements HelloService {
    @Override
    public String hello(String person) {
        return "Hello " + person + "!";
    }
}
Copy to Clipboard Toggle word wrap

1.1.3. WS-SecurityPolicy によって強制される認証

クライアントサービス に対して、相互 TLS と Basic HTTP 認証の代わりに、WS-SecurityPolicy を通じて認証を強制できます。

WS-SecurityPolicy を通じて認証を強制するには、次の手順に従います。

  1. WSDL コントラクトのエンドポイントにサポートトークンポリシーを追加します。
  2. サーバー側では、認証コールバックハンドラーを実装し、application.properties または環境変数を介してエンドポイントに関連付けます。クライアントから受信した認証情報は、コールバックハンドラーによって認証されます。
  3. クライアント側では、application.properties 内の設定または環境変数を通じて認証情報を提供します。または、認証コールバックハンドラーを実装して認証情報を渡すこともできます。
1.1.3.1. 認証ポリシーの指定

サービスエンドポイントで認証を強制する場合は、サポートトークン ポリシーアサーションを関連するエンドポイントバインディングに関連付け、その下に 1 つ以上の トークンアサーション を指定します。

サポートトークンポリシーアサーションにはいくつかの種類があり、その XML 要素名はすべて SupportingTokens で終わります (たとえば、SupportingTokensSignedSupportingTokens など)。完全なリストは、WS-SecurityPolicy 仕様の Supporting Tokens のセクションを参照してください。

1.1.3.2. UsernameToken ポリシーアサーションの例
ヒント

このセクションで使用されるサンプルコードスニペットは、Quarkus CXF のソースツリーにある WS-SecurityPolicy インテグレーションテスト からのものです。これは、実行可能な例として使用できます。

次のリストは、WS-Security UsernameToken (ユーザー名/パスワードの認証情報を含む) をセキュリティーヘッダーに含めることを要求するポリシーの例を示しています。

username-token-policy.xml

<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy
        wsp:Id="UsernameTokenSecurityServicePolicy"
        xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
    xmlns:sp13="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200802"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:SupportingTokens>
                <wsp:Policy>
                    <sp:UsernameToken
                        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp:WssUsernameToken11 />
                            <sp13:Created />
                            <sp13:Nonce />
                        </wsp:Policy>
                    </sp:UsernameToken>
                </wsp:Policy>
            </sp:SupportingTokens>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
Copy to Clipboard Toggle word wrap

このポリシーファイルをサービスエンドポイントに関連付けるには、次の 2 つの方法があります。

  • 次のように、サービスエンドポイントインターフェイス (SEI) のポリシーを参照します。

    UsernameTokenPolicyHelloService.java

    @WebService(serviceName = "UsernameTokenPolicyHelloService")
    @Policy(placement = Policy.Placement.BINDING, uri = "username-token-policy.xml")
    public interface UsernameTokenPolicyHelloService extends AbstractHelloService {
        ...
    }
    Copy to Clipboard Toggle word wrap

  • WSDL 契約に ポリシーを含め、PolicyReference 要素 を介して参照します。

ポリシーを設定したら、サービスエンドポイントとクライアントで認証情報を設定します。

application.properties

# A service with a UsernameToken policy assertion
quarkus.cxf.endpoint."/helloUsernameToken".implementor = io.quarkiverse.cxf.it.security.policy.UsernameTokenPolicyHelloServiceImpl
quarkus.cxf.endpoint."/helloUsernameToken".security.callback-handler = #usernameTokenPasswordCallback

# These properties are used in UsernameTokenPasswordCallback
# and in the configuration of the helloUsernameToken below
wss.user = cxf-user
wss.password = secret

# A client with a UsernameToken policy assertion
quarkus.cxf.client.helloUsernameToken.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/helloUsernameToken
quarkus.cxf.client.helloUsernameToken.service-interface = io.quarkiverse.cxf.it.security.policy.UsernameTokenPolicyHelloService
quarkus.cxf.client.helloUsernameToken.security.username = ${wss.user}
quarkus.cxf.client.helloUsernameToken.security.password = ${wss.password}
Copy to Clipboard Toggle word wrap

上記のリストでは、usernameTokenPasswordCallback は、javax.security.auth.callback.CallbackHandler を実装する @jakarta.inject.Named Bean の名前です。Quarkus CXF は、CDI コンテナー内でこの 名前 の Bean を検索します。

以下は Bean の実装例です。

UsernameTokenPasswordCallback.java

package io.quarkiverse.cxf.it.security.policy;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;

import org.apache.wss4j.common.ext.WSPasswordCallback;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@ApplicationScoped
@Named("usernameTokenPasswordCallback") /* We refer to this bean by this name from application.properties */
public class UsernameTokenPasswordCallback implements CallbackHandler {

    /* These two configuration properties are set in application.properties */
    @ConfigProperty(name = "wss.password")
    String password;
    @ConfigProperty(name = "wss.user")
    String user;

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        if (callbacks.length < 1) {
            throw new IllegalStateException("Expected a " + WSPasswordCallback.class.getName()
                    + " at possition 0 of callbacks. Got array of length " + callbacks.length);
        }
        if (!(callbacks[0] instanceof WSPasswordCallback)) {
            throw new IllegalStateException(
                    "Expected a " + WSPasswordCallback.class.getName() + " at possition 0 of callbacks. Got an instance of "
                            + callbacks[0].getClass().getName() + " at possition 0");
        }
        final WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        if (user.equals(pc.getIdentifier())) {
            pc.setPassword(password);
        } else {
            throw new IllegalStateException("Unexpected user " + user);
        }
    }

}
Copy to Clipboard Toggle word wrap

セットアップ全体をテストするには、単純な {link-quarkus-docs-base}/getting-started-testing[@QuarkusTest] を作成します。

UsernameTokenTest.java

package io.quarkiverse.cxf.it.security.policy;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

import io.quarkiverse.cxf.annotation.CXFClient;
import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
public class UsernameTokenTest {

    @CXFClient("helloUsernameToken")
    UsernameTokenPolicyHelloService helloUsernameToken;

    @Test
    void helloUsernameToken() {
        Assertions.assertThat(helloUsernameToken.hello("CXF")).isEqualTo("Hello CXF from UsernameToken!");
    }
}
Copy to Clipboard Toggle word wrap

mvn test -Dtest=UsernameTokenTest でテストを実行すると、UsernamePassword を含む Security ヘッダーを含む SOAP メッセージがログに記録されます。

UsernameTokenTest のログ出力

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1">
      <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-bac4f255-147e-42a4-aeec-e0a3f5cd3587">
        <wsse:Username>cxf-user</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">secret</wsse:Password>
        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">3uX15dZT08jRWFWxyWmfhg==</wsse:Nonce>
        <wsu:Created>2024-10-02T17:32:10.497Z</wsu:Created>
      </wsse:UsernameToken>
    </wsse:Security>
  </soap:Header>
  <soap:Body>
    <ns2:hello xmlns:ns2="http://policy.security.it.cxf.quarkiverse.io/">
      <arg0>CXF</arg0>
    </ns2:hello>
  </soap:Body>
</soap:Envelope>
Copy to Clipboard Toggle word wrap

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 を使用するには、accessKeysecretKey、および リージョン を指定する必要があります。これは、アプリケーションを起動する前に環境変数を使用して実行できます。

export $CAMEL_VAULT_AWS_ACCESS_KEY=accessKey
export $CAMEL_VAULT_AWS_SECRET_KEY=secretKey
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.aws.accessKey = accessKey
camel.vault.aws.secretKey = secretKey
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

代わりに AWS のデフォルトの認証情報プロバイダー を使用する場合は、次の環境変数を指定する必要があります。

export $CAMEL_VAULT_AWS_USE_DEFAULT_CREDENTIALS_PROVIDER=true
export $CAMEL_VAULT_AWS_REGION=region
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.aws.defaultCredentialsProvider = true
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.aws.profileCredentialsProvider = true
camel.vault.aws.profileName = test-account
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

この時点で、{{ }} 構文で aws: を接頭辞として使用して、次のようにプロパティーを参照できるようになります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{aws:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

ここで、route は、AWS Secrets Manager Service に保存されているシークレットの名前になります。

AWS Secret Manager にシークレットが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{aws:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。

また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

たとえば次のように、ルート内で単一のシークレット値を取得できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{aws:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

または、エンドポイントの一部としてプロパティーを再利用します。

AWS Secret Manager に特定のシークレットフィールドが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{aws:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "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
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.gcp.serviceAccountKey = accessKey
camel.vault.gcp.projectId = secretKey
Copy to Clipboard Toggle word wrap

代わりに GCP のデフォルトのクライアントインスタンス を使用する場合は、次の環境変数を指定する必要があります。

export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = region
Copy to Clipboard Toggle word wrap

この時点で、{{ }} 構文で gcp: を接頭辞として使用することで、次のようにプロパティーを参照できるようになります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

ここで、route は GCP Secret Manager サービスに保存されているシークレットの名前になります。

GCP Secret Manager にシークレットが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。

また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

たとえば次のように、ルート内で単一のシークレット値を取得できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

または、エンドポイントの一部としてプロパティーを再利用します。

GCP Secret Manager に特定のシークレットフィールドが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "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
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

または、次の方法で Azure Identity の使用を有効にすることもできます。

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

この時点で、次の方法でプロパティーを参照できるようになります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

ここで、route は Azure Key Vault サービスに保存されているシークレットの名前になります。

Azure Key Vault サービスにシークレットが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{azure:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しない場合は、プロパティーの値は "default" にフォールバックします。

また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得することもできます。

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

たとえば次のように、ルート内で単一のシークレット値を取得できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

または、エンドポイントの一部としてプロパティーを再利用します。

特定のシークレットフィールドが Azure Key Vault に存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{azure:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "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
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.hashicorp.token = token
camel.vault.hashicorp.host = host
camel.vault.hashicorp.port = port
camel.vault.hashicorp.scheme = scheme
Copy to Clipboard Toggle word wrap

この時点で、次の方法でプロパティーを参照できるようになります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

ここで、route は、Hashicorp Vault インスタンスの 'secret' エンジンに保存されているシークレットの名前になります。

Hashicorp Vault インスタンスにシークレットが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route:default}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが 'secret' エンジンに存在しない場合は、プロパティーの値は "default" に戻ります。

また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}
Copy to Clipboard Toggle word wrap

たとえば次のように、ルート内の 'secret' エンジンで単一のシークレット値を取得できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

または、エンドポイントの一部としてプロパティーを再利用します。

Hashicorp Vault インスタンスの 'secret' エンジンに、特定の secret フィールドが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username:admin}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

この場合、シークレットが存在しないか、シークレットが存在する ('secret' エンジン内) がユーザー名フィールドがシークレットの一部ではない場合、プロパティーの値は "admin" にフォールバックされます。

フィールド/デフォルト値を指定して、またはシークレットのみを使用して、両方のアプローチでシークレットの特定のバージョンを取得するための構文もあります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:secret:route@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

このアプローチでは、'secret' エンジンでバージョン '2' の RAW ルートシークレットが返されます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{hashicorp:route:default@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

このアプローチでは、('secret' エンジン内に) シークレットが存在しない場合、またはバージョンが存在しない場合、バージョン '2' またはデフォルト値のルートシークレット値が返されます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{hashicorp:secret:database/username:admin@2}}"/>
    </route>
</camelContext>
Copy to Clipboard Toggle word wrap

このアプローチでは、データベースシークレットのユーザー名フィールドがバージョン '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
Copy to Clipboard Toggle word wrap

または単純な Camel のメインプロパティーとしての場合:

camel.vault.aws.useDefaultCredentialProvider = true
camel.vault.aws.region = region
Copy to Clipboard Toggle word wrap

または、デフォルトの認証情報プロバイダーチェーンを使用する代わりに、accessKey/SecretKey とリージョンを指定します。

自動更新を有効にするには、追加のプロパティーを設定する必要があります。

camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
Copy to Clipboard Toggle word wrap

ここで、camel.vault.aws.refreshEnabled は、自動コンテキストリロードを有効にし、camel.vault.aws.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔であり、camel.vault.aws.secrets は更新を追跡するシークレットを表す正規表現です。

camel.vault.aws.secrets は、必須ではないことに注意してください。指定されていない場合は、更新イベントのチェックを行うタスクが aws: 接頭辞を持つプロパティーを考慮します。

唯一の要件は、camel-aws-secrets-manager jar を Camel アプリケーションに追加することです。

もう 1 つのオプションは、AWS EventBridge を AWS SQS サービスと組み合わせて使用することです。

AWS 側では、次のリソースを作成する必要があります。

  • AWS Couldtrail トレイル
  • AWS SQS キュー
  • 次のような Eventbridge ルール
{
  "source": ["aws.secretsmanager"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["secretsmanager.amazonaws.com"]
  }
}
Copy to Clipboard Toggle word wrap

このルールにより、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>\"}}}]}"
}
Copy to Clipboard Toggle word wrap

queue_arn と eventbridge_rule_arn の値を変更し、policy.json という名前でファイルを保存して、AWS CLI で次のコマンドを実行します。

aws sqs set-queue-attributes --queue-url <queue_url> --attributes file://policy.json
Copy to Clipboard Toggle word wrap

ここで、queue_url は、先ほど作成されたキューの AWS SQS キュー URL です。

これで、Camel 側で設定をセットアップできるはずです。SQS 通知を有効にするには、次のプロパティーを追加します。

camel.vault.aws.refreshEnabled=true
camel.vault.aws.refreshPeriod=60000
camel.vault.aws.secrets=Secret
camel.main.context-reload-enabled = true
camel.vault.aws.useSqsNotification=true
camel.vault.aws.sqsQueueUrl=<queue_url>
Copy to Clipboard Toggle word wrap

ここで、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
Copy to Clipboard Toggle word wrap

または単純な Camel のメインプロパティーとしての場合:

camel.vault.gcp.useDefaultInstance = true
camel.vault.aws.projectId = projectId
Copy to Clipboard Toggle word wrap

または、デフォルトのインスタンスを使用する代わりに、サービスアカウントキーファイルへのパスを指定します。

自動更新を有効にするには、追加のプロパティーを設定する必要があります。

camel.vault.gcp.projectId= projectId
camel.vault.gcp.refreshEnabled=true
camel.vault.gcp.refreshPeriod=60000
camel.vault.gcp.secrets=hello*
camel.vault.gcp.subscriptionName=subscriptionName
camel.main.context-reload-enabled = true
Copy to Clipboard Toggle word wrap

ここで、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
Copy to Clipboard Toggle word wrap

または単純な Camel のメインプロパティーとしての場合:

camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

Azure アイデンティティーを環境変数と共に使用したい場合は、次の方法で実行できます。

export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
Copy to Clipboard Toggle word wrap

次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。

camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
Copy to Clipboard Toggle word wrap

自動更新を有効にするには、追加のプロパティーを設定する必要があります。

camel.vault.azure.refreshEnabled=true
camel.vault.azure.refreshPeriod=60000
camel.vault.azure.secrets=Secret
camel.vault.azure.eventhubConnectionString=eventhub_conn_string
camel.vault.azure.blobAccountName=blob_account_name
camel.vault.azure.blobContainerName=blob_container_name
camel.vault.azure.blobAccessKey=blob_access_key
camel.main.context-reload-enabled = true
Copy to Clipboard Toggle word wrap

ここで、camel.vault.azure.refreshEnabled は自動コンテキストリロードを有効にし、camel.vault.azure.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔で、camel.vault.azure.secrets は更新を追跡するシークレットを表す正規表現です。

ここで、camel.vault.azure.eventhubConnectionString は通知を取得するイベントハブ接続文字列、camel.vault.azure.blobAccountNamecamel.vault.azure.blobContainerNamecamel.vault.azure.blobAccessKey は、Azure Eventhub に必要なチェックポイントストアの Azure Storage Blob パラメーターです。

camel.vault.azure.secrets は必須ではないことに注意してください。指定されていない場合、更新イベントのチェックを行うタスクは、azure: 接頭辞を持つプロパティーを考慮します。

唯一の要件は、Camel アプリケーションに camel-azure-key-vault jar を追加することです。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る