將建議工具與 Google SecOps 整合
本文說明如何整合 Recommender 與 Google Security Operations。
事前準備
在 Google SecOps 平台中設定 Recommender 整合功能前,請確認您具備下列條件:
自訂 Identity and Access Management 角色:這個角色包含查看及更新專案或機構建議所需的特定權限。
驗證方法:選擇建議使用的 Workload Identity (無金鑰) 方法,或服務帳戶 JSON 金鑰。
API 服務根目錄:存取 Recommender API 和 Cloud Resource Manager API 的端點。
自訂 IAM 角色權限
在 Google Cloud 控制台中建立自訂角色,並指派整合功能正常運作所需的權限。
在 Google Cloud 控制台中,前往「IAM & Admin」(IAM 與管理) >「Roles」(角色) 頁面。
按一下「建立角色」。
輸入角色的「標題」、「說明」和專屬「ID」。
將「角色發布階段」設為
General Availability。按一下「新增權限」,然後新增下列項目:
Recommender API:
recommender.iamPolicyInsights.getrecommender.iamPolicyInsights.listrecommender.iamPolicyRecommendations.getrecommender.iamPolicyRecommendations.listrecommender.iamPolicyRecommendations.update
Cloud Resource Manager API:
resourcemanager.projects.getresourcemanager.projects.listresourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
位置資訊存取權:
recommender.locations.getrecommender.locations.list
其他資源存取權:
resourcemanager.folders.getresourcemanager.folders.getIamPolicyresourcemanager.folders.setIamPolicyresourcemanager.organizations.getresourcemanager.organizations.getIamPolicyresourcemanager.organizations.setIamPolicy
點選「建立」。
驗證設定
Google SecOps 支援兩種驗證路徑。設定下列其中一種方法:
選項 1:Workload Identity (建議):建議使用這個方法,因為不需要管理及輪替長期有效的 JSON 金鑰,可提供更完善的安全性。
選項 2:服務帳戶 JSON 金鑰:使用標準 JSON 金鑰檔案進行驗證。只有在環境中無法使用 Workload Identity 時,才使用這個方法。
使用 Workload Identity 驗證身分 (建議)
這個方法會使用服務帳戶模擬功能,讓平台安全存取您的資源。
建立目標服務帳戶:
整合服務必須先在專案中建立專屬服務帳戶,並指派必要權限,才能存取資源。 Google Cloud
- 在 Google Cloud 控制台中,依序前往「IAM & Admin」(IAM 與管理)>「Service Accounts」(服務帳戶)。
- 按一下「建立服務帳戶」。
- 提供名稱和 ID,然後按一下「建立並繼續」。
- 在「將專案存取權授予這個服務帳戶」下方,選取上一節建立的自訂 IAM 角色。
- 按一下 [完成]。
- 複製服務帳戶的電子郵件地址。
找出 Google SecOps 執行個體 ID:
如要啟用安全模擬,您必須先找出特定 Google SecOps 執行個體使用的專屬服務帳戶身分。
- 在 Google SecOps 中,依序前往「Content Hub」>「Response Integrations」。
- 搜尋並選取 Recommender 整合服務。
- 將目標服務帳戶電子郵件地址貼到
Workload Identity Email中。 - 依序按一下「儲存」和「測試」。測試預計會失敗。
- 按一下「測試」右側的 close_small,然後搜尋錯誤訊息,找出開頭為
gke-init-python@...或soar-python@...的電子郵件地址。複製這個專屬電子郵件地址。
授予模擬權限:
最後一個步驟是授予執行個體身分權限,讓執行個體身分可做為目標服務帳戶,執行動作時無須使用靜態金鑰檔案。
- 返回Google Cloud 控制台的「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 選取您建立的目標服務帳戶名稱。
- 前往「Permissions」(權限) 分頁,然後按一下「Grant access」(授予存取權限)。
- 在「New principals」(新增主體) 欄位中,貼上電子郵件地址。
- 在「Select a role」(選取角色) 欄位中,選擇「Service account token creator」(服務帳戶憑證建立者) (
roles/iam.serviceAccountTokenCreator)。 - 按一下 [儲存]。請注意,這項權限可能需要幾分鐘才能生效,連線測試才會成功。
使用服務帳戶 JSON 金鑰進行驗證
只有在環境中無法使用 Workload Identity 時,才使用這個方法。
建立服務帳戶:
如要使用金鑰驗證,您必須先在Google Cloud 專案中建立服務帳戶,做為整合的 ID。
- 在 Google Cloud 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「建立服務帳戶」。
- 提供名稱和 ID,然後按一下「建立並繼續」。
- 在「將專案存取權授予這個服務帳戶」下方,選取您建立的自訂 IAM 角色。
- 按一下 [完成]。
產生並儲存 JSON 金鑰:
建立服務帳戶後,您必須產生私密 JSON 金鑰檔案,其中包含 Google SecOps 登入所需的憑證。
- 在「IAM & Admin」>「Service Accounts」中,選取您建立的服務帳戶。
- 前往「金鑰」分頁。
- 依序點選「新增金鑰」>「建立新的金鑰」。
- 選取「
JSON」做為金鑰類型,然後按一下「建立」。JSON 檔案會下載至您的電腦。 - 複製這個檔案的完整內容,並在整合設定期間貼到
User's Service Account中。
整合參數
整合 Recommender 需要下列參數:
| 參數 | 說明 |
|---|---|
API Root |
必填。 Recommender 服務的 API 根目錄。 預設值為 |
Resource Manager API Root |
必填。 用於管理專案和機構資源的 Resource Manager 服務 API 根層級。 預設值為 |
Organization ID |
選填。 與整合服務搭配使用的 Google Cloud 機構專屬 ID。 |
Project ID |
選填。 用於擷取建議的 Google Cloud 專案 ID。 |
Quota Project ID |
選填。 用於計費和配額的專案 ID。 如未提供值,系統會使用與服務帳戶憑證相關聯的專案。 |
Workload Identity Email |
選填。 用於 Workload Identity 模擬的服務帳戶用戶端電子郵件地址。 |
User's Service Account |
選填。 服務帳戶 JSON 金鑰檔案的完整內容。 |
Verify SSL |
選填。 如果選取這個選項,整合服務會在連線至 Recommender 伺服器時驗證 SSL 憑證。 (預設為啟用)。 |
如需在 Google SecOps 中設定整合功能的操作說明,請參閱「設定整合功能」。
如有需要,您可以在稍後階段進行變更。設定整合執行個體後,您就可以在應對手冊中使用該執行個體。如要進一步瞭解如何設定及支援多個執行個體,請參閱「支援多個執行個體」。
動作
如要進一步瞭解動作,請參閱「 從工作台回覆待處理動作」和「執行手動動作」。
套用 IAM 建議
根據提供的輸入內容套用 IAM 建議。
這項動作僅適用於google.iam.policy.Recommender建議。
實體
系統不會對實體執行這項操作。
動作輸入內容
如要設定動作,請使用下列參數:
| 參數 | |
|---|---|
IAM Recommendations JSON |
必填。 建議的 JSON 結果。 JSON 結果可做為「列出最佳化建議」或「取得最佳化建議」動作的預留位置。 |
動作輸出內容
| 動作輸出類型 | |
|---|---|
| 案件總覽附件 | 不適用 |
| 案件總覽連結 | 不適用 |
| 案件總覽表格 | 不適用 |
| 補充資訊表格 | 不適用 |
| 實體洞察 | 不適用 |
| 深入分析 | 不適用 |
| JSON 結果 | 可用 |
| 立即可用的小工具 | 不適用 |
| 指令碼結果 | 可用 |
指令碼結果
| 指令碼結果名稱 | 值 |
|---|---|
| is_success | True/False |
JSON 結果
{
"applied_recommendations": [
{
"name": "projects/PROJECT_ID/locations/global/recommenders/google.iam.policy.Recommender/recommendations/217d3019-bae5-4a52-9968-787fdd546a53",
"description": "Replace the current role with a smaller role to cover the permissions needed.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 610
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "add",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/-",
"value": "USER_ID@example.com",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/role": "roles/compute.instanceAdmin"
}
},
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/compute.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "user:USER_ID@example.com",
"removedRole": "roles/compute.admin",
"addedRoles": [
"roles/compute.instanceAdmin"
],
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "SUCCEEDED",
"stateMetadata": {
"applied_by": "bulk_apply_by_automated_script-2023-08-11"
}
},
"etag": "\"892d57ee41baa03e\"",
"recommenderSubtype": "REPLACE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID"
}
],
"priority": "P4"
},
{
"name": "projects/PROJECT_ID/locations/global/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID",
"description": "Replace the current role with a smaller role to cover the permissions needed.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 19
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "add",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/-",
"value": "user:USER_ID@example.com",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
}
},
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "user:USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/storage.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "user:USER_ID@example.com",
"removedRole": "roles/storage.admin",
"addedRoles": [
"roles/storage.objectAdmin"
],
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "SUCCEEDED",
"stateMetadata": {
"applied_by": "bulk_apply_by_automated_script-2023-08-11"
}
},
"etag": "\"af7635ffeb512998\"",
"recommenderSubtype": "REPLACE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID"
}
],
"priority": "P4"
}
],
"failed_recommendations": []
}
充電盒外殼
這個動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully applied provided IAM recommendations. |
動作成功。 |
Successfully applied provided IAM recommendation, but some of the
recommendations were not applied. |
動作成功。 |
No provided IAM recommendations were applied. |
建議失敗。 |
Error executing action ACTION_NAME. |
動作傳回錯誤。 |
取得建議
從 Recommender 服務取得特定建議。
實體
系統不會對實體執行這項操作。
動作輸入內容
如要設定動作,請使用下列參數:
| 參數 | |
|---|---|
Recommendation name |
必填。 指定要傳回的建議名稱。 這項動作接受以半形逗號分隔的多個值。 預期輸入內容範例:
projects/projectname/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0f262740-bf4a-4c3d-9573-0da3345cf3f7
|
動作輸出內容
| 動作輸出類型 | |
|---|---|
| 案件總覽附件 | 不適用 |
| 案件總覽連結 | 不適用 |
| 案件總覽表格 | 不適用 |
| 補充資訊表格 | 不適用 |
| 實體洞察 | 不適用 |
| 深入分析 | 不適用 |
| JSON 結果 | 可用 |
| 立即可用的小工具 | 不適用 |
| 指令碼結果 | 可用 |
指令碼結果
| 指令碼結果名稱 | 值 |
|---|---|
| is_success | True/False |
JSON 結果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/"
}
],
"priority": "P4"
}
]
充電盒外殼
這個動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully found recommendation in the Google Cloud Recommender
service. |
動作成功。 |
No recommendations were found in the Google Cloud Recommender
service.
|
無法取得資料。 |
Error executing action ACTION_NAME。 |
動作傳回錯誤。 |
列出建議
列出 Recommender 服務中的可用建議。
實體
系統不會對實體執行這項操作。
動作輸入內容
如要設定動作,請使用下列參數:
| 參數 | |
|---|---|
Recommendation Filter |
選填。 指定要擷取建議的篩選條件。 參數應為字串,且格式如下:
如未提供任何值,動作會從已設定的服務帳戶擷取專案 ID。 |
Recommendation Location |
必填。 指定 Google Cloud 要擷取建議的位置。 預設值為 |
Recommendation State |
選填。 指定要傳回的建議狀態。 預設值為 可能的值包括:
|
Recommendation Priority |
選填。 指定要傳回的建議優先順序。多個值可以指定為以半形逗號分隔的字串。 |
Recommender Subtype |
選填。 指定傳回的建議子類型。 預設值為 可能的值包括:
|
Max Records To Return |
選填。 指定要傳回的記錄數。如未提供任何值,這項動作預設會傳回 50 筆記錄。 |
動作輸出內容
| 動作輸出類型 | |
|---|---|
| 案件總覽附件 | 不適用 |
| 案件總覽連結 | 不適用 |
| 案件總覽表格 | 可用 |
| 補充資訊表格 | 不適用 |
| 實體洞察 | 不適用 |
| 深入分析 | 不適用 |
| JSON 結果 | 可用 |
| 立即可用的小工具 | 不適用 |
| 指令碼結果 | 可用 |
指令碼結果
| 指令碼結果名稱 | 值 |
|---|---|
| is_success | True/False |
JSON 結果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-27T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/",
"member": "serviceAccount:SERVICE_ACCOUNT_ID",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/i/locations/global/insightTypes/"
}
],
"priority": "P4"
},
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-27T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 5
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "user:USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/chroniclesm.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects",
"member": "user:USER_ID@example.com",
"removedRole": "roles/chroniclesm.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects"
}
],
"priority": "P4"
}
]
充電盒外殼
這個動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully found recommendations for the provided criteria in
the Google Cloud Recommender service. |
動作成功。 |
No recommendations were found for the provided criteria in the
Google Cloud Recommender service. |
沒有資料。 |
Error executing action ACTION_NAME. |
動作傳回錯誤。 |
這個動作會提供下列案件牆表格:
| 可用的建議 | |
|---|---|
| 資料欄 |
|
乒乓
使用 Google SecOps Marketplace 分頁中整合設定頁面提供的參數,測試與 Recommender 服務的連線。
實體
系統不會對實體執行這項操作。
動作輸入內容
不適用
動作輸出內容
| 動作輸出類型 | |
|---|---|
| 案件總覽附件 | 不適用 |
| 案件總覽連結 | 不適用 |
| 案件總覽表格 | 不適用 |
| 補充資訊表格 | 不適用 |
| 實體洞察 | 不適用 |
| 深入分析 | 不適用 |
| JSON 結果 | 不適用 |
| 立即可用的小工具 | 不適用 |
| 指令碼結果 | 可用 |
指令碼結果
| 指令碼結果名稱 | 值 |
|---|---|
| is_success | True/False |
充電盒外殼
這個動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully connected to the Google Cloud Recommender service
with the provided connection parameters! |
動作成功。 |
Failed to connect to the Google Cloud Recommender service!
|
動作傳回錯誤。 |
更新建議
更新 Recommender 服務中的建議。
實體
系統不會對實體執行這項操作。
動作輸入內容
使用下列參數設定動作:
| 參數 | |
|---|---|
Recommendation name |
必填。 指定要更新的建議名稱。 這項動作接受以半形逗號分隔的多個值。 預期輸入內容範例:
|
Recommendation State |
選填。 指定建議要變更的狀態。 預設值為 可能的值包括:
|
Recommendation Result |
選填。 指定建議要變更成的結果。 預設值為 可能的值包括:
|
動作輸出內容
| 動作輸出類型 | |
|---|---|
| 案件總覽附件 | 不適用 |
| 案件總覽連結 | 不適用 |
| 案件總覽表格 | 不適用 |
| 補充資訊表格 | 不適用 |
| 實體洞察 | 不適用 |
| 深入分析 | 不適用 |
| JSON 結果 | 可用 |
| 立即可用的小工具 | 不適用 |
| 指令碼結果 | 可用 |
指令碼結果
| 指令碼結果名稱 | 值 |
|---|---|
| is_success | True/False |
JSON 結果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/"
}
],
"priority": "P4"
}
]
充電盒外殼
這個動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully updated recommendation in the Google Cloud
Recommender service. |
動作成功。 |
No recommendations were found in the Google Cloud Recommender
service.
|
無法取得資料。 |
Error executing action ACTION_NAME。 |
動作傳回錯誤。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。