第3章 基本的なセキュリティー

この章では、Karaf を初めて起動する前のセキュリティー設定に関する基本的な手順を説明します。デフォルトでは、Karaf は安全ですが、Kafka のサービスにはリモートアクセスできません。この章では、Karaf で公開されているポートへのアクセスをセキュリティーを確保しながら有効にする方法について説明します。

3.1. 基本的なセキュリティーの設定

3.1.1. 概要

Apache Karaf ランタイムは、公開されているすべてのポートにユーザー認証が必要で、最初にユーザーが定義されていないため、デフォルトではネットワーク攻撃から保護されています。つまり、Apache Karaf ランタイムは、デフォルトではリモートでアクセスできません。

ランタイムにリモートでアクセスする場合は、ここで説明するように、最初にセキュリティー設定をカスタマイズする必要があります。

3.1.2. コンテナーを起動する前に

Karaf コンテナーへのリモートアクセスを有効にする場合は、コンテナーを起動する前に、セキュリティー保護された JAAS ユーザーを作成する必要があります。

3.1.3. セキュリティーが保護された JAAS ユーザーの作成

デフォルトでは、コンテナーに JAAS ユーザーが定義されていないため、リモートアクセスが事実上無効になります (ログオン不可)。

セキュアな JAAS ユーザーを作成するには、InstallDir/etc/users.properties ファイルを編集し、以下のように新規ユーザーフィールドを追加します。

Username=Password,admin

Username および Password は、新しいユーザー認証情報です。admin ロールは、このユーザーに、コンテナーのすべての管理機能にアクセスするための権限を付与します。

数値のユーザー名では、先頭にゼロを使用して定義しないでください。先頭にゼロを指定したユーザー名は常にログイン試行に失敗します。これは、入力が数値であるように見える場合に、コンソールが使用する Karaf シェルにより、先頭のゼロが取り除かれるためです。以下に例を示します。

karaf@root> echo 0123
123
karaf@root> echo 00.123
0.123
karaf@root>
警告

強力なパスワードを使用してカスタムユーザーの資格情報を定義することを強くお勧めします。

3.1.4. ロールベースのアクセス制御

Karaf コンテナーは、ロールベースのアクセス制御をサポートします。このロールベースのアクセス制御は、JMX プロトコル、Karaf コマンドコンソール、および FuseManagement コンソールを介したアクセスを規制します。ユーザーにロールを割り当てる場合に、標準のロールのセットから選択できます。これにより、表3.1「アクセス制御の標準的なロール」 で説明されているアクセスレベルが提供されます。

表3.1 アクセス制御の標準的なロール

ロール説明

viewer

コンテナーへの読み取り専用アクセスを許可します。

manager

アプリケーションのデプロイや実行を行う通常のユーザーに、適切なレベルで読み取り/書き込みアクセスを許可します。ただし、機密性の高いコンテナー設定オプションへのアクセスをブロックします。

admin

コンテナーへのアクセスを無制限に許可します。

ssh

SSH ポートを介したリモートコンソールアクセスの許可を付与します。

ロールベースのアクセス制御の詳細は、ロールベースのアクセス制御 を参照してください。

3.1.5. Apache Karaf コンテナーによって公開されたポート

次のポートがコンテナーによって公開されます。

  • コンソールポート: Apache Karaf シェルコマンドを使用して、コンテナーインスタンスのリモート制御を有効にします。このポートはデフォルトで有効になっており、JAAS 認証と SSH の両方で保護されています。
  • JMX ポート: JMX プロトコルを介したコンテナーの管理を可能にします。このポートはデフォルトで有効になっており、JAAS 認証によって保護されています。
  • Web コンソールポート: Web コンソールサーブレットをホストできる組み込みの Undertow コンテナーにアクセスできます。デフォルトでは、Fuse Console は Undertow コンテナーにインストールされています。

3.1.6. リモートコンソールポートの有効化

次の両方の条件が当てはまる場合はいつでも、リモートコンソールポートにアクセスできます。

  • JAAS は、少なくとも 1 セットのログイン資格情報で設定されています。
  • クライアントモードでは、Karaf ランタイムは開始されて いません (クライアントモードはリモートコンソールポートを完全に無効にします)。

たとえば、コンテナーが実行されているのと同じマシンからリモートコンソールポートにログオンするには、次のコマンドを入力します。

./client -u Username -p Password

ここで、Username および Password は、ssh ロールを持つ JAAS ユーザーのクレデンシャルです。リモートポートを介して Karaf コンソールにアクセスする場合、権限は etc/users.properties ファイルでユーザーに割り当てられたロールによって異なります。コンソールコマンドの完全なセットにアクセスする場合は、ユーザーアカウントに admin ロールが必要です。

3.1.7. リモートコンソールポートのセキュリティー強化

リモートコンソールポートのセキュリティーを強化するために、次の手段を採用できます。

  • JAAS ユーザーの資格情報に強力なパスワードが設定されていることを確認する。
  • X.509 証明書をカスタマイズする (Java キーストアファイル InstallDir/etc/host.key をカスタムキーペアに置き換えます)。

3.1.8. JMX ポートの有効化

JMX ポートはデフォルトで有効になっており、JAAS 認証でセキュリティーが確保されています。JMX ポートにアクセスするには、少なくとも 1 セットのログイン認証情報を使用して JAAS を設定しておく必要があります。JMX ポートに接続するには、JMX クライアント (例: jconsole) を開き、以下の JMX URI に接続します。

service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root

また、接続するには、有効な JAAS 認証情報を JMX クライアントに渡す必要があります。

注記

一般的に、JMX URI の最後は /karaf-ContainerName の形式を取ります。コンテナー名を root から他の名前に変更する場合は、それに応じて JMX URI を変更する必要があります。

3.1.9. Fuse Console ポートのセキュリティー強化

Fuse Console は、JAAS 認証ですでに保護されています。SSL セキュリティーを追加するには、Undertow HTTP サーバーのセキュア化 を参照してください。