データストリームとエイリアスの権限付与

Elasticsearchのセキュリティ機能を使用すると、データストリームおよびエイリアスに対して実行される操作を保護できます。

データストリームの権限

インデックス権限を使用して、データストリームへのアクセスを制御します。データストリームに対する権限を付与すると、そのバックインデックスに対しても同じ権限が付与されます。

たとえば、my-data-streamは2つのバックインデックス、.ds-my-data-stream-2099.03.07-000001.ds-my-data-stream-2099.03.08-000002で構成されています。

ユーザーはread権限をmy-data-streamに付与されます。

Js

  1. {
  2. "names" : [ "my-data-stream" ],
  3. "privileges" : [ "read" ]
  4. }

ユーザーはストリームのバックインデックスに対して自動的に同じ権限が付与されるため、ユーザーは.ds-my-data-stream-2099.03.08-000002から直接ドキュメントを取得できます:

Python

  1. resp = client.get(
  2. index=".ds-my-data-stream-2099.03.08-000002",
  3. id="2",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: '.ds-my-data-stream-2099.03.08-000002',
  3. id: 2
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: ".ds-my-data-stream-2099.03.08-000002",
  3. id: 2,
  4. });
  5. console.log(response);

Console

  1. GET .ds-my-data-stream-2099.03.08-000002/_doc/2

その後、my-data-streamロールオーバーします。これにより、新しいバックインデックス.ds-my-data-stream-2099.03.09-000003が作成されます。ユーザーはread権限をmy-data-streamに持っているため、ユーザーは.ds-my-data-stream-2099.03.09-000003から直接ドキュメントを取得できます:

Python

  1. resp = client.get(
  2. index=".ds-my-data-stream-2099.03.09-000003",
  3. id="2",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: '.ds-my-data-stream-2099.03.09-000003',
  3. id: 2
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: ".ds-my-data-stream-2099.03.09-000003",
  3. id: 2,
  4. });
  5. console.log(response);

Console

  1. GET .ds-my-data-stream-2099.03.09-000003/_doc/2

エイリアス権限

インデックス権限を使用して、エイリアスへのアクセスを制御します。インデックスまたはデータストリームに対する権限は、そのエイリアスに対する権限を付与しません。エイリアスの管理に関する情報は、エイリアスを参照してください。

フィルタリングされたエイリアスドキュメントレベルのセキュリティの代わりに使用しないでください。Elasticsearchは常にエイリアスフィルターを適用するわけではありません。

たとえば、current_yearエイリアスは2015インデックスのみにポイントします。ユーザーはread権限を2015インデックスに付与されます。

Js

  1. {
  2. "names" : [ "2015" ],
  3. "privileges" : [ "read" ]
  4. }

ユーザーがcurrent_yearエイリアスからドキュメントを取得しようとすると、Elasticsearchはリクエストを拒否します。

Python

  1. resp = client.get(
  2. index="current_year",
  3. id="1",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: 'current_year',
  3. id: 1
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: "current_year",
  3. id: 1,
  4. });
  5. console.log(response);

Console

  1. GET current_year/_doc/1
  1. #### Js
  2. ``````js
  3. {
  4. "names" : [ "current_year" ],
  5. "privileges" : [ "read" ]
  6. }
  7. `