本指南說明如何確保您在虛擬機器 (VM) 執行個體上安裝的 Monitoring 代理程式,已獲得授權可將遙測資料傳送至 Google Cloud Observability。
授權總覽
「授權」是指判斷經過驗證的用戶端對一組資源具備哪些權限的程序。 Google Cloud 會使用應用程式預設憑證 (ADC),授權 Compute Engine VM 執行個體上的 Monitoring 代理程式。
Monitoring 代理程式支援 ADC,可驗證 VM 附加的服務帳戶或服務帳戶金鑰。
- 附加的服務帳戶是指特定資源 (例如 VM) 專用的服務帳戶。服務帳戶有專屬的憑證。ADC 會使用 VM 的中繼資料伺服器,取得服務的憑證。
- 服務帳戶金鑰是指用於授權專案中服務帳戶金鑰組的私密金鑰,可讓您建立存取權杖。您可以使用權杖提供身分,代表服務帳戶與 Google Cloud API 互動。
建議您盡可能設定 ADC,透過附加的服務帳戶進行驗證,因為私密金鑰需要本機儲存空間,而該儲存空間可能會遭到入侵。如要進一步瞭解服務帳戶金鑰,請參閱「管理服務帳戶金鑰的最佳做法」一文。
事前準備
如果符合下列任一情況,請參閱本指南:
如果您執行的 Compute Engine 執行個體非常舊,或是修改了 Compute Engine 執行個體的存取範圍或服務帳戶設定,就必須先完成本指南中的步驟,才能安裝代理程式。這些 VM 可能沒有必要的服務帳戶金鑰檔案。如要瞭解如何驗證執行個體的存取範圍和服務帳戶設定,請參閱「驗證 Compute Engine 憑證」。
在新建的 Compute Engine VM 執行個體上,存取權範圍和服務帳戶設定足以執行代理程式。
如要驗證存取權範圍,請按照下列步驟操作:
- 在 Compute Engine 執行個體上執行下列指令,查詢存取範圍:
curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
在指令輸出內容中,如果列出存取範圍
https://www.googleapis.com/auth/cloud-platform
,表示您已獲得足夠的授權。如果沒有列出
https://www.googleapis.com/auth/cloud-platform
,則您需要兩個存取範圍,分別來自下列「記錄」和「監控」配對:https://www.googleapis.com/auth/logging.write
或
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/monitoring.write
或
https://www.googleapis.com/auth/monitoring.admin
如要修改存取範圍,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。
- 如有必要,請按一下專案的下拉式清單 Google Cloud ,然後選取專案名稱。
- 從導覽選單中選取「VM 執行個體」,然後選取「執行個體」分頁標籤,並選取 VM 名稱。
- 按一下「停止」stop,關閉 VM。
- VM 停止後,按一下「編輯」edit。
- 在頁面的「Identity and API access」(身分及 API 存取權) 區段中,找到「Access scopes」(存取權範圍),然後選取「Set access for each API」(針對各個 API 設定存取權)。
- 針對 Stackdriver Logging API 和 Stackdriver Monitoring API 項目,選取「Write Only」(唯寫)。
- 按一下「儲存」,然後按一下「啟動/繼續」play_arrow,重新啟動 VM。
使用服務帳戶
「驗證」是指判斷用戶端身分的程序,以驗證作業來說,我們會建議您使用「服務帳戶」,這是一種特殊的帳戶,通常是由應用程式或工作負載 (而非使用者) 所使用。詳情請參閱服務帳戶總覽。
無論您是在何處執行程式碼 (Compute Engine、App Engine 或內部部署系統),都可以使用服務帳戶進行驗證。詳情請參閱「Google 的驗證方式」。
本節說明如何建立新的服務帳戶並授予必要角色,以及如何更新現有服務帳戶 (如果該帳戶沒有必要角色)。
建立服務帳戶
如要建立服務帳戶,請按照「建立服務帳戶」 程序,提供下列資訊:
選取要建立服務帳戶的 Google Cloud 專案。
- 針對 Compute Engine 執行個體,選擇您已在其中建立執行個體的專案。
在「Role」(角色) 下拉式選單中,選取下列角色:
- 「Monitoring」>「Monitoring Metric Writer」。這樣會授權 Monitoring 代理程式。
如果您也會安裝 Logging 代理程式,請為該代理程式新增下列角色:
- 「記錄」>「記錄寫入者」。這樣會授權 Logging 代理程式。
如要使用服務帳戶金鑰進行驗證,請選取「JSON」做為金鑰類型,然後按一下「建立」。
按一下「建立」後,系統會將含有服務帳戶金鑰的檔案下載至本機系統。詳情請參閱「建立及刪除服務帳戶金鑰」。
接著,請根據您是使用附加服務帳戶授權,還是使用服務帳戶私密金鑰授權,設定服務帳戶和設定。
驗證及修改現有服務帳戶的角色
您可以使用 Google Cloud 主控台,判斷現有服務帳戶擁有哪些角色,並新增任何缺少的必要角色:
-
前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM & Admin」(IAM 與管理) 的結果。
如有必要,請按一下專案的下拉式清單 Google Cloud ,然後選取專案名稱。
如果沒有看到 IAM 主體 (使用者和服務帳戶) 清單,請選取「權限」分頁標籤。
在「依主體檢視」清單中,找出服務帳戶的項目。「角色」欄會列出授予服務帳戶的角色。
如果服務帳戶沒有 Monitoring 代理程式的必要角色,請按照「建立服務帳戶」一文所述的步驟新增角色:
- 在服務帳戶的項目中,按一下「編輯」edit。
- 按一下「新增其他角色」,新增任何遺漏的角色。
- 按一下 [儲存]。
使用附加的服務帳戶授權
如要授權安裝在已附加服務帳戶的 Compute Engine VM 執行個體上的 Monitoring 代理程式,請執行下列操作:
請確認您已驗證 VM 的存取範圍。
如果您尚未安裝代理程式,請先完成這項程序。如要瞭解如何安裝代理程式,請參閱「安裝代理程式」。
使用服務帳戶金鑰授權
如要使用服務帳戶私密金鑰授權 VM 執行個體上安裝的 Monitoring 代理程式,請執行下列操作:
將服務帳戶金鑰檔案從本機系統轉移至 VM 執行個體:
建立環境變數,指向本機系統上的服務帳戶金鑰檔案。以下範例會建立名為
CREDS
的變數:CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
-
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果。
找出 VM 的 INSTANCE_NAME 和 INSTANCE_ZONE。
在本機系統上執行 Google Cloud CLI 指令,將金鑰檔案從本機系統複製到 VM 執行個體:
REMOTE_USER="$USER" INSTANCE="INSTANCE_NAME" ZONE="INSTANCE_ZONE" gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
在 Compute Engine 執行個體上,將服務帳戶金鑰檔案從暫時位置移至永久位置,並確保只有
root
可以讀取服務帳戶金鑰檔案 (適用於 Linux)。代理程式預期金鑰檔案會位於下列位置:
- Linux VM:
/etc/google/auth/application_default_credentials.json
- Linux VM:
您儲存在環境變數
GOOGLE_APPLICATION_CREDENTIALS
中的任何位置,代理程式程序必須可以取得這個變數。如需設定資訊,請參閱「設定GOOGLE_APPLICATION_CREDENTIALS
」。
舉例來說,在 Linux 中,您可以執行下列指令碼,將服務帳戶金鑰檔案移至預設位置,然後設定適當的權限:
CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json" sudo mkdir -p /etc/google/auth sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION" sudo chown root:root "$CREDENTIALS_FILE_LOCATION" sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
- Linux VM:
您的 VM 執行個體現在已經具有代理程式需要的服務帳戶金鑰檔案了。 接著,請安裝或重新啟動代理程式:
設定 GOOGLE_APPLICATION_CREDENTIALS
本節說明如何設定環境變數 GOOGLE_APPLICATION_CREDENTIALS
,讓代理程式程序可以取得這個變數。
Linux
編輯下列設定檔,或建立檔案 (如果檔案不存在):
/etc/default/stackdriver-agent
在設定檔中新增下列內容:
GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
在 VM 執行個體上執行下列指令,重新啟動代理程式:
sudo service stackdriver-agent restart
Windows
在 PowerShell 中,以管理員身分執行下列指令,為 Ops Agent 設定
GOOGLE_APPLICATION_CREDENTIALS
系統環境變數:[Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
在 VM 執行個體上執行下列指令,重新啟動代理程式:
Restart-Service -Name StackdriverMonitoring