搜尋資產時,您可以指定由資產中繼資料欄位、運算子和值組成的查詢,篩選搜尋結果。
可搜尋的欄位和資源
如要瞭解可在 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 欄位包含 alex 和 2020 兩個字詞 (依序排列) 的資產:
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\")"
組合
如要合併搜尋詞組,請使用大寫的邏輯運算子 AND 或 OR。使用括號時,可以選擇是否要加入 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。
您可以使用括號將組合類型分組。以下範例會傳回政策欄位包含 alex 和 charlie (順序不限) 的資產,或是政策欄位包含 bola 的資產。
policy:((alex charlie) OR bola)
您可以在組合中使用詞組,依序比對多個字詞。以下範例會傳回政策欄位包含 alex 和 2020 (依序排列) 或 bola 的資產:
policy:(("alex 2020") OR bola)
組合範例
以下查詢示範各種組合。請注意括號的位置,用來分隔 AND 和 OR 運算子。在單一括號內合併運算子無效,例如:policy:(alex charlie OR bola)。
| 查詢 | 說明 |
|---|---|
policy:(alex charlie) |
傳回 policy 欄位同時包含 alex 和 charlie 的資產。 |
policy:(alex OR charlie) |
傳回 policy 欄位包含 alex 或 charlie 的資產。
|
policy:((alex charlie) OR bola) |
傳回 policy 欄位同時包含 alex 和 charlie,或含有 bola 字詞的資產。
|
policy:(alex charlie) OR name:bola |
傳回 policy 欄位包含 alex 和 charlie,或 name 欄位包含 bola 的資產。 |
否定
您可以使用大寫的 NOT 運算子,排除搜尋查詢。系統支援括號,但並非必要。
否定範例
傳回
state欄位不含「running」一詞的資產。NOT state:running傳回
policy欄位既不包含alex也不包含charlie的資產。NOT policy:(alex OR charlie)傳回
networkTags欄位不含internal或private的資產。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
可用的比較運算子如下:
=:等於>:大於>=:大於或等於<:小於<=:小於或等於
如要與時間戳記 (例如儲存在 createTime 和 updateTime 資產中繼資料欄位中的時間戳記) 比較,請使用 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"