本文件提供資訊,協助您排解 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 執行個體) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。
- 如有必要,請將目前的 Google Cloud 專案變更為與 Compute Engine VM 執行個體相關聯的專案。例如,如果系統提示您「啟用計費功能」,則表示目前專案中沒有任何 Compute Engine VM 執行個體。
- 在「VM Instances」(VM 執行個體) 頁面中,按一下 VM 執行個體的名稱。畫面會隨即顯示 VM 執行個體的詳細資料頁面。
- 在「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
(記錄寫入者) 用於寫入記錄。 - 私密金鑰不存在。可能已遭到撤銷。
如果服務帳戶正確,但私密金鑰已撤銷,則您可以建立新的私密金鑰,並將其複製到執行個體。否則,您必須如下面的新增憑證一節所述,建立新的服務帳戶。
產生新憑證
如果憑證無效,請採取下列步驟:
- 針對包含需要私密金鑰授權之執行個體的每個已連接專案 (在沒有存取範圍
https://www.googleapis.com/auth/monitoring.write
的情況下建立的 Compute Engine 執行個體),建立服務帳戶並產生私密金鑰 (如果尚不存在)。請按照下列步驟操作:-
在 Google Cloud 控制台中,前往 settings「Settings」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。
- 選取「指標範圍」分頁標籤。
- 找出包含有問題的 Compute Engine 資源的專案,然後前往 Google Cloud 主控台。
- 前往 Google Cloud 主控台的「IAM 服務帳戶」頁面,選取 Google Cloud 專案、建立新的服務帳戶,然後為該服務帳戶產生新的私密金鑰。
如要執行這些步驟,請執行下列任一步驟:
前往「IAM 服務帳戶」頁面,選取您的 Google Cloud 專案,然後按照「 建立服務帳戶」中的步驟操作:
按一下下列按鈕,然後選取您的 Google Cloud 專案:
先前的按鈕會自動為特定代理人的服務帳戶建立金鑰,並將金鑰下載至本機系統。如有需要,這個程序也會建立必要的服務帳戶,並確保服務帳戶具備正確的權限。代理專屬服務帳戶的名稱類似
stackdriver-1234@PROJECT_ID.iam.gserviceaccount.com
。系統會透過類似下方的對話方塊通知您這些動作已完成:
-
替換執行個體中與有問題的服務帳戶對應的私密金鑰。
- 在 Linux 中,替換位於
/etc/google/auth/application_default_credentials.json
中的私密金鑰。 - 在 Windows 中,替換位於
C:\ProgramData\Google\Auth\application_default_credentials.json
中的私密金鑰。詳情請參閱「 將私密金鑰複製到您的執行個體」。
- 在 Linux 中,替換位於
重新啟動代理程式
- 在 Linux 上執行
sudo service stackdriver-agent restart
- 在 Windows 中,進入服務管理主控台,然後重新啟動
Cloud Monitoring
服務。
- 在 Linux 上執行
如果您有多個專案需要新的私密金鑰,請針對每個專案重複這個程序。
如要驗證私密金鑰是否正確,請參閱「憑證是否存在?」。具體情況如下:
- 讀取執行個體中的私密金鑰 JSON 檔案,例如 (在 Linux 中):
sudo cat /etc/google/auth/application_default_credentials.json
- 確保
project_id
欄位的值與您剛才為其產生憑證的受控專案的值相符。