Kerberos認証用にOpsCenterを構成する

OpsCenterでは、DataStax Enterpriseクラスターに対して認証にKerberosを使用できます。DataStax EnterpriseクラスターがKerberos認証を使用している場合は、クラスターをOpsCenterに追加する前に、OpsCenterプリンシパルを作成して構成します。

Kerberos認証にOpsCenterを構成する場合、まず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認証を使用するようにOpsCenterを構成する前に、Kerberos用にDSEを構成します。DSEドキュメントには、DSEを使用してKerberosを構成するためのガイドライン、サンプル、およびチュートリアルが記載されています。
  1. Kerberos用のDSEノードを準備します。
  2. Kerberosのガイドラインを確認します。
  3. 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などのサーバーの名前です。

重要: 次の手順では、サービス・プリンシパルの形式はkadminコマンドで作成された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などです。

手順

  1. 管理者ユーザーに対する初回チケット付与のチケットを取得してキャッシュするには、kinitコマンドを使用します。プロンプトが表示されたら、管理者ユーザーのパスワードを入力します。
    kinit cassandra/admin@dse
    Password for cassandra/admin@dse:
    ここで、dseはログインするクラスターです。
  2. kadmin CLIにアクセスするには、kadminコマンドを実行します。kadmin:アクセスを求めるプロンプトが表示されたら、管理者ユーザーのパスワードを入力します。
    kadmin
    Password for cassandra/admin@dse:
    kadmin:
  3. 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
    
  4. 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
  5. 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レルムです(すべて大文字で指定する必要があります)。
  6. OpsCenterデーモンのプリンシパルのCassandraユーザーを作成します。CQLロールは、3で作成したプリンシパル名と同じにする必要があります。この例では、プリンシパル名とCQLロール名はopscenterdです。
    CREATE ROLE 'opscenterd/node1@EXAMPLE.COM' WITH LOGIN = true;
    
  7. 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;
    
    ノード上に作成されたロールを表示するには、cqlshLIST ROLESコマンドを実行します。
    LIST ROLES
    EXIT
  8. 以前作成されたプリンシパルにマップする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
  9. OpsCenterノード上と、DataStaxエージェントが実行されている各ノード上で、keytabファイルを格納するディレクトリーを作成します。各ノード上で推奨されるディレクトリーは/etc/opscenter/securityです。
    mkdir /etc/opscenter/security
  10. 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
  11. 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
    
  12. OpsCenterにクラスターを追加します。OpsCenterにクラスターを追加するユーザーには、DSEノードでクラスターに追加する権限が必要です。
    注: クラスターを追加する場合は、[DSE security (kerberos) is enabled on my cluster]を選択し、必須情報を入力します。
    DSEセキュリティ(Kerberos)が有効になっているOpsCenter接続の構成設定
    1. サービス名を入力します。この名前は、 dse.yaml内で定義された、DSEによって使用されるKerberosサービスのユーザー名に一致する必要があります。たとえば、サーバー・プリンシパルがdse/HOST@EXAMPLE.COMである場合、このフィールドにはdseと入力する必要があります。
      kerberos_options:
      ...
      service_principal: dse/HOST@EXAMPLE.COM
    2. 3で作成されたOpscenterdクライアント・プリンシパルを入力します。
      例を次に示します。 opscenterd/opscenterd.EXAMPLE.COM
    3. 8で作成した[Opscenterd Keytab Location]の場所を入力します。このkeytabには、opscenter_client_principalの資格情報が含まれています。
      たとえば、/etc/opscenter/security/krb5_opsc.keytabなどです。
    4. 4で作成されたDataStaxエージェント・クライアント・プリンシパルを入力します。
      例を次に示します。 kerberos_client_principal: dx-agent/node1@EXAMPLE.COM
      重要: 各DataStaxエージェントで異なるプリンシパルを使用する場合は、このフィールドに入力する値はプレースホルダーのみです。各DataStaxエージェントに異なるプリンシパル名が含まれるため、各DataStaxエージェントのkerberos_client_principalプロパティをaddress.yaml で設定します。
    5. 8で作成した[DataStax Agent Keytab Location]の場所を入力します。このkeytabには、agent_client_principalの資格情報が含まれています。
      例を次に示します。/etc/opscenter/security/krb5_agent.keytab
  13. Kerberos情報を指定したら、[Next]をクリックして、OpsCenterにノードを追加する残りのプロンプトを完了します。
  14. 4の各DataStaxエージェントに対して異なるプリンシパルが作成された場合、各エージェントを再起動します。

タスクの結果

クラスターがOpsCenterに追加されたら、各フィールドに入力された値はクラスターに固有の構成ファイルに格納されます。このファイルは、/etc/opscenter/clusters/cluster_name.confとして作成されます。