本指南說明如何確保在虛擬機器 (VM) 執行個體上安裝的 Ops Agent 已獲授權,可將遙測資料傳送至 Google Cloud Observability。
授權總覽
「授權」是指判斷經過驗證的用戶端對一組資源具備哪些權限的程序。 Google Cloud 會使用應用程式預設憑證 (ADC) 授權 Compute Engine VM 執行個體上的 Ops Agent。
作業代理程式支援 ADC,可驗證 VM 的已附加服務帳戶或服務帳戶金鑰。
- 「附加的服務帳戶」是指特定於特定資源 (例如 VM) 的服務帳戶。服務帳戶有其專屬的憑證。ADC 會使用 VM 的中繼資料伺服器取得服務的憑證。
- 服務帳戶金鑰是指用於授權專案中服務帳戶金鑰組的私密金鑰,可讓您建立存取權存取權杖。您可以使用憑證提供身分,以便代表服務帳戶與 Google Cloud API 互動。
- 作業套件代理程式不支援使用
gcloud auth
進行授權。為避免產生非預期行為,您必須撤銷使用gcloud auth
建立的任何憑證。
建議您盡可能使用已連結的服務帳戶設定 ADC 進行驗證,因為私密金鑰需要本地儲存空間,而該儲存空間可能會遭到入侵。如要進一步瞭解服務帳戶金鑰,請參閱管理服務帳戶金鑰的最佳做法。
驗證存取權範圍
建立 Compute Engine VM 執行個體時,系統會指派存取範圍。新的 Compute Engine VM 有足夠的存取範圍供 Ops Agent 使用,但舊 VM 或已修改範圍的 VM 可能不具備這些存取範圍。如要進一步瞭解存取範圍和服務帳戶,請參閱 Compute Engine 說明文件中的「授權」一節。
如要驗證存取權範圍,請按照下列步驟操作:
- 在 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 執行個體」,然後選取「Instances」分頁標籤,並選取 VM 名稱。
- 按一下 stop「停止」,關閉 VM。
- 虛擬機器人停止運作後,請按一下 edit「編輯」。
- 在頁面「Identity and API access」(身分和 API 存取權) 區段中找出「Access scopes」,然後選取「Set access for each API」。
- 針對 Stackdriver Logging API 和 Stackdriver Monitoring API 項目,請選取「Write Only」(唯寫)。
- 按一下「儲存」,然後按一下 play_arrow「Start/Resume」,重新啟動 VM。
使用服務帳戶
「驗證」是指判斷用戶端身分的程序,以驗證作業來說,我們會建議您使用「服務帳戶」:一種特殊的帳戶,通常是由應用程式或工作負載 (而非使用者) 所使用。詳情請參閱服務帳戶總覽。
無論您是在何處執行程式碼 (Compute Engine、App Engine 或內部部署系統),都可以使用服務帳戶進行驗證。詳情請參閱「Google 的驗證」。
本節說明如何建立新的服務帳戶並授予必要的角色,以及如何更新現有的服務帳戶 (如果沒有必要的角色)。
建立服務帳戶
如要建立服務帳戶,請按照建立服務帳戶程序,並提供下列資訊:
選取要建立服務帳戶的 Google Cloud 專案。
針對 Compute Engine 執行個體,請選擇您已在其中建立執行個體的專案。
在「Role」下拉式選單中,選取下列角色:
「Monitoring」 >「Monitoring 指標寫入者」。
[Logging] (記錄) > [Logs Writer] (記錄寫入者)。
如果您打算使用服務帳戶金鑰進行驗證,請選取「JSON」做為「金鑰類型」,然後按一下「建立」。
按一下「Create」後,系統就會將含有服務帳戶金鑰的檔案下載到本機系統。詳情請參閱「建立及刪除服務帳戶金鑰」。
接著,請根據您是使用已附加的服務帳戶還是服務帳戶私密金鑰進行授權,設定服務帳戶和相關設定。
驗證及修改現有服務帳戶的角色
您可以使用 Google Cloud 主控台判斷現有服務帳戶具有哪些角色,並新增缺少的必要角色:
-
前往 Google Cloud 控制台的「IAM」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM 與管理」的結果。
如有必要,請按一下 Google Cloud 專案的下拉式清單,然後選取專案名稱。
如果您沒有看到 IAM 授權對象 (使用者和服務帳戶) 清單,請選取「權限」分頁。
在「View by Principals」清單中,找出服務帳戶的項目。「角色」欄會列出授予服務帳戶的角色。
如果服務帳戶沒有 Ops Agent 所需的角色,請按照建立服務帳戶一文所述的步驟,新增相關角色:
- 在服務帳戶的項目中,按一下 edit「編輯」。
- 按一下「Add Another Role」,新增缺少的角色。
- 按一下 [儲存]。
使用已附加的服務帳戶授權
如要在已連結服務帳戶的 Compute Engine VM 執行個體上安裝 Ops Agent,請執行下列操作:
請確認您已驗證 VM 的存取範圍。
將服務帳戶連結至代理程式執行的 VM。
如果您尚未安裝代理程式,請先安裝。如要瞭解如何安裝代理程式,請參閱「安裝代理程式」。
使用服務帳戶金鑰授權
如要使用服務帳戶私密金鑰授權在 VM 執行個體上安裝的 Ops Agent,請執行下列操作:
將服務帳戶金鑰���案從本機系統轉移至 VM 執行個體:
建立環境變數,指向本機系統中的服務帳戶金鑰檔案。以下範例會建立名為
CREDS
的變數:CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
請完成下表中的步驟:
Compute Engine
-
前往 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 執行個體上,將服務帳戶金鑰檔案從暫時位置移至永久位置,如果是 Linux,請確保服務帳戶金鑰檔案只能由
root
讀取。您也必須將環境變數
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"
-
您的 VM 執行個體現在已具有代理程式所需的服務帳戶金鑰檔案。接下來,請安裝或重新啟動代理程式:
設定 GOOGLE_APPLICATION_CREDENTIALS
本節說明如何設定環境變數 GOOGLE_APPLICATION_CREDENTIALS
,讓代理程式程序能夠檢視該變數。
Linux
編輯下列設定檔,或建立檔案 (如果檔案不存在):
/etc/systemd/system.conf
在設定檔中新增下列內容:
DefaultEnvironment="GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE"
重新載入環境變數:
sudo systemctl daemon-reload
在 VM 執行個體上執行下列指令,重新啟動代理程式:
sudo systemctl restart google-cloud-ops-agent
Windows
在 PowerShell 中,以系統管理員身分執行下列指令,設定 Ops Agent 可用的
GOOGLE_APPLICATION_CREDENTIALS
系統環境變數:[Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
在 VM 執行個體上執行下列指令,重新啟動代理程式:
Restart-Service -Name google-cloud-ops-agent -Force