Kerberos認証用にOpsCenterを構成する
OpsCenterでは、DataStax Enterpriseクラスターに対して認証にKerberosを使用できます。DataStax EnterpriseクラスターがKerberos認証を使用している場合は、クラスターをOpsCenterに追加する前に、OpsCenterプリンシパルを作成して構成します。
cluster_name.conf
cluster_name.confファイルの場所は、インストールのタイプによって異なります。- パッケージ・インストール:/etc/opscenter/clusters/cluster_name.conf
- tarボール・インストール:install_location/conf/clusters/cluster_name.conf
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
address.yaml
address.yamlファイルの場所は、インストールのタイプによって異なります。- パッケージ・インストール:/var/lib/datastax-agent/conf/address.yaml
- tarボール・インストール:install_location/conf/address.yaml
始める前に
- Kerberos用のDSEノードを準備します。
- Kerberosのガイドラインを確認します。
- Kerberosチュートリアルを完了します。
Kerberosプリンシパルのフォーマット
Kerberosプリンシパルを作成する方法は、使用されるKerberosのKey Distribution Center(KDC)サーバーのタイプによって異なります。次の手順は、MIT Kerberosに基づいています。
Kerberosプリンシパルは、次の例ではEXAMPLE.COM
であるREALMを含む完全修飾でなければなりません。REALMはプリンシパルで@
記号の後に続き、通常すべて大文字です。プリンシパルの最初の部分は、ユーザーやサービスなど、REALM内で特定のIDを表します。
Kerberosユーザー・プリンシパルは通常、REALMに加えて単一のコンポーネントを含みます。たとえば、user@EXAMPLE.COM
などです。Kerberosサービス・プリンシパルは異なるタイプのプログラムを表し、service/HOST@EXAMPLE.COM
という形式に従います。HOST
は、node1.example.com
などのサーバーの名前です。
keytab
の情報の形式と一致する必要があります。たとえば、サービス・プリンシパルがservice/HOST@EXAMPLE.COM
である場合、keytab
内のプリンシパルは同じ形式を使用する必要があります。この手順のKerberosコマンドでは、次の形式が使用されます。kadmin
の使用の詳細については、kadminのヘルプを参照してください。
kadmin -p user_name/admin
addprinc -randkey service_name/FQDN
addprinc -randkey HTTP/FQDN
quit
パラメーター | 説明 |
---|---|
kadmin |
add 権限を持つ管理者アカウントを使用して、Kerberos管理シェルを起動します。 |
addprinc |
ノードに新しいサービス・プリンシパルを作成します。 |
-randkey |
プリンシパルのキーをランダムな値に設定します。 |
service_name |
ユーザー定義のサービス名です。たとえば、opscenterd などです。 |
FQDN |
ノードの完全修飾ドメイン名。たとえば、node1.example.com などです。 |
手順
-
管理者ユーザーに対する初回チケット付与のチケットを取得してキャッシュするには、kinitコマンドを使用します。プロンプトが表示されたら、管理者ユーザーのパスワードを入力します。
kinit cassandra/admin@dse Password for cassandra/admin@dse:
ここで、dseはログインするクラスターです。 -
kadmin CLIにアクセスするには、kadminコマンドを実行します。kadmin:アクセスを求めるプロンプトが表示されたら、管理者ユーザーのパスワードを入力します。
kadmin Password for cassandra/admin@dse: kadmin:
-
HTTP通信の追加のプリンシパルに加えて、OpsCenterデーモン(opscenterd)のサービス・プリンシパルを作成します。OpsCenterのサーバー・プリンシパルの形式はopscenterd/FQDNです。ここで、FQDNは、OpsCenterノードの完全修飾ドメイン名です。次の例では、プリンシパル名としてopscenterdを使用していますが、任意の有効な名前を指定できます。
注: OpsCenterの高可用性を構成する場合は、OpsCenterプライマリ・インスタンスとバックアップ・インスタンスのプリンシパルを作成する必要があります。
kadmin: addprinc -randkey opscenterd/node1.example.com
kadmin: addprinc -randkey HTTP/node1.example.com
-
OpsCenter DataStaxエージェントに共有プリンシパルを作成するか、エージェントごとに1つのプリンシパルを作成します。DataStaxエージェント・ノードのサーバー・プリンシパルの形式はdxagent/FQDNです。ここで、FQDNは、DataStaxエージェント・ノードの完全修飾ドメイン名です。次の例では、プリンシパル名としてdx-agentを使用していますが、任意の有効な名前を指定できます。
重要: DataStaxエージェントごとに1つのプリンシパルを作成する場合は、各エージェントのkerberos_client_principalプロパティをaddress.yaml内で手動で更新します。
kadmin: addprinc -randkey dx-agent/node2.example.com
kadmin: addprinc -randkey HTTP/node2.example.com
-
listprincsコマンドを
kadmin
で実行して、プリンシパルが追加されていることを確認します。kadmin: listprincs
ここで、HTTP/node1.example.com@EXAMPLE.COM HTTP/node2.example.com@EXAMPLE.COM opscenterd/node1.example.com@EXAMPLE.COM dx-agent/node2.example.com@EXAMPLE.COM kadmin/admin@EXAMPLE.COM
node*.example.com
はFQDNであり、EXAMPLE.COM
はKerberosレルムです(すべて大文字で指定する必要があります)。 -
OpsCenterデーモンのプリンシパルのCassandraユーザーを作成します。CQLロールは、3で作成したプリンシパル名と同じにする必要があります。この例では、プリンシパル名とCQLロール名はopscenterdです。
CREATE ROLE 'opscenterd/node1@EXAMPLE.COM' WITH LOGIN = true;
-
4で作成したすべてのDataStaxエージェント・プリンシパルに対応するCassandraユーザーを作成します。CQLロール名は、プリンシパル名と同じにする必要があります。この例では、プリンシパル名とCQLロール名はdx-agentです。
CREATE ROLE 'dx-agent/node1@EXAMPLE.COM' WITH LOGIN = true;
CREATE ROLE 'dx-agent/node2@EXAMPLE.COM' WITH LOGIN = true;
CREATE ROLE 'dx-agent/node3@EXAMPLE.COM' WITH LOGIN = true;
ノード上に作成されたロールを表示するには、cqlshでLIST ROLESコマンドを実行します。LIST ROLES
EXIT
-
以前作成されたプリンシパルにマップする2つのkeytabファイル(OpsCenterノードに1つとDataStaxエージェントに1つ)を作成します。DataStaxエージェントごとに1つのプリンシパルを使用する場合は、それぞれに1つのkeytabを作成します。
前述の手順で作成したKerberosプリンシプルの格納には、keytabファイルが使用されます。
kadmin: ktadd -k /tmp/krb5_opsc.keytab opscenterd/node1.EXAMPLE.COM
kadmin: ktadd -k /tmp/krb5_agent.keytab dx-agent/node1.EXAMPLE.COM
kadmin: ktadd -k /tmp/krb5_agent.keytab dx-agent/node2.EXAMPLE.COM
kadmin: ktadd -k /tmp/krb5_agent.keytab dx-agent/node3.EXAMPLE.COM
kadmin: quit
プリンシパル情報(kadmin以外)を取得するには、klistコマンドを使用します。次の例では、このコマンドによってkrb5_opsc.keytabファイルからのチケットが要求されます。
klist -kt krb5_opsc.keytab
Keytab name: FILE:krb5_opsc.keytab KVNO Timestamp Principal ---- ------------------- ---------------------------- 2 01/26/2018 18:16:18 opscenterd/node1.EXAMPLE.COM
-
OpsCenterノード上と、DataStaxエージェントが実行されている各ノード上で、keytabファイルを格納するディレクトリーを作成します。各ノード上で推奨されるディレクトリーは/etc/opscenter/securityです。
mkdir /etc/opscenter/security
-
9で作成した場所に生成されたkeytabファイルをコピーします。たとえば、/etc/opscenter/security/krb5_opsc.keytabなどです。
scp /tmp/krb5_opsc.keytab opscenterd@node1.EXAMPLE.COM:/etc/opscenter/security
scp /tmp/krb5_agent.keytab dx-agent@node1.EXAMPLE.COM:/etc/opscenter/security
scp /tmp/krb5_agent.keytab dx-agent@node2.EXAMPLE.COM:/etc/opscenter/security
scp /tmp/krb5_agent.keytab dx-agent@node3.EXAMPLE.COM:/etc/opscenter/security
keytabファイルは、cluster_name.conf ファイルの次のプロパティで設定されます。(12でOpsCenterにクラスターを追加した後)ノード Property OpsCenter [kerberos] opscenterd_keytab_location DataStaxエージェント [kerberos] agent_keytab_location -
OpsCenterおよびDataStaxエージェントのkeytabとkeytabディレクトリーの所有者を変更します。
前述の手順で作成されたkeytabの場所にディレクトリーのパスを置き換えます。
sudo chown cassandra /etc/opscenter/security \ /etc/opscenter/security/krb5_opsc.keytab
sudo chown cassandra /usr/agent/conf \ /usr/agent/conf/krb5_agent.keytab
-
OpsCenterにクラスターを追加します。OpsCenterにクラスターを追加するユーザーには、DSEノードでクラスターに追加する権限が必要です。
注: クラスターを追加する場合は、[DSE security (kerberos) is enabled on my cluster]を選択し、必須情報を入力します。
- Kerberos情報を指定したら、[Next]をクリックして、OpsCenterにノードを追加する残りのプロンプトを完了します。
- 4の各DataStaxエージェントに対して異なるプリンシパルが作成された場合、各エージェントを再起動します。