IPフィルタリングによる接続制限

アプリケーションクライアント、ノードクライアント、トランスポートクライアント、リモートクラスタークライアント、またはクラスターに参加しようとしている他のノードに対して、IPフィルタリングを適用できます。

ノードのIPアドレスが拒否リストにある場合、Elasticsearchのセキュリティ機能はElasticsearchへの接続を許可しますが、接続は直ちに切断され、リクエストは処理されません。

Elasticsearchのインストールは、インターネット経由で公開アクセスできるようには設計されていません。IPフィルタリングおよびElasticsearchのセキュリティ機能の他の機能は、この条件を変更しません。

IPフィルタリングの有効化

Elasticsearchのセキュリティ機能には、ホスト、ドメイン、またはサブネットを許可または拒否するアクセス制御機能が含まれています。オペレータ権限機能が有効になっている場合、オペレータユーザーのみがこれらの設定を更新できます。

IPフィルタリングは、xpack.security.transport.filter.allowおよびxpack.security.transport.filter.deny設定をelasticsearch.ymlで指定することによって構成します。許可ルールは拒否ルールよりも優先されます。

明示的に指定されない限り、xpack.security.http.filter.*およびxpack.security.remote_cluster.filter.*設定は、対応するxpack.security.transport.filter.*設定の値がデフォルトとなります。

Yaml

  1. xpack.security.transport.filter.allow: "192.168.0.1"
  2. xpack.security.transport.filter.deny: "192.168.0.0/24"
  1. #### Yaml
  2. ``````yaml
  3. xpack.security.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ]
  4. xpack.security.transport.filter.deny: _all
  5. `

IPフィルタリングの構成は、IPv6アドレスもサポートしています。

Yaml

  1. xpack.security.transport.filter.allow: "2001:0db8:1234::/48"
  2. xpack.security.transport.filter.deny: "1234:0db8:85a3:0000:0000:8a2e:0370:7334"

DNSルックアップが利用可能な場合、ホスト名によるフィルタリングも可能です。

Yaml

  1. xpack.security.transport.filter.allow: localhost
  2. xpack.security.transport.filter.deny: '*.google.com'

IPフィルタリングの無効化

IPフィルタリングを無効にすると、特定の条件下でパフォーマンスがわずかに向上する可能性があります。IPフィルタリングを完全に無効にするには、xpack.security.transport.filter.enabled設定の値をelasticsearch.yml構成ファイルでfalseに設定します。

Yaml

  1. xpack.security.transport.filter.enabled: false

トランスポートプロトコルのIPフィルタリングを無効にし、HTTPのみを有効にすることもできます。

Yaml

  1. xpack.security.transport.filter.enabled: false
  2. xpack.security.http.filter.enabled: true

TCPトランスポートプロファイルの指定

TCPトランスポートプロファイルは、Elasticsearchが複数のホストにバインドできるようにします。Elasticsearchのセキュリティ機能により、異なるプロファイルに異なるIPフィルタリングを適用できます。

Yaml

  1. xpack.security.transport.filter.allow: 172.16.0.0/24
  2. xpack.security.transport.filter.deny: _all
  3. transport.profiles.client.xpack.security.filter.allow: 192.168.0.0/24
  4. transport.profiles.client.xpack.security.filter.deny: _all

プロファイルを指定しない場合、defaultが自動的に使用されます。

HTTPフィルタリング

トランスポートプロトコルとHTTPプロトコルで異なるIPフィルタリングを持つことを希望するかもしれません。

Yaml

  1. xpack.security.transport.filter.allow: localhost
  2. xpack.security.transport.filter.deny: '*.google.com'
  3. xpack.security.http.filter.allow: 172.16.0.0/16
  4. xpack.security.http.filter.deny: _all

リモートクラスター(APIキーに基づくモデル)フィルタリング

他のクラスターがクロスクラスター検索またはクロスクラスター複製のためにAPIキー認証を使用して接続する場合、リモートクラスターサーバーインターフェースに対して異なるIPフィルタリングを持つことを希望するかもしれません。

Yaml

  1. xpack.security.remote_cluster.filter.allow: 192.168.1.0/8
  2. xpack.security.remote_cluster.filter.deny: 192.168.0.0/16
  3. xpack.security.transport.filter.allow: localhost
  4. xpack.security.transport.filter.deny: '*.google.com'
  5. xpack.security.http.filter.allow: 172.16.0.0/16
  6. xpack.security.http.filter.deny: _all

リモートクラスターのIPフィルタリングが有効かどうかは、xpack.security.transport.filter.enabledによっても制御されます。これは、リモートクラスターとトランスポートインターフェースのフィルタリングが一緒に有効または無効にされなければならないことを意味します。しかし、正確な許可リストと拒否リストはそれぞれ異なることができます。

IPフィルタ設定の動的更新

クラウドベースのホスティングのような非常に動的なIPアドレスの環境で実行している場合、マシンをプロビジョニングする際にIPアドレスを事前に知ることは非常に困難です。構成ファイルを変更してノードを再起動する代わりに、クラスター更新設定APIを使用できます。例えば:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.security.transport.filter.allow": "172.16.0.0/24"
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.security.transport.filter.allow' => '172.16.0.0/24'
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.security.transport.filter.allow": "172.16.0.0/24",
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT /_cluster/settings
  2. {
  3. "persistent" : {
  4. "xpack.security.transport.filter.allow" : "172.16.0.0/24"
  5. }
  6. }

フィルタリングを完全に動的に無効にすることもできます:

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "xpack.security.transport.filter.enabled": False
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'xpack.security.transport.filter.enabled' => false
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "xpack.security.transport.filter.enabled": false,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT /_cluster/settings
  2. {
  3. "persistent" : {
  4. "xpack.security.transport.filter.enabled" : false
  5. }
  6. }

クラスターからロックアウトされないようにするために、デフォルトのバウンドトランスポートアドレスは決して拒否されません。これは、常にシステムにSSHで接続し、curlを使用して変更を適用できることを意味します。