intra-mart Accel Platform Cassandra管理者ガイド 第15版 2018-12-01

7. Cassandra への接続認証設定

ここではCassandraへの接続において、接続ユーザ名およびパスワードによる認証設定を行う方法を紹介します。

注意

  • 接続認証の設定を行った場合、 intra-mart Accel Platform のセットアップ時に認証情報の設定が必要です。
    詳しくは、「 intra-mart Accel Platform セットアップガイド 」-「 Apache Cassandra接続情報 」を参照してください。
  • 複数台の Cassandra によるクラスタ構成を構築する場合には、すべてのノードに対して設定を行う必要があります。

7.1. 認証ライブラリの取得と展開

Cassandra 用の認証ライブラリ一式を入手します。
認証ライブラリは、「 プロダクトファイルダウンロード 」よりダウンロードできます。
入手したファイルを任意のパスに展開します。

7.2. ライブラリと設定ファイルの配置

認証ライブラリの圧縮ファイルを展開すると以下のファイルが展開されます。
  1. ./lib/cassandra_simple_auth-1.0.0.jar

    接続認証およびアクセス制御の実装クラスが格納されたライブラリファイルです。
  2. ./conf/passwd.properties

    接続認証に必要な接続ユーザ名とパスワードを記述するための設定ファイルです。
  3. ./conf/access.properties

    接続ユーザごとのアクセス権の制御設定を記述するための設定ファイルです。
それぞれのファイルを、%CASSANDRA_HOME%内の相対パスで対応するディレクトリにコピーします。
./lib/cassandra_simple_auth-1.0.0.jar → <%CASSANDRA_HOME%/lib/> にコピー
./conf/passwd.properties → <%CASSANDRA_HOME%/conf/> にコピー
./conf/access.properties → <%CASSANDRA_HOME%/conf/> にコピー

7.3. 使用する認証クラスの変更

<%CASSANDRA_HOME%/conf/cassandra.yaml>ファイルをエディタで開きます。
Cassandra の標準設定では、下記の接続認証およびアクセス制御クラスが設定されています。
# authentication backend, implementing IAuthenticator; used to identify users
authenticator: org.apache.cassandra.auth.AllowAllAuthenticator

# authorization backend, implementing IAuthority; used to limit access/provide permissions
authority: org.apache.cassandra.auth.AllowAllAuthority
標準の設定では Allow All という名前の通り、接続認証やアクセス制御を行わずにすべての接続を許可します。
これを下記の様に、ダウンロードした認証ライブラリ内のクラスを指定するように修正します。
# authentication backend, implementing IAuthenticator; used to identify users
# authenticator: org.apache.cassandra.auth.AllowAllAuthenticator
authenticator: org.apache.cassandra.auth.SimpleAuthenticator

# authorization backend, implementing IAuthority; used to limit access/provide permissions
# authority: org.apache.cassandra.auth.AllowAllAuthority
authority: org.apache.cassandra.auth.SimpleAuthority
これで接続認証およびアクセス制御クラスの実装が差し替わるようになりました。

注意

  • 弊社サイトにて提供している認証ライブラリ内の SimpleAuthority は、 Cassandra が提供しているサンプル実装に対して、 access.properties でキースペース内の全カラムファミリへのアクセス権を一括で設定可能にするカスタマイズを行っております。

7.4. 認証設定の追加

前段にて差し替えた実装クラスは、設定ファイル access.propertiespasswd.properties の認証設定ファイルパスを起動パラメータに指定する必要があります。
ここでは、利用するOSごとの起動パラメータの設定方法を説明します。

7.4.1. for Windows

<%CASSANDRA_HOME%/bin/cassandra.bat>ファイルをエディタで開きます。
下記のサンプルを参考に、 access.propertiespasswd.properties プロパティを追記します。
追記前
...
-XX:+UseCMSInitiatingOccupancyOnly^
-Dcom.sun.management.jmxremote.port=7199^
...
追記後
...
-XX:+UseCMSInitiatingOccupancyOnly^
-Daccess.properties=%CASSANDRA_HOME%/conf/access.properties^
-Dpasswd.properties=%CASSANDRA_HOME%/conf/passwd.properties^
-Dcom.sun.management.jmxremote.port=7199^
...

7.4.2. for Linux

</usr/local/cassandra/conf/cassandra-env.sh>ファイルをエディタで開きます。
下記のサンプルを参考に、 access.propertiespasswd.properties を追記します。
追記前
...
# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version:
# comment out this entry to enable IPv6 support).
JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true"

# jmx: metrics and administration interface
...
追記後
...
# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version:
# comment out this entry to enable IPv6 support).
JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true"

# set authentication parameter properties path.
JVM_OPTS="$JVM_OPTS -Daccess.properties=$CASSANDRA_HOME/conf/access.properties"
JVM_OPTS="$JVM_OPTS -Dpasswd.properties=$CASSANDRA_HOME/conf/passwd.properties"

# jmx: metrics and administration interface
...

注意

  • クラスタを構築し複数のCassandraで認証設定を有効にする場合、クラスタ内の全ノードに同一の設定が必要です。
  • 認証設定の有効/無効はクラスタ毎に適用されるため、同一クラスタ内のすべてのキースペースが認証設定の対象です。
  • 認証設定を有効にした場合の接続ユーザ名、および、パスワードは、クラスタ全体で同一の値を設定する必要があります。
    キースペース毎に変更することはできません。

7.5. 設定ファイルの解説

ここでは設定ファイルの設定値について説明します。

7.5.1. 接続認証設定 (passwd.properties)

標準の passwd.properties には、管理者を想定した admin と参照のみユーザを想定した user を設定してあります。
以下にコメント行を省いた設定値を記載します。
admin=admin_pwd
user=user_pwd
設定値のフォーマットは、「%接続ユーザ名%=%パスワード%」です。

7.5.2. アクセス権設定 (access.properties)

設定値のフォーマットは、「%アクセス権%=%接続ユーザ名%」です。
アクセス権には、以下の3つが定義されています。
  1. キースペースの編集権限

    <modify-keyspaces> : キースペースの作成・削除が可能な権限です。

    注意

    Apache Cassandra 1.1.12では、modify-keyspacesによるキースペース編集権限は設定できなくなりました。
    代替の設定方法として、キースペースごとに下記 キースペースへのアクセス権限 を設定してください。
  2. キースペースへのアクセス権限

    キースペース名.<rw> : キースペース内のカラムファミリを閲覧および変更が可能な権限です。
    キースペース名.<ro> : キースペース内のカラムファミリの閲覧のみが可能な権限です。
  3. キースペース内のカラムファミリへのアクセス権限

    キースペース名.カラムファミリ名.<rw> : キースペース内の特定カラムファミリ内のデータを閲覧および変更が可能な権限です。
    キースペース名.カラムファミリ名.<ro> : キースペース内の特定カラムファミリ内のデータの閲覧のみが可能な権限です。
    カラムファミリ名* を指定することで、全カラムファミリを指定することが可能です。
    今後の機能拡張にてカラムファミリが追加される可能性があるため、cassandra-cnofig.xmlに記述する接続ユーザには全カラムファミリの変更権限を設定してください。
標準の access.properties では、 passwd.properties で指定されたそれぞれのユーザに以下の権限が設定されています。
admin
  • キースペース編集権限
  • defaultキースペースのRead&Write権限
  • defaultキースペースの全カラムファミリのRead&Write権限
user
  • defaultキースペースのReadOnly権限
  • defaultキースペース内の全カラムファミリのReadOnly権限
以下に一部のコメント行を省いた設定値を記載します。
# The magical '<modify-keyspaces>' property lists users who can modify the
# list of keyspaces: all users will be able to view the list of keyspaces.
<modify-keyspaces>=admin

# Access to Keyspace 'default'
default.<rw>=admin
default.<ro>=user

# Access to all ColumnFamily
default.*.<rw>=admin
default.*.<ro>=user

注意

  • intra-mart Accel Platform 2014 Spring(Granada)以前のバージョンをお使いの場合

    • cassandra-config.xmlに設定する接続ユーザは、すべての変更権限を保持している必要があります。
    • cassandra-config.xmlを編集してキースペース名を変更した場合や、複数キースペースでの運用を行う場合には、キースペースおよびキースペース内のカラムファミリへのアクセス権の設定値を変更してください。
  • intra-mart Accel Platform 2014 Spring(Granada)以降のバージョンをお使いの場合

    • テナント環境セットアップ時に設定するCassandra接続情報の認証ユーザ名は、すべての変更権限を保持している必要があります。
    • Cassandra接続情報を編集してキースペース名を変更した場合や、複数キースペースでの運用を行う場合には、キースペースおよびキースペース内のカラムファミリへのアクセス権の設定値を変更してください。

7.6. 接続認証の確認方法

Cassandra への接続時に認証が必要となっていることを確認します。
ここでは、標準の設定ファイルにて認証設定を行うことを想定しています。
  1. Cassandra を起動します。

  2. Cassandra が起動していることを確認し、cassandra-cliを起動します。

    • Windowsの場合、<%CASSANDRA_HOME%/bin/cassandra-cli.bat>をダブルクリックします。

    • Linuxの場合、以下のコマンドで起動します。

      /usr/local/cassandra/bin/cassandra-cli
      
  3. コンソールが立ち上がったら、以下のコマンドを入力ください。

    connect localhost/9160;
    
    認証情報を指定していないため、以下のメッセージが出力されて接続に失敗します。
    Login failure. Did you specify 'keyspace', 'username' and 'password'?
    
    ローカル環境の Cassandra に接続した場合、cassandra-cliの起動時にも上記メッセージが出力されます。
  4. 以下のコマンドを入力し、cassandra-cliを一度終了します。

    quit;
    
  5. 次に、認証情報を指定しcassandra-cliを起動します。

    • Windowsの場合、コマンドプロンプトを起動し、以下のコマンドを実行します。

      %CASSANDRA_HOME%/bin/cassandra-cli -u admin -pw admin_pwd
      
    • Linuxの場合、以下のコマンドで起動します。

      /usr/local/cassandra/bin/cassandra-cli -u admin -pw admin_pwd
      

      コラム

      -u は、接続ユーザ名を指定するパラメータです。
      -pw は、パスワードを指定するパラメータです。

      注意

      認証クラスに PasswordAuthenticator を利用している場合は、デフォルトの管理ユーザとして cassandra ユーザが自動で指定されているため、 確認するコマンドは以下です。

      Windows

      %CASSANDRA_HOME%/bin/cassandra-cli -u cassandra -pw cassandra
      

      Linux

      /usr/local/cassandra/bin/cassandra-cli -u cassandra -pw cassandra
      
  6. コンソールが立ち上がったら、以下のコマンドを入力してください。

    connect localhost/9160;
    
    以下のメッセージが表示され、接続に成功したことが確認できます。
    Connected to: "IMBox Cluster" on localhost/9160
    

注意

intra-mart Accel Platform 2014 Spring(Granada)より、接続認証を利用する場合、あらかじめキースペースを作成する必要があります。
キースペースの作成、追加に関しては「Cassandra の操作」の「キースペースの作成方法」、「キースペースの作成方法(認証設定ありの場合)」を参照してください。