このトピックでは、Cassandra ノード間の通信およびクライアントと Cassandra ノード間の通信に認証を構成する方法について説明します。
ランタイム プレーンの Cassandra 用に認証を構成する方法
Cassandra は、クライアント マシンとデータベース クラスタの間、およびクラスタ内のノード間で安全な通信を提供します。暗号化を有効にすると、転送中のデータが侵害されず、転送のセキュリティが確保されます。Apigee ハイブリッドでは、Cassandra ノード間、およびクライアントと Cassandra ノード間の通信に対して、TLS がデフォルトで有効になります。
このトピックで説明するように、オーバーライド ファイルに直接配置するか、Kubernetes Secret に追加することで、ユーザー名とパスワードの組み合わせを使用して認証を構成できます。
Cassandra ユーザー認証について
Hybrid プラットフォームでは、Cassandra がランタイム プレーンデータのバックエンド データストアとして使用されます。デフォルトでは、クライアントから Cassandra への通信には認証が必要です。Cassandra と通信する複数のクライアント ユーザー用に、ユーザーにはデフォルトのパスワードが用意されています。デフォルトのパスワードを変更するために必要な手順については、オーバーライド ファイルでデフォルトのパスワードを変更するをご覧ください。
デフォルト ユーザーを含むこれらのユーザーは、次のとおりです。
- DML ユーザー: Cassandra に対してデータの読み取りと書き込み(KMS、KVM、キャッシュ保存、割り当て)を行うためにクライアントによって使用されます。
- DDL ユーザー: キースペースの作成、更新、削除などのデータ定義タスクのために MART によって使用されます。
- 管理者ユーザー: Cassandra クラスタで実行される管理アクティビティに使用されます。
- デフォルト Cassandra ユーザー: 認証が有効になっている場合、
cassandra
という名前のデフォルト ユーザーが Cassandra によって自動的に作成されます。 - JMX ユーザー: Cassandra JMX インターフェースによる認証と通信に使用されます。
- 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...