Cassandra の認証の構成

このトピックでは、Cassandra ノード間の通信およびクライアントと Cassandra ノード間の通信に認証を構成する方法について説明します。

ランタイム プレーンの Cassandra 用に認証を構成する方法

Cassandra は、クライアント マシンとデータベース クラスタの間、およびクラスタ内のノード間で安全な通信を提供します。暗号化を有効にすると、転送中のデータが侵害されず、転送のセキュリティが確保されます。Apigee ハイブリッドでは、Cassandra ノード間、およびクライアントと Cassandra ノード間の通信に対して、TLS がデフォルトで有効になります。

このトピックで説明するように、オーバーライド ファイルに直接配置するか、Kubernetes Secret に追加することで、ユーザー名とパスワードの組み合わせを使用して認証を構成できます。

Cassandra ユーザー認証について

Hybrid プラットフォームでは、Cassandra がランタイム プレーンデータのバックエンド データストアとして使用されます。デフォルトでは、クライアントから Cassandra への通信には認証が必要です。Cassandra と通信する複数のクライアント ユーザー用に、ユーザーにはデフォルトのパスワードが用意されています。デフォルトのパスワードを変更するために必要な手順については、オーバーライド ファイルでデフォルトのパスワードを変更するをご覧ください。

デフォルト ユーザーを含むこれらのユーザーは、次のとおりです。

  1. DML ユーザー: Cassandra に対してデータの読み取りと書き込み(KMS、KVM、キャッシュ保存、割り当て)を行うためにクライアントによって使用されます。
  2. DDL ユーザー: キースペースの作成、更新、削除などのデータ定義タスクのために MART によって使用されます。
  3. 管理者ユーザー: Cassandra クラスタで実行される管理アクティビティに使用されます。
  4. デフォルト Cassandra ユーザー: 認証が有効になっている場合、cassandra という名前のデフォルト ユーザーが Cassandra によって自動的に作成されます。
  5. JMX ユーザー: Cassandra JMX インターフェースによる認証と通信に使用されます。
  6. Jolokia ユーザー: Cassandra JMX API による認証と通信に使用されます。

デフォルトの Cassandra ユーザーについて

Apigee ハイブリッド クラスタが作成され Cassandra 認証が有効になっている場合、最初のユーザー アカウントはデフォルトの Cassandra ユーザーとなり、ユーザー名 cassandra で識別されます。デフォルトの cassandra ユーザーはスーパーユーザーとして機能し、ユーザーロールの追加やデータベース スキーマの変更などのタスクを行います。

Apigee ハイブリッド apigee-cassandra-user-setup ジョブは、デフォルトの cassandra ユーザーを使用して新しいロールを確立し、このデフォルト ユーザーに関連付けられたパスワードを更新します。apigee-cassandra-user-setup ジョブは、Apigee ハイブリッド インスタンスの初回インストール、その後のインスタンスのアップグレード、リージョンの拡大の一環として行われる新しいインスタンスのプロビジョニングの際に実行されます。

Apigee ハイブリッド apigee-cassandra-user-setup ジョブを実行する場合、ジョブには、新規インストールやアップグレードの一環としてデータベース レベルの構成を更新および変更する機能が必要です。デフォルトの cassandra ユーザーは、apigee-cassandra-user-setup ジョブで新しい Cassandra Pod を設定しているときに存在することが保証されている唯一のユーザーです。スーパーユーザーのアクセス権を持つ既知のユーザーがいないと、Apigee ハイブリッドのアップグレードとリージョンの拡張は正常に行えません。

追加のセキュリティ対策の一環として、cassandra ユーザーのデフォルトのパスワードは初回使用後に変更されます。つまり、デフォルトの cassandra ユーザーが有効な場合でも、デフォルトの cassandra ユーザーを使用するには、新しいパスワードの情報が必要になります。デフォルトの cassandra ユーザーは、新しいインストールとリージョン拡張の一環として行われる apigee-cassandra-user-setup ジョブ以外のコンポーネントでは使用されません。

オーバーライド ファイルのデフォルト パスワードの変更

セキュリティのベスト プラクティスとして、Cassandra のデフォルトのパスワードは変更することをおすすめします。これは overrides.yaml ファイルで変更できます。次の構成を追加し、デフォルトのパスワードを適宜変更して、その変更をクラスタに適用します。詳しくは、cassandra をご覧ください。デフォルトのパスワードは values.yaml ファイルで確認できます。

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "NEW_PASSWORD"
     admin: ## the password for the admin user (static username: admin_user)
       password: "NEW_PASSWORD"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "NEW_PASSWORD"
     dml: ## the password for the DML User (static username: dml_user)
       password: "NEW_PASSWORD"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "NEW_PASSWORD" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "NEW_PASSWORD" ## the password for jolokia user

次の点にご注意ください。

  • 認証局(CA)のローテーションはサポートされていません。
  • パスフレーズ付きで生成されたサーバー証明書はサポートされていません。

Kubernetes Secret でユーザー名とパスワードを設定する

このセクションでは、認証に Kubernetes Secret を使用するように Cassandra を構成する方法について説明します。

Secret を作成する

次のテンプレートを使用して Kubernetes Secret を構成します。テンプレートを YAML ファイル(例: my-secret.yaml)に保存してから、必要な属性を編集してください。この方法を使用する場合は、各ユーザーのユーザー名とパスワードを指定する必要があります。

apiVersion: v1
kind: Secret
metadata:
  name: SECRET_NAME
  namespace: APIGEE_NAMESPACE
type: Opaque
data:
  default.password: DEFAULT_PASSWORD   #base64-encoded string
  admin.user: ADMIN_USERNAME   #base64-encoded string
  admin.password: ADMIN_PASSWORD   #base64-encoded string
  dml.user: DML_USERNAME   #base64-encoded string
  dml.password: DML_PASSWORD   #base64-encoded string
  ddl.user: DDL_USERNAME   #base64-encoded string
  ddl.password: DDL_PASSWORD   #base64-encoded string
  jmx.user: JMX_USERNAME   #base64-encoded string
  jmx.password: JMX_PASSWORD   #base64-encoded string
  jolokia.user: JOLOKIA_USERNAME   #base64-encoded string
  jolokia.password: JOLOKIA_PASSWORD   #base64-encoded string
  

ここで、SECRET_NAME は Secret に付ける名前、APIGEE_NAMESPACE は Apigee Pod がデプロイされている Namespace(デフォルトは apigee)、_USERNAME_PASSWORD は各ユーザーのユーザー名とパスワードです。ユーザー名とパスワードは Base64 でエンコードする必要があります。

Secret をクラスタに適用します。次に例を示します。

kubectl apply -f SECRET_FILE

Secret をオーバーライド ファイルに追加します。

cassandra:
  auth:
    secret: SECRET_NAME

更新された Cassandra のオーバーライドをクラスタに適用します。

Helm

helm upgrade datastore apigee-datastore/ \
--namespace apigee \
--atomic \
-f OVERRIDES_FILE.yaml

apigeectl

$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --datastore

Cassandra のログを確認する

Cassandra が起動したらすぐにログを確認します。次のログは、Cassandra のクライアント接続が暗号化されていることを示しています。

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...