搜尋資產時,您可以指定由資產中繼資料欄位、運算子和值組成的查詢,篩選搜尋結果。
可搜尋的欄位和資源
如要瞭解可在 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"