找出未使用的服務帳戶

本頁說明如何管理服務帳戶洞察資料,也就是專案中過去 90 天未使用的服務帳戶。

事前準備

必要的角色

如要取得管理服務帳戶深入分析所需的權限,請要求管理員在您要管理深入分析的專案中,授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色包含管理服務帳戶洞察資料所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

您必須具備下列權限,才能管理服務帳戶洞察資料:

  • 如要查看服務帳戶深入分析資料,請按照下列步驟操作:
    • recommender.iamServiceAccountinsights.get
    • recommender.iamServiceAccountinsights.list
  • 如要修改服務帳戶深入分析結果: recommender.iamServiceAccountinsights.update

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

列出服務帳戶深入分析結果

如要列出專案的所有服務帳戶洞察資料,請使用下列其中一種方法:

gcloud

使用 gcloud recommender insights list 指令,即可查看專案的所有服務帳戶洞察資料。

執行指令前,請先替換下列值:

  • PROJECT_ID:您要列出洞察資料的專案 ID。
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

輸出內容會列出專案的所有服務帳戶洞察資料。例如:

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE        DESCRIPTION
446303ba-2a14-49cc-b9fa-e2d2499d4f82  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-1@my-project.iam.gserviceaccount.com was inactive.
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-2@my-project.iam.gserviceaccount.com was inactive.
a627bed7-c8f4-4611-89c9-2a9a8618ca1b  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-3@my-project.iam.gserviceaccount.com was inactive.
a922dd59-df0a-422d-a2a4-096195e1dae5  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-4@my-project.iam.gserviceaccount.com was inactive.

REST

Recommender API 的 insights.list 方法會列出專案的所有服務帳戶洞察資料。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您要列出洞察資料的專案 ID。

HTTP 方法和網址:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights

如要傳送要求,請展開以下其中一個選項:

回應會列出專案的所有服務帳戶洞察資料。例如:

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "sa-1@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\"",
      "severity": "LOW"
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account sa-2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "sa-2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\"",
      "severity": "LOW"
    }
  ]
}

如要進一步瞭解洞察資料的元件,請參閱本頁的「查看服務帳戶洞察資料」。

取得單一服務帳戶洞察資料

如要進一步瞭解單一洞察資訊,包括洞察資訊的說明、狀態,以及與之相關的任何建議,請使用下列任一方法:

gcloud

使用 gcloud recommender insights describe 指令搭配洞察 ID,即可查看單一洞察資訊的相關資訊。

  • INSIGHT_ID:您要查看的洞察資料 ID。如要找出 ID,請列出專案的洞察資料
  • PROJECT_ID:您要管理洞察資料的專案 ID。
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

輸出結果會顯示詳細洞察資料。舉例來說,下列洞察資料指出服務帳戶 sa-1@my-project.iam.gserviceaccount.com 自 2020 年 10 月 11 日以來就未進行驗證。

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

如要進一步瞭解洞察資料的元件,請參閱本頁的「查看服務帳戶洞察資料」。

REST

Recommender API 的 insights.get 方法會取得單一洞察資料。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您要管理洞察資料的專案 ID。
  • INSIGHT_ID:您要查看的洞察資料 ID。如果不知道洞察 ID,您可以在專案中列出洞察資料來查看。洞察 ID 是洞察 name 欄位中 insights/ 後面的所有內容。

HTTP 方法和網址:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

如要傳送要求,請展開以下其中一個選項:

回應包含洞察資料。舉例來說,下列洞察資料指出服務帳戶 sa-1@my-project.iam.gserviceaccount.com 自 2020 年 10 月 11 日以來就未進行驗證。

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\"",
  "severity": "LOW"
}

如要進一步瞭解洞察資料的元件,請參閱本頁的「查看服務帳戶洞察資料」。

查看服務帳戶深入分析

取得單一洞察資料後,您可以查看其內容,瞭解所強調的資源使用模式。

洞察內容取決於其子類型。服務帳戶洞察資料 (google.iam.serviceAccount.Insight) 的子類型為 SERVICE_ACCOUNT_USAGE

SERVICE_ACCOUNT_USAGE 洞察資料包含下列元件,但不一定會按照這個順序顯示:

  • associatedRecommendations:與洞察相關聯的任何建議的 ID。如果沒有與洞察相關的最佳化建議,這個欄位會留空。
  • category:IAM 洞察的類別一律為 SECURITY
  • content:回報服務帳戶上次驗證的時間。這個欄位包含下列元件:

    • email:服務帳戶的電子郵件地址。
    • lastAuthenticatedTime:服務帳戶上次進行驗證的時間。如果服務帳戶沒有任何記錄的驗證,就不會納入這個欄位。
    • serviceAccountId:服務帳戶的專屬數字 ID。
  • description:洞察資料的摘要,可供人類閱讀。
  • etag:洞察資料目前狀態的專屬 ID。每次洞察資料變更時,系統都會指派新的 etag 值。

    如要變更洞察資訊的狀態,您必須提供現有洞察資訊的 etag。使用 etag 有助於確保只有在洞察資料自上次擷取後未變更時,才會執行任何作業。

  • insightSubtype:洞察子類型。
  • lastRefreshTime:洞察資料上次更新的日期,代表用於產生洞察資料的資料新鮮度。
  • name:洞察名稱,格式如下:

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

    預留位置的值如下:

    • PROJECT_ID:產生洞察資料的專案 ID。
    • INSIGHT_ID:洞察資料的專屬 ID。
  • observationPeriod:洞察資料的時間範圍。用來產生洞察的來源資料結束於 lastRefreshTime,並從 lastRefreshTime 減去 observationPeriod 開始。
  • stateInfo:洞察資料提出後,會經歷多個狀態轉換:

    • ACTIVE:洞察已產生,但沒有採取任何行動,或是採取行動時未更新洞察狀態。當基礎資料變更時,系統會更新有效的洞察資料。
    • ACCEPTED:已根據洞察資料採取某些行動。當相關建議標示為 CLAIMEDSUCCEEDEDFAILED,或是直接接受洞察時,系統就會接受洞察。洞察處於 ACCEPTED 狀態時,就無法變更洞察內容。已接受的洞察資料會在接受後保留 90 天。
  • targetResources:洞察資料所屬專案的完整資源名稱 。例如 //cloudresourcemanager.googleapis.com/projects/123456789012

將服務帳戶洞察標示為 ACCEPTED

如果您根據有效洞察資料採取行動,可以將該洞察資料標示為 ACCEPTEDACCEPTED 狀態會向 Recommender API 指出您已根據這項洞察資料採取行動,有助於改善建議內容。

系統會在標示為 ACCEPTED 後,將已接受的洞察資料保留 90 天。

gcloud

使用 gcloud recommender insights mark-accepted 指令搭配洞察 ID,將洞察標示為 ACCEPTED

  • INSIGHT_ID:您要查看的洞察資料 ID。如要找出 ID,請列出專案的洞察資料
  • PROJECT_ID:您要管理洞察資料的專案 ID。
  • ETAG:洞察資料版本的 ID。如要取得 etag,請執行下列操作:

    1. 使用 gcloud recommender insights describe 指令取得洞察資料
    2. 在輸出內容中找出並複製 etag 值,包括括號。例如 "d3cdec23cc712bd0"
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

輸出內容會顯示洞察資料,現在的狀態為 ACCEPTED

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

如要進一步瞭解洞察資訊的狀態資訊,請參閱本頁的「查看服務帳戶洞察資訊」。

REST

Recommender API 的 insights.markAccepted 方法會將洞察標示為 ACCEPTED

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您要管理洞察資料的專案 ID。
  • INSIGHT_ID:您要查看的洞察資料 ID。如果不知道洞察 ID,您可以在專案中列出洞察資料來查看。洞察 ID 是洞察 name 欄位中 insights/ 後面的所有內容。
  • ETAG:洞察資料版本的 ID。如要取得 etag,請執行下列操作:
    1. 使用 insights.get 方法取得洞察資料
    2. 在回應中找出並複製 etag 值。

HTTP 方法和網址:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

JSON 要求主體:

{
  "etag": "ETAG"
}

如要傳送要求,請展開以下其中一個選項:

回應包含洞察資料,現在的狀態為 ACCEPTED

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\"",
  "severity": "LOW"
}

如要進一步瞭解洞察資訊的狀態資訊,請參閱本頁的「查看服務帳戶洞察資訊」。

後續步驟

  • 查看其他可用的工具,瞭解服務帳戶的使用情形。
  • 您可以使用建議中心查看及管理專案的所有建議,包括 IAM 建議。