ドキュメントレベルのセキュリティ
ドキュメントレベルのセキュリティは、ユーザーが読み取りアクセスできるドキュメントを制限します。特に、ドキュメントベースの読み取りAPIからアクセスできるドキュメントを制限します。
ドキュメントレベルのセキュリティを有効にするには、各ロールがアクセスできるドキュメントを指定するクエリを使用します。ドキュメント query
は特定のデータストリーム、インデックス、またはワイルドカード (*
) パターンに関連付けられ、データストリームおよびインデックスに指定された特権と連携して動作します。
指定されたドキュメント query
:
- 検索リクエストで定義されている場合と同じ形式を期待します
- 現在認証されているユーザーの詳細にアクセスできる ロールクエリのテンプレート化 をサポートします
- 文字列値またはネストされたJSONとして書かれたクエリを受け入れます
- Elasticsearchの大部分の クエリドメイン特化言語 (DSL) をサポートし、フィールドおよびドキュメントレベルのセキュリティに関して いくつかの制限 があります
query
パラメータを省略すると、該当するインデックスの権限エントリに対するドキュメントレベルのセキュリティが完全に無効になります。
次のロール定義は、すべての events-*
データストリームおよびインデックス内の click
カテゴリに属するドキュメントにのみ読み取りアクセスを付与します:
Python
resp = client.security.put_role(
name="click_role",
indices=[
{
"names": [
"events-*"
],
"privileges": [
"read"
],
"query": "{\"match\": {\"category\": \"click\"}}"
}
],
)
print(resp)
Js
const response = await client.security.putRole({
name: "click_role",
indices: [
{
names: ["events-*"],
privileges: ["read"],
query: '{"match": {"category": "click"}}',
},
],
});
console.log(response);
コンソール
POST /_security/role/click_role
{
"indices": [
{
"names": [ "events-*" ],
"privileges": [ "read" ],
"query": "{\"match\": {\"category\": \"click\"}}"
}
]
}
この同じクエリをネストされたJSON構文を使用して記述できます:
Python
resp = client.security.put_role(
name="click_role",
indices=[
{
"names": [
"events-*"
],
"privileges": [
"read"
],
"query": {
"match": {
"category": "click"
}
}
}
],
)
print(resp)
Js
const response = await client.security.putRole({
name: "click_role",
indices: [
{
names: ["events-*"],
privileges: ["read"],
query: {
match: {
category: "click",
},
},
},
],
});
console.log(response);
コンソール
POST _security/role/click_role
{
"indices": [
{
"names": [ "events-*" ],
"privileges": [ "read" ],
"query": {
"match": {
"category": "click"
}
}
}
]
}
次のロールは、department_id
が 12
に等しいドキュメントにのみ読み取りアクセスを付与します:
Python
resp = client.security.put_role(
name="dept_role",
indices=[
{
"names": [
"*"
],
"privileges": [
"read"
],
"query": {
"term": {
"department_id": 12
}
}
}
],
)
print(resp)
Js
const response = await client.security.putRole({
name: "dept_role",
indices: [
{
names: ["*"],
privileges: ["read"],
query: {
term: {
department_id: 12,
},
},
},
],
});
console.log(response);
コンソール
POST /_security/role/dept_role
{
"indices" : [
{
"names" : [ "*" ],
"privileges" : [ "read" ],
"query" : {
"term" : { "department_id" : 12 }
}
}
]
}