セキュリティ

Elasticsearch SQLは、クラスターでこれが有効になっている場合にセキュリティと統合されます。このようなシナリオでは、Elasticsearch SQLは、トランスポート層でのセキュリティ(消費者とサーバー間の通信を暗号化することによって)と認証(アクセス層のため)をサポートします。

SSL/TLS構成

暗号化されたトランスポートの場合、Elasticsearch SQLでSSL/TLSサポートを有効にして、Elasticsearchとの通信を適切に確立する必要があります。これは、sslプロパティをtrueに設定するか、URLにhttpsプレフィックスを使用することで行います。

SSL構成(証明書がCAによって署名されているかどうか、JVMレベルでグローバルか、単一のアプリケーションにローカルかどうか)によっては、keystoreおよび/またはtruststoreの設定が必要になる場合があります。これは、資格情報が保存される場所(keystore - 通常は秘密鍵と証明書を保存)と、それらを検証する方法(truststore - 通常はCA(証明書機関)として知られる第三者の証明書を保存)です。

通常(再度、環境が大きく異なる可能性があることに注意してください)、Elasticsearch SQLのSSL設定がJVMレベルで既に行われていない場合、Elasticsearch SQLのセキュリティがクライアント認証(PKI - 公開鍵基盤)を必要とする場合は、キーストアを設定し、SSLが有効になっている場合はtruststoreを設定する必要があります。

認証

Elasticsearch SQLの認証サポートは2種類あります:

  • ユーザー名/パスワード
  • これらはuserおよびpasswordプロパティを通じて設定します。
  • PKI/X.509
  • X.509証明書を使用してElasticsearch SQLをElasticsearchに認証します。これには、適切なユーザー(Elasticsearchで構成された)にプライベートキーと証明書を含むkeystoreを設定し、Elasticsearchクラスター内のSSL/TLS証明書に署名するために使用されるCA証明書を含むtruststoreを設定する必要があります。つまり、Elasticsearch SQLを認証するためのキーを設定し、それが正しいものであることを確認する必要があります。そのためには、ssl.keystore.locationおよびssl.truststore.locationプロパティを設定して、使用するkeystoreおよびtruststoreを示す必要があります。これらはパスワードで保護することをお勧めします。この場合、ssl.keystore.passおよびssl.truststore.passプロパティが必要です。

権限(サーバー側)

サーバー上では、ユーザーがSQLを実行できるようにいくつかの権限を追加する必要があります。SQLを実行するには、ユーザーは最低限readおよびindices:admin/getの権限が必要であり、一部のAPIの部分ではcluster:monitor/mainが必要です。

権限は、ロールを作成することによって追加でき、そのロールをユーザーに割り当てます。ロールはKibana、API呼び出しまたはroles.yml構成ファイルを使用して作成できます。Kibanaまたはロール管理APIを使用することがロールを定義するための推奨方法です。ファイルベースのロール管理は、変更する必要のないロールを定義したい場合に便利です。roles.ymlで定義されたロールを表示または編集するためにロール管理APIを使用することはできません。

ロール管理APIを使用して権限を追加する

この例では、testインデックスをJDBCでクエリしてSQLを実行できるロールを構成します:

Python

  1. resp = client.security.put_role(
  2. name="cli_or_drivers_minimal",
  3. cluster=[
  4. "cluster:monitor/main"
  5. ],
  6. indices=[
  7. {
  8. "names": [
  9. "test"
  10. ],
  11. "privileges": [
  12. "read",
  13. "indices:admin/get"
  14. ]
  15. }
  16. ],
  17. )
  18. print(resp)

Js

  1. const response = await client.security.putRole({
  2. name: "cli_or_drivers_minimal",
  3. cluster: ["cluster:monitor/main"],
  4. indices: [
  5. {
  6. names: ["test"],
  7. privileges: ["read", "indices:admin/get"],
  8. },
  9. ],
  10. });
  11. console.log(response);

コンソール

  1. POST /_security/role/cli_or_drivers_minimal
  2. {
  3. "cluster": ["cluster:monitor/main"],
  4. "indices": [
  5. {
  6. "names": ["test"],
  7. "privileges": ["read", "indices:admin/get"]
  8. }
  9. ]
  10. }

roles.ymlに権限を追加する

この例では、testおよびbortインデックスをJDBCでクエリしてSQLを実行できるロールを構成します。roles.ymlに次の内容を追加します:

Yaml

  1. cli_or_drivers_minimal:
  2. cluster:
  3. - "cluster:monitor/main"
  4. indices:
  5. - names: test
  6. privileges: [read, "indices:admin/get"]
  7. - names: bort
  8. privileges: [read, "indices:admin/get"]