セキュリティ
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
resp = client.security.put_role(
name="cli_or_drivers_minimal",
cluster=[
"cluster:monitor/main"
],
indices=[
{
"names": [
"test"
],
"privileges": [
"read",
"indices:admin/get"
]
}
],
)
print(resp)
Js
const response = await client.security.putRole({
name: "cli_or_drivers_minimal",
cluster: ["cluster:monitor/main"],
indices: [
{
names: ["test"],
privileges: ["read", "indices:admin/get"],
},
],
});
console.log(response);
コンソール
POST /_security/role/cli_or_drivers_minimal
{
"cluster": ["cluster:monitor/main"],
"indices": [
{
"names": ["test"],
"privileges": ["read", "indices:admin/get"]
}
]
}
roles.ymlに権限を追加する
この例では、test
およびbort
インデックスをJDBCでクエリしてSQLを実行できるロールを構成します。roles.yml
に次の内容を追加します:
Yaml
cli_or_drivers_minimal:
cluster:
- "cluster:monitor/main"
indices:
- names: test
privileges: [read, "indices:admin/get"]
- names: bort
privileges: [read, "indices:admin/get"]