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
xpack.security.transport.filter.allow: "192.168.0.1"
xpack.security.transport.filter.deny: "192.168.0.0/24"
#### Yaml
``````yaml
xpack.security.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ]
xpack.security.transport.filter.deny: _all
`
IPフィルタリングの構成は、IPv6アドレスもサポートしています。
Yaml
xpack.security.transport.filter.allow: "2001:0db8:1234::/48"
xpack.security.transport.filter.deny: "1234:0db8:85a3:0000:0000:8a2e:0370:7334"
DNSルックアップが利用可能な場合、ホスト名によるフィルタリングも可能です。
Yaml
xpack.security.transport.filter.allow: localhost
xpack.security.transport.filter.deny: '*.google.com'
IPフィルタリングの無効化
IPフィルタリングを無効にすると、特定の条件下でパフォーマンスがわずかに向上する可能性があります。IPフィルタリングを完全に無効にするには、xpack.security.transport.filter.enabled
設定の値をelasticsearch.yml
構成ファイルでfalse
に設定します。
Yaml
xpack.security.transport.filter.enabled: false
トランスポートプロトコルのIPフィルタリングを無効にし、HTTPのみを有効にすることもできます。
Yaml
xpack.security.transport.filter.enabled: false
xpack.security.http.filter.enabled: true
TCPトランスポートプロファイルの指定
TCPトランスポートプロファイルは、Elasticsearchが複数のホストにバインドできるようにします。Elasticsearchのセキュリティ機能により、異なるプロファイルに異なるIPフィルタリングを適用できます。
Yaml
xpack.security.transport.filter.allow: 172.16.0.0/24
xpack.security.transport.filter.deny: _all
transport.profiles.client.xpack.security.filter.allow: 192.168.0.0/24
transport.profiles.client.xpack.security.filter.deny: _all
プロファイルを指定しない場合、default
が自動的に使用されます。
HTTPフィルタリング
トランスポートプロトコルとHTTPプロトコルで異なるIPフィルタリングを持つことを希望するかもしれません。
Yaml
xpack.security.transport.filter.allow: localhost
xpack.security.transport.filter.deny: '*.google.com'
xpack.security.http.filter.allow: 172.16.0.0/16
xpack.security.http.filter.deny: _all
リモートクラスター(APIキーに基づくモデル)フィルタリング
他のクラスターがクロスクラスター検索またはクロスクラスター複製のためにAPIキー認証を使用して接続する場合、リモートクラスターサーバーインターフェースに対して異なるIPフィルタリングを持つことを希望するかもしれません。
Yaml
xpack.security.remote_cluster.filter.allow: 192.168.1.0/8
xpack.security.remote_cluster.filter.deny: 192.168.0.0/16
xpack.security.transport.filter.allow: localhost
xpack.security.transport.filter.deny: '*.google.com'
xpack.security.http.filter.allow: 172.16.0.0/16
xpack.security.http.filter.deny: _all
リモートクラスターのIPフィルタリングが有効かどうかは、xpack.security.transport.filter.enabled
によっても制御されます。これは、リモートクラスターとトランスポートインターフェースのフィルタリングが一緒に有効または無効にされなければならないことを意味します。しかし、正確な許可リストと拒否リストはそれぞれ異なることができます。
IPフィルタ設定の動的更新
クラウドベースのホスティングのような非常に動的なIPアドレスの環境で実行している場合、マシンをプロビジョニングする際にIPアドレスを事前に知ることは非常に困難です。構成ファイルを変更してノードを再起動する代わりに、クラスター更新設定APIを使用できます。例えば:
Python
resp = client.cluster.put_settings(
persistent={
"xpack.security.transport.filter.allow": "172.16.0.0/24"
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'xpack.security.transport.filter.allow' => '172.16.0.0/24'
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"xpack.security.transport.filter.allow": "172.16.0.0/24",
},
});
console.log(response);
Console
PUT /_cluster/settings
{
"persistent" : {
"xpack.security.transport.filter.allow" : "172.16.0.0/24"
}
}
フィルタリングを完全に動的に無効にすることもできます:
Python
resp = client.cluster.put_settings(
persistent={
"xpack.security.transport.filter.enabled": False
},
)
print(resp)
Ruby
response = client.cluster.put_settings(
body: {
persistent: {
'xpack.security.transport.filter.enabled' => false
}
}
)
puts response
Js
const response = await client.cluster.putSettings({
persistent: {
"xpack.security.transport.filter.enabled": false,
},
});
console.log(response);
Console
PUT /_cluster/settings
{
"persistent" : {
"xpack.security.transport.filter.enabled" : false
}
}
クラスターからロックアウトされないようにするために、デフォルトのバウンドトランスポートアドレスは決して拒否されません。これは、常にシステムにSSHで接続し、curlを使用して変更を適用できることを意味します。