1

POST _security/api_key API を使用して Elasticsearch で API キーを作成したいのですが、これらを作成することはできますが、生成されたキーの検索機能を制限したいのですが、これはできません。

基本的に、私が達成したいのは、すべてのレコードに次のようなフィールド"username":"username1"または別のフィールドがあるとしましょう。つまり、すべてのレコードにユーザー名フィールド"username":"username2"の有効な値があります。

今私が欲しいのは"username":"username2"、このキーが (/index_name/_search) を検索する場合のように、AND ケースとしてそのキーを使用して作成されたすべての検索クエリに追加されるようなものを指定するキーを作成できるようにすることです

{
    "query": {
        "match": {
            "key_zz":"value_aa"
        }
    }
}

このクエリは、実際には以下の両方の AND になります (つまり、この組み合わせを持つレコードが存在するが、ユーザー"key_zz":"value_aa"名の値がusername2でない場合、API はそのオブジェクトを返しません)。

{
    "query": {
        "match": {
            "key_zz":"value_aa"
        }
    }
}

AND

{
    "query": {
        "must": { 
          "match" : {
            "username":"username2"
          } 
        }
    }
} 

次のすべての組み合わせでキーを作成しようとしました。

    "name": "key-name",
    "role_descriptors": {
        "role_name": {
            "indices": [
                {
                    "names": [
                        "index_name"
                    ],
                    "privileges": [
                        "read"
                    ],
                    "query": {
                        "match": {
                            "username": "value_custom"
                        }
                    }
                }
            ]
        }
    }
}

クエリ フィールドでは、次のすべての組み合わせを試しました。

           "query": {
                        "and": {
                            "username": "value_custom"
                        }
                    }
          "query": {
                        "bool": {
                            "must": {
                                "match": {
                                    "username": "value_custom"
                                }
                            }
                        }
                    }
           "query": {
                        "bool": {
                            "must": {
                                "bool": {
                                    "must": {
                                        "match": {
                                            "username": "value_custom"
                                        }
                                    }
                                }
                            }
                        }
                    }

しかし、上記のどれも機能しませんでした。また、以前はユーザー名フィールドのマッピング タイプはテキストでしたが、それをキーワードに更新しました。

一言で言えば、私が達成しようとしているのは、ある種のドキュメント レベルのセキュリティです。ElasticSearch にはある種のドキュメント レベル セキュリティ ( https://www.elastic.co/guide/en/elastic-stack-overview/current/document-level-security.html ) があることは知っていますが、私たちのアーキテクチャでは、達成したいこれには、検索機能が制限された API キーを使用します。私たちは現在 Algolia を使用しており、上記で説明した正確な実装を使用してこれを達成していました。ElasticSearch のドキュメントには、ロールを制限する方法についての参照がありますが、API キーを制限する方法については参照できません。これを達成するには助けが必要です。

また、ElasticSearch v7 を使用しています

いくつかの参照リンク:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role.html
4

0 に答える 0