第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 コマンドコンソール、および Fuse Management コンソールを介したアクセスを規制します。ユーザーにロールを割り当てる場合に、標準のロールのセットから選択できます。これにより、表3.1「アクセス制御の標準的なロール」 で説明されているアクセスレベルが提供されます。
ロール | 説明 |
---|---|
| コンテナーへの読み取り専用アクセスを許可します。 |
| アプリケーションのデプロイや実行を行う通常のユーザーに、適切なレベルで読み取り/書き込みアクセスを許可します。ただし、機密性の高いコンテナー設定オプションへのアクセスをブロックします。 |
| コンテナーへのアクセスを無制限に許可します。 |
| 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 サーバーのセキュア化 を参照してください。