セキュリティコンプライアンス

Confluent Platform は、以下のコンプライアンス証明書をサポートしています。

SSAE 18 SOC 2

Confluent では、セキュリティ、可用性、機密性にかかわる当社のセキュリティ管理環境について、業界で認められたレビューを実施するために、資格のある外部監査チームと年間契約を結んでいます。SSAE 18 SOC 2 レポートは、リクエストに応じて提供しています。

最新の SSAE 18 SOC 2 レポートのコピーをリクエストするには、リクエストフォーム(https://www.confluent.io/trust-and-security/)に入力してください。

Confluent Platform FIPS 140-2

Federal Information Processing Standard(FIPS)は、ソフトウェア暗号化モジュールの検証と認証に使用される、米国政府のコンピューターセキュリティ規格(FIPS 140-1、FIPS 140-2、および FIPS PUB 140-2 を使用)です。

Confluent Platform は FIPS 認証済みではありませんが、Kafka ブローカーレベルでは FIPS 準拠の暗号化が追加で適用されます。Bouncy Castle JSSE プロバイダーの FIPS 拡張機能を活用した Bouncy Castle FIPS JSSE セキュリティプロバイダーが、Confluent Platform によって配布されます。これにより、(ssl.cipher.suites で定義されている設定を超えて)ブローカーレベルで第 2 レベルの暗号化を適用し、非準拠の着信および発信ブローカー接続を拒否できます。サポートされている暗号スイートの網羅的なリストについては、「付録 B – サポートされている暗号スイート」を参照してください。

Confluent Platform を FIPS 対応モードで実行する場合、暗号化の用途で以下のテクノロジを使用することは、FIPS 準拠の暗号化を使用する場合のみ可能です。

  • FIPS JSSE プロバイダーを使用するブローカー、コンシューマー、プロデューサー
  • FIPS JSSE プロバイダーを使用する JVM

ksqlDB、Connect、Confluent Control Center、または Schema Registry からブローカーへの TLS 接続用の暗号スイートはすべて、ブローカーによって適用されます。

シークレット管理 保護用の Confluent CLI で暗号化とキー生成の実装に使用される暗号ライブラリは、FIPS 準拠ではありません。ただし、ブローカー側には Java の復号化機能が実装されているため、ブローカーが FIPS 対応モードで構成されている限り、復号化アルゴリズムは FIPS に準拠しています。

Ansible Playbooks for Confluent Platform は、Kafka ブローカーレベルで FIPS 準拠の暗号化を適用して、Confluent Platform の構成と展開を自動化します。詳細については、「Ansible Playbooks for Confluent Platform FIPS」を参照してください。

前提条件

  • OS: RHEL 7.x 以降

  • RHEL 7.x 以降で FIPS モード を有効にします。

  • FIPS 認証済みプロバイダー Bouncy Castle (BC) version 1.0.2 を使用します。これにより、TLS 通信および暗号化/復号化サービス用の暗号スイートが提供されます(ディストリビューションの一部として提供)。

  • rng-tools パッケージをインストールして実行します。システムのエントロピーをテストしたり回避したりする際に役立ちます。

  • すべての通信に対して、FIP 準拠の暗号化ライブラリと SSL 暗号化をネットワーク経由で実行します。つまり、クライアントからブローカーおよびコンポーネントからブローカーへのすべてのパブリッシュ/サブスクライブ通信について、Confluent Platform に SSL 通信を構成する必要があります。デフォルトのキーストアフォーマットは JKS です。これは標準化されたフォーマットではなく、非推奨であり、FIPS プロバイダーではサポートされていません。BC FIPS プロバイダーでは、PKCS12 と BCFKS の 2 種類がキーストアフォーマットとしてサポートされています。ただし、FIPS に準拠して設計されているのは BCFKS キーストアのみです。BCFKS フォーマットのキーストアを作成 するか、JKS または PKCS12 を BCFKS に変換する必要があります(これは、暗号化されたプライベートキーと証明書を格納するための、言語に依存しない標準化された方法です)。

    次の構成例は、FIPS または新しい構成に固有のものではなく、TLS/SSL 通信用の BCFKS キーストアを含めるように TLS/SSL を構成するユースケースを示しています。TLS/SSL 構成にはリスナーを含める必要もあり、各リスナーには listener.name. というプレフィックスを付けます。以下の例のリスナー構成は、次の定義に基づいています。

    listener.security.protocol.map = INTERNAL:SASL_SSL,BROKER:SSL,EXTERNAL:SSL \
       listeners = INTERNAL://:9092,BROKER://:9091,EXTERNAL://:9093
    
    # TLS/SSL configuration
    ssl.keymanager.algorithm=PKIX
    ssl.trustmanager.algorithm=PKIX
    ssl.keystore.type=BCFKS
    ssl.truststore.type=BCFKS
    ssl.truststore.location=<path-to-ssl-truststore>
    ssl.truststore.password=<ssl-truststore-password>
    ssl.keystore.location=<path-to-ssl-keystore>
    ssl.keystore.password=<ssl-keystore-password>
    ssl.key.password= <ssl-key-password>
    
    # External listener configuration
    listener.name.external.ssl.keymanager.algorithm=PKIX
    listener.name.external.ssl.trustmanager.algorithm=PKIX
    listener.name.external.ssl.keystore.type=BCFKS
    listener.name.external.ssl.truststore.type=BCFKS
    listener.name.external.ssl.truststore.location=<path-to-ssl-truststore>
    listener.name.external.ssl.truststore.password=<ssl-truststore-password>
    listener.name.external.ssl.keystore.location=<path-to-ssl-keystore>
    listener.name.external.ssl.keystore.password=<ssl-keystore-password>
    listener.name.external.ssl.key.password= <ssl-key-password>
    
  • MDS では、MDS が送受信する HTTPS 通信で FIPS 準拠の暗号化が追加で適用されます。次の例は、FIPS 準拠用の MDS 構成を示しています。

    confluent.metadata.server.ssl.keystore.type=BCFKS
    confluent.metadata.server.ssl.keymanager.algorithm=PKIX
    confluent.metadata.server.ssl.keystore.location=kafka.server.keystore.bcfks
    confluent.metadata.server.ssl.keystore.password=
    confluent.metadata.server.ssl.key.password=
    

PKCS12 から BCFKS への変換

PKCS12 ストアを使用している場合は、次のコマンドを入力して、BCFKS ストアを使用するように変換します。

keytool -importkeystore -v -srckeystore kafka.server.keystore.pk12 -srcstoretype PKCS12 -providername BCFIPS -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -destkeystore kafka.server.keystore.bcfks -deststoretype BCFKS

BCFKS を使用したキーと証明書の構成

キーストアを構成して証明書を生成する手順については、「SSL キーと証明書の作成」で説明しています。BCFKS を使用する場合、手順は同じですが、storetypeproviderpath、および providerclass を追加する必要があるため、構成が異なります。構成は以下の例のようになります。

keytool -keystore kafka.server.keystore.bcfks -alias localhost -validity 720 -genkeypair -keyalg RSA -keysize 2048 -storepass testfips -keypass testfips -storetype BCFKS -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -dname CN=localhost -ext SAN=DNS:localhost
openssl req -new -x509 -keyout ca-key -out ca-cert -days 720
keytool -keystore kafka.client.truststore.bcfks -storetype BCFKS -alias CARoot -import -file ca-cert -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
keytool -keystore kafka.server.truststore.bcfks -storetype BCFKS -alias CARoot -importcert -file ca-cert -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
keytool -keystore kafka.server.keystore.bcfks -alias localhost -storepass testfips -keypass testfips -storetype BCFKS -certreq -file cert-file -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 720 -CAcreateserial -passin pass:testfips
keytool -keystore kafka.server.keystore.bcfks -storetype BCFKS -alias CARoot -import -file ca-cert -storepass testfips -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
cat ca-cert cert-signed > cert
keytool -keystore kafka.server.keystore.bcfks -storetype BCFKS -storepass testfips -alias localhost -import -file cert -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider

FIPS 140-2 向けの Confluent Platform の構成

Confluent Platform ブローカー、コンシューマー、およびプロデューサーを FIPS 140-2 向けに構成するには、server.properties で以下のオプションを指定します。

enable.fips=true
security.providers=io.confluent.kafka.security.fips.provider.BcFipsProviderCreator,io.confluent.kafka.security.fips.provider.BcFipsJsseProviderCreator
# Specify the TLS version. Only TLS version 1.2 is supported.
ssl.enabled.protocols=TLSv1.2

注釈

Confluent Platform では、デフォルトで ssl.enabled.protocols=TLSv1.3 が使用されます。デフォルト値は FIPS 140-2 に対応していないため、そのまま使用しないでください。

security.providers オプションは、JCE プロバイダーの作成元リストを使用するように Kafka ブローカーを構成します。Kafka ブローカーは、セキュリティ用 JCE プロバイダー(実行時には他のプロバイダーよりも優先されます)のリストを作成します。Bouncy Castle は、サポートされている唯一の FIPS プロバイダーです。Bouncy Castle を指定しない場合は、FIPS 準拠の暗号スイートやライブラリを必ず提供する必要あります。

暗号スイートを構成しなかった場合、これらの値は Bouncy Castle プロバイダーによって決定されます。

重要

FIPS モードが有効になっている場合は、ネットワーク経由での TLS の暗号化を有効にする必要があります。また、指定された TLS バージョンと暗号スイートが FIPS に準拠していない場合、Confluent Platform は起動しません。

RHEL が FIPS モードで実行されていることの確認

次のコマンドを実行して、RHEL が FIPS 対応モードで実行されていることを確認します。

cat /proc/sys/crypto/fips_enabled
sysctl crypto.fips_enabled

出力は以下のようになります。

cat /proc/sys/crypto/fips_enabled
1
sysctl crypto.fips_enabled
crypto.fips_enabled = 1

ブローカーの server.log を表示することで、Kafka ブローカーが FIPS モードで実行されていることを確認することもできます。

FIPS mode is enabled: true

FIPS 対応モードを有効にしても、有効な TLS バージョンを指定できなかった場合は(サポート対象はバージョン 1.2 のみ)、次のように出力されます。

[2019-10-05 17:26:18,261] ERROR FIPS 140-2 Configuration Error, invalid TLS versions: TLSv1.0 (bigcompany.kafka.security.fips.FipsValidator)
[2019-10-05 17:26:18,261] ERROR Fatal error during SupportedServerStartable startup. Prepare to shutdown (bigcompany.support.metrics.SupportedKafka)
bigcompany.kafka.security.fips.exceptions.InvalidFipsTlsVersionException: FIPS 140-2 Configuration Error, invalid TLS versions: TLSv1.0

FIPS 対応モードを有効にしても、サポートされていない暗号スイートを指定した場合は、次のように出力されます。

[2019-10-22 13:27:01,852] ERROR FIPS 140-2 Configuration Error, invalid cipher suites: TLS_DHE_DSS_WITH_AES_96_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_96_CBC_SHA (bigcompany.kafka.security.fips.FipsValidator)
[2019-10-22 13:27:01,852] ERROR Fatal error during SupportedServerStartable startup. Prepare to shutdown (bigcompany.support.metrics.SupportedKafka)
bigcompany.kafka.security.fips.exceptions.InvalidFipsTlsCipherSuiteException: FIPS 140-2 Configuration Error, invalid cipher suites: TLS_DHE_DSS_WITH_AES_96_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_96_CBC_SHA

キーストアからの公開証明書のエクスポート

公開証明書をエクスポートして HTTPS クライアント(curl など)に使用するには:

keytool -exportcert -rfc -file kafka.server.keystore.cer -alias localhost -keystore kafka.server.keystore.bcfks -storetype bcfks -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath /Users/fips-user/tmp/ssl/bcfks/bc-fips-1.0.2.jar -storepass testfips