Cassandra JMX 認証と認可: ユーザーの作成

⚡ スマートサマリー

Cassandra セキュリティは、内部認証、ロール権限、ファイアウォールルール、およびJMXアクセス制御に基づいています。このページでは、各レイヤーの有効化、ユーザーの作成、権限の付与、およびリモートのnodetoolアクセスを保護する方法について説明します。

  • 🔐 2 つのレイヤー: 認証はユーザーが誰であるかを証明するものであり、認可はそのユーザーが何を実行できるかを決定するものである。
  • ⚙️ 有効にする: どちらもデフォルトではオフになっており、認証システムと認可システムの設定でオンに切り替えることができます。
  • 👤 デフォルトアカウント: Cassandraに組み込まれているスーパーユーザーは他のすべてのアカウントを作成するため、そのパスワードをすぐに変更してください。
  • 🔑 助成金モデル: SELECT、MODIFY、ALTERなどの権限は、GRANTコマンドによってリソースごとに付与されます。
  • 📡 ポート制御: ノード間で7000、7001、7199、9042番ポートを開放し、JMX認証を維持してください。

Cassandra JMX認証と認可

セキュリティにはXNUMX種類あります Apache Cassandra およびDataStax Enterprise。

  • 内部認証
  • Authorization

内部認証と認可とは何ですか

内部認証は基本的にユーザー接続の検証です。ユーザーはログイン名とパスワードで認証されます。すべてのユーザーアカウントは Cassandra 内部的に。

内部認証は、ユーザーの権限を管理します。つまり、ユーザーが実行できる操作を規定します。例えば、どのユーザーにデータ読み取り権限のみ、どのユーザーにデータ書き込み権限、どのユーザーにデータ削除権限を与えるかといった権限を設定できます。

ただし、認証はKerberos(Kerberosは認証情報を安全に管理するために使用されます)やLDAP(LDAPはアカウントに関する信頼できる情報、例えばアクセス権限などを保持するために使用されます)を使用して外部から制御することもできます。

外部認証は、Kerberos および LDAP でサポートされる認証です。 Apache Cassandra 外部認証はサポートされていません。

DataStax EnterpriseのみがKerberosとLDAPによる外部認証をサポートしていますが、内部認証は Apache Cassandra DataStax Enterpriseも同様です。

認証と認可を構成する

In Cassandraデフォルトでは、認証と認可のオプションは無効になっています。認証と認可を有効にするには、cassandra.yaml ファイルを設定する必要があります。

cassandra.yaml ファイルを開き、以下に示すように、内部認証と認可に関する行のコメントを解除してください。

cassandra.yaml の認証および認可に関する行のコメントを解除する

  • cassandra.yaml ファイルでは、デフォルトでは認証子の値は「AllowAllAuthenticator」になっています。この認証子の値を「AllowAllAuthenticator」から「com.datastax.bdp.cassandra.auth.PasswordAuthenticator」に変更してください。
  • 同様に、cassandra.yaml では、デフォルトでは authorizer の値は 'AllowAllAuthorizer' になります。この authorizer の値を 'AllowAllAuthorizer' から 'com.datastax.bdp.cassandra.auth' に変更します。Cassandra承認者」。

これら2つのクラス名はDataStax Enterpriseの値です。オープンソースでは Apache Cassandra 同じ設定で PasswordAuthenticator (NAIST) と CassandraAuthorizerそして認証情報は system_auth キースペースの複製係数は1より大きくする必要があります。

ログイン

これで認証が有効になり、キースペースにアクセスしようとすると、 Cassandra エラーを返します。

デフォルトでは、 Cassandra ユーザー名「cassandra」、パスワード「cassandra」のスーパーアカウントが提供されます。「cassandra」アカウントにログインすれば、何でもできます。

これについては、以下のスクリーンショットを見てみましょう。デフォルトを使用していない場合、ログインは許可されません。 Cassandra "ユーザー名とパスワード"。

デフォルトの認証情報が使用されていない場合、cqlsh でログインが拒否されます。

さて、2番目のスクリーンショットでは、 Cassandra デフォルトのログイン資格情報を使用すると、ログインできます。

デフォルトのCassandra認証情報を使用してcqlshログインに成功しました。

このアカウントで別のユーザーを作成することもできます。デフォルトのパスワードから変更することをお勧めします。以下は、としてログインする例です。 Cassandra ユーザーとデフォルトパスワードの変更。

alter user cassandra with password 'newpassword';

新しいユーザーを作成する

「cassandra」アカウントを使用して新しいアカウントを作成できます。

新規ユーザーを作成する際には、ログイン名とパスワードに加え、そのユーザーがスーパーユーザーであるかどうかを指定します。新規ユーザーを作成できるのはスーパーユーザーのみです。

create user robin with password 'manager' superuser;
create user robin with password 'newhire';

次の構文ですべてのユーザーのリストを取得できます。

list users;

出力には、すべてのアカウントとそのスーパーユーザーフラグが一覧表示されます。

アカウントとスーパーユーザーフラグを表示するlist usersコマンドの出力

次の構文でユーザーを削除できます。

drop user laura;

Authorization

認可とは、ユーザーに権限を割り当てることであり、特定のユーザーが実行できるアクションを決定することです。

ユーザーに権限を割り当てるための一般的な構文を次に示します。

GRANT permission ON resource TO user

ユーザーに付与できる権限には以下の種類があります。

  1. 全て
  2. 変更する
  3. 承認する
  4. CREATE
  5. DROP
  6. 変更
  7. SELECT

ユーザーに権限を割り当てる例を次に示します。

Create user laura with password 'newhire'; 
grant all on dev.emp to laura;
revoke all on dev.emp to laura;
grant select on dev.emp to laura;

新しいユーザー「laura」がパスワード「newhire」で作成されます。

以下は、ユーザー「laura」がemp_bonusテーブルにアクセスしようとした例です。lauraはdev.empへのアクセス権限しか持っておらず、dev.emp_bonusテーブルへのアクセス権限は持っていないため、エラーが返されました。

ローラが許可なくemp_bonusテーブルをクエリするとエラーが返されます

select* form emp_bonus;

ユーザーに割り当てられているすべての権限の一覧を取得できます。権限情報を取得する例を以下に示します。

ローラのすべての権限の一覧出力

list all permissions of laura;

リソースに対するすべての権限を一覧表示することもできます。以下は、テーブルから権限を取得する例です。

dev.emp のすべての権限を一覧表示した結果

list all permissions on dev.emp;

ファイアウォールの構成

ファイアウォールが動作している場合、ノード間の通信のために以下のポートを開く必要があります。 Cassandra ポート。もし Cassandra ポートは開かれません、 Cassandra ノードは、データベースクラスタに参加するのではなく、独立したデータベースサーバーとして機能します。

Cassandra クライアントポート

ポート番号 詳細説明
9042 Cassandra クライアントポート
9160 Cassandra クライアントポートの節約

Cassandra ノード間ポート

ポート番号 詳細説明
7000 Cassandra ノード間クラスタ通信
7001 Cassandra SSL ノード間クラスタ通信
7199 Cassandra JMXモニタリングポート

公共ポート

ポート番号 詳細説明
22 SSHポート
8888 OpsCenter Web サイト。 ブラウザの http リクエスト。

Cassandra OpsCenterポート

ポート番号 詳細説明
61620 OpsCenter モニタリング ポート。
61621 Opscenterエージェントポート

現在のドライバは9042番ポートのみを使用します。9160番ポートは従来のThriftインターフェースに使用され、新しいクラスタでは閉じたままにすることができます。

JMX認証の有効化

デフォルト設定では、 CassandraJMX はローカルホストからのみアクセスできます。リモートから JMX にアクセスするには、cassandra-env.sh の LOCAL_JMX 設定を変更し、認証または SSL を有効にしてください。

JMX 認証を有効にした後、次のことを確認してください。 オペレーションセンター およびnodetoolは認証を使用するように構成されています。

手順

JMX 認証を有効にするには、次の手順を実行します。

  1. cassandra-env.sh ファイルで、次の行を追加または更新します。
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

    また、cassandra-env.sh ファイルの LOCAL_JMX 設定を変更してください。

    LOCAL_JMX=no
  2. /jdk_install_location/lib/management/ から jmxremote.password.template を /etc/cassandra/ にコピーし、jmxremote.password に名前を変更します。
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. jmxremote.password の所有権を実行するユーザーに変更します。 Cassandra 権限を読み取り専用に変更します。
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. jmxremote.password を編集し、JMX 準拠ユーティリティのユーザーとパスワードを追加します。
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. 加えます Cassandra /jdk_install_location/lib/management/jmxremote.access に対する読み取りおよび書き込み権限を持つユーザー
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. 再起動 Cassandra.
  7. を使用してnodetoolを実行します。 Cassandra ユーザーとパスワード。
    $ nodetool status -u cassandra -pw cassandra

よくあるご質問

どちらもsystem_authキースペース内のrolesテーブルとrole_permissionsテーブルに存在します。system_authのレプリカが失われると全員がアクセスできなくなる可能性があるため、本番環境で認証を有効にする前に、そのレプリケーション係数を上げてください。

CQLロールは、従来のユーザー構文に取って代わりました。ロールは権限を保持し、他のロールに権限を付与することができます。そのため、現在のリリースではCREATE USERコマンドはCREATE ROLEコマンドに置き換えられ、ユーザーコマンドはエイリアスとして保持されています。

いいえ。認証は身元を証明するだけであり、client_encryption_options が有効になっていない限り、パスワードはネットワーク上を平文で送信されます。TLS は、クライアントとノード間、およびノー​​ド間のトラフィックに対して個別に有効にしてください。

専用のスーパーユーザーを作成し、組み込みの Cassandra パスワードを変更するか、アカウントを削除します。ドキュメントに記載されている Cassandra/Cas​​sandra ペアをアクティブにしたままにしておくことが最も一般的な方法です。 Cassandra 設定ミス。

権限はキャッシュされます。変更は権限の有効期間が経過した後にのみ有効になるため、権限の付与または取り消しをテストする場合は、cassandra.yaml の設定を短くするか、ノードを再起動してください。

ポート7199上の認証不要のJMXは、ノードの完全な制御(廃止を含む)を可能にします。 Cassandra したがって、ローカルでバインドし、リモートアクセスはパスワードファイルまたはSSLが設定されている場合にのみ許可する必要があります。

機械学習モデルは、役割ごとに通常のクエリ構造、ログイン時間、送信元アドレスをプロファイリングし、アプリケーションアカウントが無関係なキースペースを読み取るなどの逸脱を検出します。これにより、静的ルールで見逃されていた認証情報の不正使用が明らかになります。

CopilotはコメントからCREATE ROLEおよびGRANTステートメントを素早く作成しますが、広範な権限を提案する傾向があります。 Rev生成されたすべてのグラントを最小権限の原則に照らして確認してから、本番環境で実行してください。 .