本指南說明如何確保在虛擬機器 (VM) 執行個體上安裝的 Monitoring 代理程式,有權將遙測資料傳送至 Google Cloud Observability。
授權總覽
「授權」是指判斷經過驗證的用戶端對一組資源具備哪些權限的程序。 Google Cloud 會使用應用程式預設憑證 (ADC) 授權 Compute Engine VM 執行個體上的 Monitoring 代理程式。
監控代理程式支援 ADC,可驗證 VM 的附加服務帳戶或服務帳戶金鑰。
- 「附加的服務帳戶」是指特定於特定資源 (例如 VM) 的服務帳戶。服務帳戶有其專屬的憑證。ADC 會使用 VM 的中繼資料伺服器取得服務的憑證。
- 服務帳戶金鑰是指用於授權專案中服務帳戶金鑰組的私密金鑰,可讓您建立存取權存取權杖。您可以使用憑證提供身分,以便代表服務帳戶與 Google Cloud API 互動。
建議您盡可能使用已連結的服務帳戶設定 ADC 進行驗證,因為私密金鑰需要本地儲存空間,而該儲存空間可能會遭到入侵。如要進一步瞭解服務帳戶金鑰,請參閱管理服務帳戶金鑰的最佳做法。
對於 AWS EC2 VM 執行個體,Monitoring 代理程式僅支援使用服務帳戶金鑰方法進行驗證。
事前準備
請閱讀這份指南,如果您符合下列任一情況:
如果您執行的 Compute Engine 執行個體非常舊,或是您修改了 Compute Engine 執行個體的存取範圍或服務帳戶設定,則必須先完成本指南中的步驟,才能安裝代理程式。這些 VM 可能沒有必要的服務帳戶金鑰檔案。如要瞭解如何驗證執行個體的存取範圍和服務帳戶設定,請參閱「驗證 Compute Engine 憑證」。
在新建立的 Compute Engine VM 執行個體上,存取權範圍和服務帳戶設定就足以執行代理程式。
如果您執行 Amazon EC2 (AWS VC2) VM 執行個體,請在安裝代理程式前執行下列操作:
找出 AWS 帳戶的 AWS 代管專案,並使用 EC2 執行個體。代管專案是 Google Cloud 專案,其唯一目的是在 AWS 帳戶中儲存 EC2 執行個體的指標和記錄。
如果找不到帳戶的 AWS 代管專案,建議您建立 Google Cloud 專案做為代管專案。如果您有多個 AWS 帳戶中的 EC2 執行個體,請為每個帳戶建立 Google Cloud 專案。我們也建議您為這些專案使用命名慣例,或是使用專案標籤,以便識別代管專案。我們不建議您重複使用現有的Google Cloud 專案,尤其是當中含有任何 Google Cloud 資源時。
完成使用服務帳戶金鑰檔案授權代理人的步驟。
如要驗證存取權範圍,請按照下列步驟操作:
- 在 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 執行個體,請選擇您已在其中建立執行個體的專案。
針對 Amazon EC2 執行個體,請選取 AWS 託管專案。
在「Role」下拉式選單中,選取下列角色:
- [Monitoring] (監控) > [Monitoring Metric Writer] (監控指標寫入者)。這樣會授權 Monitoring 代理程式。
如果您也要安裝記錄代理程式,請為該代理程式新增下列角色:
- [Logging] (記錄) > [Logs Writer] (記錄寫入者)。這樣會授權 Logging 代理程式。
如果您打算使用服務帳戶金鑰進行驗證,請選取「JSON」做為「金鑰類型」,然後按一下「建立」。
按一下「Create」後,系統就會將含有服務帳戶金鑰的檔案下載到本機系統。詳情請參閱「建立及刪除服務帳戶金鑰」。
接著,請根據您是使用已附加的服務帳戶還是服務帳戶私密金鑰進行授權,設定服務帳戶和相關設定。
驗證及修改現有服務帳戶的角色
您可以使用 Google Cloud 主控台判斷現有服務帳戶具有哪些角色,並新增缺少的必要角色:
-
前往 Google Cloud 控制台的「IAM」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM 與管理」的結果。
如有必要,請按一下 Google Cloud 專案的下拉式清單,然後選取專案名稱。
如果您沒有看到 IAM 授權對象 (使用者和服務帳戶) 清單,請選取「權限」分頁。
在「View by Principals」清單中,找出服務帳戶的項目。「角色」欄會列出授予服務帳戶的角色。
如果您的服務帳戶沒有監控代理程式所需的角色,請按照「建立服務帳戶」一文所述的步驟新增角色:
- 在服務帳戶的項目中,按一下 edit「編輯」。
- 按一下「Add Another Role」,新增缺少的角色。
- 按一下 [儲存]。
使用已附加的服務帳戶授權
如要授權在具有已附加服務帳戶的 Compute Engine VM 執行個體上安裝 Monitoring 代理程式,請執行下列操作:
請確認您已驗證 VM 的存取範圍。
將服務帳戶連結至代理程式執行的 VM。
如果您尚未安裝代理程式,請先安裝。如要瞭解如何安裝代理程式,請參閱「安裝代理程式」。
使用服務帳戶金鑰授權
如要使用服務帳戶私密金鑰授權在 VM 執行個體上安裝的 Monitoring 代理程式,請執行下列操作:
將服務帳戶金鑰檔案從本機系統轉移至 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
讀取。代理程式會在以下位置尋找金鑰檔案:
- Linux VM:
/etc/google/auth/application_default_credentials.json
- Linux 虛擬機器:您儲存在環境變數
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:
Amazon EC2
找出 VM 的 YOUR-INSTANCE'S-ID 和 YOUR-INSTANCE'S-AWS-REGION。
在本機系統上使用 scp,將服務帳戶金鑰檔案從本機系統複製到 VM 執行個體:
KEY="YOUR-SSH-KEY-PAIR-FILE" INSTANCE="ec2-YOUR-INSTANCE'S-ID.YOUR-INSTANCE'S-AWS-REGION.compute.amazonaws.com" # The remote user depends on the installed OS: ec2-user, ubuntu, root, etc. REMOTE_USER="EC2-USER" scp -i "$KEY" "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json"
INSTANCE
環境變數的值假設您的 EC2 執行個體不在us-east-1
區域中。如要瞭解如何在執行個體位於us-east-1
區域時定義INSTANCE
變數,請參閱 Amazon 定義的命名慣例。在 EC2 執行個體上,將服務帳戶金鑰檔案從暫時位置移至下列其中一個位置,如果是 Linux,請確保服務帳戶金鑰檔案只能由
root
讀取。代理程式會在以下位置尋找金鑰檔案:
Linux VM:
/etc/google/auth/application_default_credentials.json
Windows 虛擬機:
C:\ProgramData\Google\Auth\application_default_credentials.json
Linux 和 Windows 虛擬機:您儲存在環境變數
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/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