排解憑證問題

本文件提供資訊,協助您排解 Compute Engine VM 執行個體的 Ops Agent 授權和憑證問題。

如果 Ops Agent 回報存取權或授權錯誤,或者代理程式似乎正常執行,但卻沒有任何資料,或快訊政策未如預期運作,請檢查 VM 執行個體的憑證是否正確,包括憑證所指定的專案是否正確:

  • 如果您使用具有標準 (而非私密金鑰) 憑證的 Compute Engine VM 執行個體,即表示資料不可能進入錯誤專案,但您的憑證仍可能不足。如要瞭解憑證,請參閱「授權作業套件代理程式」。如要驗證憑證,請參閱「驗證 Compute Engine 憑證」。

  • 如果您在 Compute Engine 執行個體中使用私密金鑰憑證,則憑證可能會無效,或憑證可能來自錯誤專案。如要瞭解憑證,請參閱「授權作業套件代理程式」。如要驗證您的憑證,請參閱「驗證私密金鑰憑證」。

驗證 Compute Engine 憑證

使用 Google Cloud 主控台的 Compute Engine「VM instances」頁面,驗證 Compute Engine VM 執行個體是否擁有 Ops Agent 的充分憑證。憑證通常會新增至所有新 Compute Engine VM 執行個體的預設服務帳戶,但在建立執行個體時,您可以覆寫這些預設值。

前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

前往「VM instances」(VM 執行個體) 頁面

如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果

  1. 如有必要,請將目前的 Google Cloud 專案變更為與 Compute Engine VM 執行個體相關聯的專案。例如,如果系統提示您「啟用計費功能」,則表示目前專案中沒有任何 Compute Engine VM 執行個體。
  2. 在「VM Instances」(VM 執行個體) 頁面中,按一下 VM 執行個體的名稱。畫面會隨即顯示 VM 執行個體的詳細資料頁面。
  3. 在「VM instance details」(VM 執行個體詳細資料)頁面的「Cloud API access scopes」(Cloud API 存取權範圍) 標題下查看以下項目:
    • 如果您看到「Allow full access to all Cloud APIs」(允許所有 Cloud API 的完整存取權),表示您擁有充分憑證。
    • 如果您在「Stackdriver Monitoring API」(Cloud Monitoring API 的舊稱) 旁邊看到「Write Only」(唯寫)或「Full」(完整) 權限,表示您擁有充分憑證。
    • 否則,就表示執行個體的預設服務帳戶沒有代理程式所需的憑證。如要在執行個體中使用代理程式,您必須新增私密金鑰服務帳戶憑證。如需操作說明,請參閱新增憑證

如果您具備正確的預設憑證,請直接略過並前往在 Linux 和 Windows 上安裝

驗證私密金鑰憑證

如要驗證是否已在您的 VM 執行個體上安裝有效的私密金鑰憑證,請先驗證憑證檔案是否存在於其預期位置,然後驗證憑證檔案中的資訊是否有效。之前有效的憑證可使用 Google Cloud 控制台的「IAM & Admin」(IAM 與管理) >「Service accounts」(服務帳戶) 部分撤銷。如果沒有有效的憑證,請參閱「新增憑證」一文,取代現有的憑證或新增憑證。

是否存在憑證?

如要查看私密金鑰服務帳戶憑證是否位於您的執行個體上,請在您的執行個體上執行下列 Linux 指令:

sudo cat $GOOGLE_APPLICATION_CREDENTIALS
sudo cat /etc/google/auth/application_default_credentials.json

如果任何指令顯示如下所示的檔案,表示您的執行個體可能擁有有效的私密金鑰憑證。如果兩個指令都顯示一個檔案,則系統會使用由 GOOGLE_APPLICATION_CREDENTIALS 表示的檔案。

{
  "type": "service_account",
  "project_id": "{your-project-id}",
  "private_key_id": "{your-private-key-id}",
  "private_key": "{your-private-key}",
  "client_email": "{your-project-number}-{your-key}@developer.gserviceaccount.com",
  "client_id": "{your-client-id}",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "{x509-cert-url}",
  "client_x509_cert_url": "{client-x509-cert-url}"
}

如果不存在任何憑證檔案,請參閱新增憑證一文。

憑證是否有效?

在憑證檔案中,project_id 欄位是您的 Google Cloud 專案,client_email 會標示專案中的服務帳戶,而 private_key_id 會標示服務帳戶中的私密金鑰。請將這個資訊與Google Cloud 控制台的「IAM & Admin」(IAM 與管理) >「Service accounts」(服務帳戶) 部分顯示的內容進行比對。

如果符合以下任一條件,憑證檔案就會無效:

  • 您正在查看 Compute Engine VM 執行個體,但憑證檔案中的Google Cloud 專案並非包含您執行個體的專案。
  • 所列服務帳戶不存在。可能已遭刪除。
  • 所列服務帳戶未啟用正確角色,應至少擁有 roles/monitoring.metricWriter (監控指標寫入者) 用於指標收集,以及 roles/logging.logWriter (記錄寫入者) 用於寫入記錄。
  • 私密金鑰不存在。可能已遭到撤銷。

如果服務帳戶正確,但私密金鑰已撤銷,則您可以建立新的私密金鑰,並將其複製到執行個體。否則,您必須如下面的新增憑證一節所述,建立新的服務帳戶。

產生新憑證

如果憑證無效,請採取下列步驟:

  1. 針對包含需要私密金鑰授權之執行個體的每個已連接專案 (在沒有存取範圍 https://www.googleapis.com/auth/monitoring.write 的情況下建立的 Compute Engine 執行個體),建立服務帳戶並產生私密金鑰 (如果尚不存在)。請按照下列步驟操作:
    1. 在 Google Cloud 控制台中,前往 「Settings」頁面:

      前往「設定」

      如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

    2. 選取「指標範圍」分頁標籤。
    3. 找出包含有問題的 Compute Engine 資源的專案,然後前往 Google Cloud 主控台
    4. 前往 Google Cloud 主控台的「IAM 服務帳戶」頁面,選取 Google Cloud 專案、建立新的服務帳戶,然後為該服務帳戶產生新的私密金鑰。

      如要執行這些步驟,請執行下列任一步驟:

      • 前往「IAM 服務帳戶」頁面,選取您的 Google Cloud 專案,然後按照「 建立服務帳戶」中的步驟操作:

        前往「IAM 服務帳戶」

      • 按一下下列按鈕,然後選取您的 Google Cloud 專案:

        建立服務帳戶並下載金鑰

        先前的按鈕會自動為特定代理人的服務帳戶建立金鑰,並將金鑰下載至本機系統。如有需要,這個程序也會建立必要的服務帳戶,並確保服務帳戶具備正確的權限。代理專屬服務帳戶的名稱類似 stackdriver-1234@PROJECT_ID.iam.gserviceaccount.com。系統會透過類似下方的對話方塊通知您這些動作已完成:

        橫幅通知使用者已建立服務帳戶和金鑰。

  2. 替換執行個體中與有問題的服務帳戶對應的私密金鑰。

    • 在 Linux 中,替換位於 /etc/google/auth/application_default_credentials.json 中的私密金鑰。
    • 在 Windows 中,替換位於 C:\ProgramData\Google\Auth\application_default_credentials.json 中的私密金鑰。詳情請參閱「 將私密金鑰複製到您的執行個體」。
  3. 重新啟動代理程式

    • 在 Linux 上執行 sudo service stackdriver-agent restart
    • 在 Windows 中,進入服務管理主控台,然後重新啟動 Cloud Monitoring 服務。

如果您有多個專案需要新的私密金鑰,請針對每個專案重複這個程序。

如要驗證私密金鑰是否正確,請參閱「憑證是否存在?」。具體情況如下:

  • 讀取執行個體中的私密金鑰 JSON 檔案,例如 (在 Linux 中): sudo cat /etc/google/auth/application_default_credentials.json
  • 確保 project_id 欄位的值與您剛才為其產生憑證的受控專案的值相符。