ロールの検索フィルタの作成
このページでは、ロールの検索フィルタの定義方法を説明します。これらの指示は「新規ロールの作成」で詳述されている手順の 6 番目のステップに適用されます。
検索フィルタの理解
ロールの検索フィルタは、そのロールを持つユーザがアクセスできるログ データを定義します。キーワード、ワイルドカード、メタデータ フィールドおよび logical operator を使用して検索フィルタを定義できます。以下に簡単なロール フィルタを示します。
_sourceCategory=labs*
このフィルタは、_sourceCategory
が「labs」という文字列で始まるログへのアクセス権を付与するものです。(_sourceCategory
が「labs」という文字列で始まらないログにはアクセスできません。)
このフィルタを持つユーザが次のようなクエリを入力するとします。
_sourcecategory=labs/apache | parse "* --" as src_ip
| count by src_ip | sort _count
Sumo は自動的にクエリの先頭に AND を使用してこのロール フィルタを追加します (ユーザには表示されません)。
_sourceCategory=labs* AND (_sourcecategory=labs/apache
| parse "* --" as src_ip | count by src_ip | sort _count)
上記の例では、ログ データへのアクセス権を付与しています。逆に感嘆符 (!) を使用して明示的にデータへのアクセスを拒否することもできます。例:
!_sourceCategory=JobX*
このフィルタは、_sourceCategory
が「JobX」という文字列で始まるログ データへのアクセスを拒否するものです。(他の Source Category 値を持つログ データへのアクセスは制限されません)
上記の例は、いずれも 1 つのロールのみが関与しているため、1 つのロール フィルタが使用される単純なものです。
ただし、通常 Sumo ユーザには複数のロールが与えられます。ユーザが複数のロールを持つ場合、「複数のロール フィルタとフィルタの優先順位」で説明しているとおり、Sumo はいくつかのロール フィルタを OR で結合し、その表現をユーザのクエリの先頭に AND を用いて付加します。
検索フィルタの基本
以下のセクションでは、検索フィルタの制限を示して、フィルタでどのようにキーワード、ワイルドカード、メタデータ、logical operator を使用できるかを説明しています。
それぞれの例のフィルタの挙動の説明は、他に適用されているロール フィルタがないことを前提としています。実際には、ユーザに複数のロールを割り当てる可能性が高いでしょう。ロール フィルタの仕組みの基本を理解したら、「複数のロール フィルタとフィルタの優先順位」を参照してください。
検索フィルタの制限
- ロール フィルタに縦棒 (|) を含めることはできません。
- フィールド名と値のタイプの競合が起きるおそれがあるため、Scheduled View とパーティションは、ロール フィルタではサポートされていません。
- ロール フィルタは、メトリクス検索ではなくログ検索に適用されます。
- 1 つ以上の FER が、ロールの検索フィルタで使用している組み込みのメタデータ タグをオーバーライドする場合も、LiveTail では検索フィルタが意図する範囲の外のデータにアクセスできてしまいます。FER で、組み込みのメタデータ タグをオーバーライドしないようにするか、検索フィルタで、オーバーライドされたタグを除外する必要があります。
検索フィルタにおけるメタデータの使用
ロール検索フィルタには、メタデータ フィールドを使用できます。次の検索フィルタは、Collector からの「HR_Tools」という名前のログ データのみへアクセス権を付与するものです。
_collector=HR_Tools
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
_collector=HR_Tools AND <user-query>
検索フィルタにおける AND と OR の使用
検索フィルタには、AND と OR を使用できます。たとえば、次のロール フィルタは、2 つの Source Category からのログ データへのアクセス権を付与するために OR を使用しています。
_sourceCategory=stock OR _sourceCategory=insurance
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
(_sourceCategory=stock OR _sourceCategory=insurance) AND <user-query>
次のロール フィルタは、「HR_Tools」という名前の Collector からの「insurance」という Source Category を持つログ データへのアクセス権を付与するために AND を使用しています。
_collector=HR_Tools AND _sourceCategory=insurance
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
(_collector=HR_Tools AND _sourceCategory=insurance) AND <user-query>
検索フィルタにおけるキーワードの使用
ロール検索フィルタには、検索する文字列を含めることができます。次のロール フィルタは、「HR_Tools」という名前の Collector からのログのうち、「enrollment」という文字列を含むものへのアクセス権を付与するものです。
_collector=HR_Tools AND enrollment
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
(_collector=HR_Tools AND enrollment) AND <user-query>
検索フィルタにおけるワイルドカードの使用
ロール検索フィルタには、ワイルドカードとしてアスタリスク (*) を使用できます。次のロール フィルタは、名前が「HR」で始まるすべての Collector からのログへのアクセス権を付与するものです。
_collector=HR*
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
_collector=HR* AND <user-query>
次のロール フィルタは、名前が「HR」で始まるすべての Collector からのログのうち、「violation」という文字列が含まれるものへのアクセス権を付与するものです。
_collector=HR* AND violation
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
(_collector=HR* AND violation) AND <user-query>
検索フィルタにおける NOT としての ! の使用
ロール検索フィルタには、アクセスを許可するのではなく制限するために感嘆符 (!) を使用できます。次のフィルタの例を見てみましょう。
!_sourceHost=humanresources* AND !_sourceName=*finance* AND !_sourceCategory=*secret*
この場合、次の条件に該当するログ データへのアクセスを拒否します。
_sourceHost
が「humanresources」で始まる
_sourceName
に「finance」が含まれる
_sourceCategory
に「secret」が含まれる
このロール フィルタを持つユーザがクエリを実行すると、Sumo は次のように実行します。
(!_sourceHost=humanresources* AND !_sourceName=*finance* AND !_sourceCategory=*secret*) AND <your-query>
複数のロール フィルタとフィルタの優先順位
1 人のユーザに複数の Sumo ロールが割り当てられている場合、Sumo は各ロールのロール フィルタを OR で結合し、結合ロール フィルタを作成します。
複数のロール フィルタが 1 つのクエリに適用される場合、最も制約の少ないフィルタが優先されます。
例 1
次のロール フィルタがあるとします。
ロール | Filter |
ロール A | _source="GCP Audit" AND _collector="GCP" |
ロール B | _sourceCategory="Vx*" |
ロール A は、_source
タグが「GCP Audit」かつ _collector
タグが「GCP」であるログ データへのアクセス権を付与するものです。
ロール B は、_sourceCategory
タグが「Vx」で始まるログ データへのアクセス権を付与するものです。
ロール A とロール B を持つユーザがクエリを実行すると、Sumo は以下のように、フィルタに OR で適用してクエリの先頭に AND で付与します。
((_source="GCP Audit" AND _collector="GCP") OR _sourceCategory="Vx*")
AND <your-query>
結合フィルタは _source
タグが「GCP Audit」かつ _collector
タグが「GCP」であるログ データと、_sourceCategory
タグが「Vx」で始まるすべてのログ データへのアクセス権を付与します。
例 2
次のロール フィルタがあるとします。
ロール | Filter |
ロール A | _collector=fee* |
ロール B | !_collector=fi* |
ロール A は、_collector
タグが「fee*」に一致するログ データのみへのアクセス権を付与し、_collector
タグが他の値であるデータにはアクセスを許可しません。
ロール B は、_collector
タグが「fi」に一致しない任意のログ データへのアクセス権を付与するものです。
ロール A とロール B を持つユーザがクエリを実行すると、Sumo は以下のように、2 つのフィルタを OR で結合して、クエリの先頭に AND で付与します。
(_collector=fee OR !_collector=fi) AND <your-query>
最も制約の少ないロール フィルタが優先されます。したがって、ロール A が結果を _collector=fee*
に一致するログ データに効果的に制限しているにも関わらず、ロール B は _collector=fi*
に一致するものを除くすべての Collector へのアクセス権を付与しています。つまり、ロール B が優先され、ロール A は効力を発揮しません。
例 3
次のロール フィルタがあるとします。
ロール | Filter |
ロール A | _sourceCategory=analytics-lab* |
ロール B | _sourceCategory=analytics* |
ロール A は、_sourceCategory
が「analytics-lab」のログ データのみへのアクセス権を付与するものです。
ロール B は、_sourceCategory
が「analytics」で始まるログ データへのアクセス権を付与するものです。
ロール A とロール B を持つユーザがクエリを実行すると、Sumo は以下のように、2 つのフィルタを OR で結合します。
(_sourceCategory=analytics-lab OR _sourceCategory=analytics*) AND <your-query>
最も制約の少ないロール フィルタが優先されます。ロール A は単独で、「analytics-lab」という 1 つの Source Category からのログ データへのアクセス権を付与するものです。 ロール B は、「analytics」で始まるすべての Source Category からのログ データへのアクセス権を付与するものです。最も制約の少ないロール フィルタが優先されるため、_sourceCategory=analytics-lab
というタグのついたデータに加えて、_sourceCategory=analyticsLong
というタグのついたデータも返されます。
例 4
次のロール フィルタがあるとします。
ロール | Filter |
ロール A | _collector=prod* |
ロール B | !_sourceCategory=*shoguns* |
ロール A は、_collector
タグが「prod*」に一致するログ データへのアクセス権を付与し、_collector
タグが一致しないデータにはアクセスを許可しません。
ロール B は、_sourceCategory
タグに「shoguns」を含むログ データへのアクセスを拒否します。 _sourceCategory
タグに「shoguns」を含まないデータであればすべて利用可能です。
ロール A とロール B を持つユーザがクエリを実行すると、Sumo は以下のように、2 つのフィルタを OR で結合して、クエリの先頭に AND で付与します。
(_collector=prod* OR !_sourceCategory=*shoguns*) AND <your-query>
制約が最も少ないのはロール B です。結合ロール フィルタを持つユーザは、_sourceCategory
に「shoguns」という文字列を含まないログ データであれば、_collector
タグの値に関係なくすべて閲覧できます。