搜尋查詢語法

搜尋資產時,您可以指定由資產中繼資料欄位、運算子和值組成的查詢,篩選搜尋結果。

可搜尋的欄位和資源

如要瞭解可在 searchAllResources 查詢中使用的欄位,請參閱「ResourceSearchResult 欄位」。

如需可在 searchAllIamPolicies 查詢中使用的欄位,請參閱「IamPolicySearchResult 欄位」。

如要瞭解可搜尋的資源,請參閱「資源類型」。

文字比對

搜尋相符文字時,您可以完全部分比對資產中繼資料欄位。

完全比對文字

如要完全比對文字,請使用 = (等號) 運算子,並採用下列語法:

ASSET_METADATA_FIELD=QUERY

例如:

location=us-central1-a

執行完全相符文字比對時,請注意下列規則:

  • 如要讓查詢結果為 true,查詢值必須與資產中繼資料欄位的值完全相符。

  • 如果欄位的值是清單,只要查詢值與清單中的其中一個元素相符,即視為相符。

  • 查詢值會區分大小寫。

  • 完全比對查詢值會視為詞組,但不得包含萬用字元

部分文字比對

如要進行部分文字比對,請使用 : (含有) 運算子,並採用下列語法:

ASSET_METADATA_FIELD:QUERY

例如:

location:us-central1

使用 : 運算子執行搜尋時,系統會將查詢值和資產中繼資料欄位值轉換為權杖,然後進行比較。系統會檢查查詢值中的每個字詞,判斷是否連續出現在資產中繼資料欄位的值中。使用部分相符時,查詢值不區分大小寫。

部分比對查詢值可以是詞組詞組組合,且可包含萬用字元。查詢最多可進行 10 項比較,且不得超過 2, 048 個半形字元。如果您需要執行較長的查詢,請傳送電子郵件至 gcp-asset-inventory-and-search-feedback@googlegroups.com

代碼化規則

部分文字比對的權杖化規則如下:

  • 移除開頭和結尾的特殊字元。

  • 非英數字元 ([a-zA-Z0-9])、底線 (_) 或連接號 (&) 會視為分隔符。

以下列舉幾個權杖化範例:

  • us-central1」已代碼化為「[us,central1]

  • alex-2020@EXAMPLE.com」已代碼化為「[alex,2020,example,com]

  • google.com/cloud」已代碼化為「[google,com,cloud]

  • Compute %Instance%」已代碼化為「[compute,instance]

  • $%^*-!」已代碼化為「[]

  • compute*storage」已代碼化為「[compute,storage]

  • compute&storage」已代碼化為「[compute&storage]

  • ALEX_test@example.com」已代碼化為「[alex_test,example,com]

  • instance/_my_vm_」已代碼化為「[instance,_my_vm_]

完全比對和部分比對文字範例

location 欄位值為 us-central1-a 的資產符合下列查詢。

查詢 比對原因
location=us-central1-a
比對成功,因為詞組 us-central1-a 與欄位值完全相同。
location:US-Central1-A
因為標點符號會視為分隔符,且查詢值不區分大小寫,所以相符。
location:"us central1 a"
相符,因為詞組 "us central1 a" 中的字詞與欄位值依序相符。
location:(central1 us a)
因為組合 (central1 us a) 中的字詞與欄位值中的字詞相符,順序不拘。
location:(a "us central1")
相符,因為組合中的詞組 a"us central1" 與欄位值中的字詞相符,順序不拘。由於「"us central1"」是詞組,因此這些字詞必須依序比對。
location:us-central*
相符,因為萬用字元 * 用於建立前置字串比對。

如果素材資源的 location 欄位值為 us-central1-a,就不會與下列查詢相符。

查詢 不相符的原因
location=US-central1-a
由於詞組會區分大小寫,因此不符合條件。如要不區分大小寫進行比對,請改用 : 運算子。
location=us-central1
不相符,因為片語與欄位值部分相符。 如要進行部分比對,請改用 : 運算子。

建構文字比對查詢

查詢值可由片語、組合、否定和萬用字元組成。

詞組

詞組是指依序比對的一或多個字詞。如要比對字詞,但不考慮順序,請改用組合

下列查詢會比對 policy 欄位包含 alex2020 兩個字詞 (依序排列) 的資產:

policy:"alex 2020"

policy 欄位值為 "alex.2020@example.com" 的素材資源與查詢相符,因為「alex」和「2020」這兩個字依序出現。系統會忽略「 .」,因為標點符號會視為分隔符。

policy 欄位值為 "2020.alex@example.com""alex.us.2020@example.com" 的資產不相符,因為「alex」和「2020」這兩個字並非依序排列。

建構詞組

建構片語時,請遵守下列規則:

  • 如果片語只包含 ISO 基本拉丁字母字元 [a-zA-Z]、數字 [0-9]、基本電子郵件或網址連接符 [_-+.@/&],或萬用字元 [*],則不需要以雙引號括住:

    policy:alex.2020@example.com
    

    不過,以雙引號括住仍可運作,且行為相同:

    policy:"alex.2020@example.com"
    
  • 如果片語含有空格或其他特殊字元,必須加上雙引號:

    location:"us central1"
    
  • 如果詞組以雙引號括住,且包含雙引號 (") 或反斜線 (\),則必須逸出這些字元,如 \"\\。或者,您也可以將非英數字元取代為單一空格,因為執行搜尋時,系統會將非英數字元視為分隔符。系統會以相同方式處理下列查詢:

    description:"One of \"those\" descriptions."
    description:"One of those descriptions."
    
  • 使用 gcloud CLI 或 REST API 時,您需要逸出用於表示片語的雙引號:

    --query="location:(a \"us central1\")"
    
    "query": "location:(a \"us central1\")"
    

組合

如要合併搜尋詞組,請使用大寫的邏輯運算子 ANDOR。使用括號時,可以選擇是否要加入 AND。舉例來說,系統會將下列查詢視為相同:

policy:(alex charlie)
policy:(alex AND charlie)

如果資產含有值清單的中繼資料欄位,AND 組合不保證所有字詞都必須在單一元素中。舉例來說,如果中繼資料欄位為 policy=["alex@example.com", "bola@example.com", "charlie@example.com"],使用 policy:(alex charlie) 搜尋會相符,因為 alex@example.com 包含 alex,而 charlie@example.com 包含 charlie

您可以使用括號將組合類型分組。以下範例會傳回政策欄位包含 alexcharlie (順序不限) 的資產,或是政策欄位包含 bola 的資產。

policy:((alex charlie) OR bola)

您可以在組合中使用詞組,依序比對多個字詞。以下範例會傳回政策欄位包含 alex2020 (依序排列) 或 bola 的資產:

policy:(("alex 2020") OR bola)

組合範例

以下查詢示範各種組合。請注意括號的位置,用來分隔 ANDOR 運算子。在單一括號內合併運算子無效,例如:policy:(alex charlie OR bola)

查詢 說明
policy:(alex charlie)
傳回 policy 欄位同時包含 alexcharlie 的資產。
policy:(alex OR charlie)
傳回 policy 欄位包含 alexcharlie 的資產。
policy:((alex charlie) OR bola)
傳回 policy 欄位同時包含 alexcharlie,或含有 bola 字詞的資產。
policy:(alex charlie) OR name:bola
傳回 policy 欄位包含 alexcharlie,或 name 欄位包含 bola 的資產。

否定

您可以使用大寫的 NOT 運算子,排除搜尋查詢。系統支援括號,但並非必要。

否定範例

  • 傳回 state 欄位不含「running」一詞的資產。

    NOT state:running
    
  • 傳回 policy 欄位既不包含 alex 也不包含 charlie 的資產。

    NOT policy:(alex OR charlie)
    
  • 傳回 networkTags 欄位不含 internalprivate 的資產。

    NOT (networkTags:internal OR networkTags:private)
    

萬用字元

您可以在片語中使用星號 (*) 做為萬用字元。星號的位置不同,代表的意義也不同。

  • 如果 * 位於片語結尾,系統會將其視為符記前置字串比對。舉例來說,"al 20*" 相當於 (al* 20*)。前置字元的順序不重要。

    "al 20*" 片語會比對欄位值與以 al 開頭的權杖 (例如 alex),以及以 20 開頭的權杖 (例如 2020)。

  • 如果是 labels,如果整個查詢值只包含單一 * (例如 "labels.env:*"),則代表存在性檢查。也就是說,Cloud Asset Inventory 會檢查標籤鍵 env 是否存在。 只有 labels 欄位支援存在性檢查。

  • 如果 * 位於詞組中間 (例如 "compute*storage"),系統會將其視為權杖化分隔符號。這個查詢值等同於 "compute storage"

  • 如果片語的開頭和結尾都有 *,例如 "*compute storage*",系統會將其視為權杖化分隔符號。這個查詢值相當於 "compute storage"

比較數值和時間戳記

如要比較數值和時間戳記,請使用比較運算子,並採用下列語法:

ASSET_METADATA_FIELD>=QUERY

可用的比較運算子如下:

  • =:等於

  • >:大於

  • >=:大於或等於

  • <:小於

  • <=:小於或等於

如要與時間戳記 (例如儲存在 createTimeupdateTime 資產中繼資料欄位中的時間戳記) 比較,請使用 64 位元帶正負號的整數 (以秒為單位的 Epoch 紀元時間戳記),或採用下列其中一種格式的 UTC+0 日期時間字串:

  • 2021-01-01 (YYYY-MM-DD)

  • "2021-01-01T00:00:00" ("YYYY-MM-DDThh:mm:ss")

日期時間範例

如果資產的 createTime 欄位值為 1609459200 (2021-01-01T00:00:00 的紀元時間戳記),則符合下列查詢:

createTime=1609459200
createTime=2021-01-01
createTime="2021-01-01T00:00:00"

createTime>1500000000
createTime>2020-01-01
createTime>"2020-01-01T00:00:00"

createTime>=1609459200
createTime>=2021-01-01
createTime>="2021-01-01T00:00:00"

createTime<1700000000
createTime<2022-01-01
createTime<"2022-01-01T00:00:00"

createTime<=1609459200
createTime<=2021-01-01
createTime<="2021-01-01T00:00:00"