授權監控代理程式

本指南說明如何確保在虛擬機器 (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 執行個體,請在安裝代理程式前執行下列操作:

    1. 找出 AWS 帳戶的 AWS 代管專案,並使用 EC2 執行個體。代管專案是 Google Cloud 專案,其唯一目的是在 AWS 帳戶中儲存 EC2 執行個體的指標和記錄。

      如果找不到帳戶的 AWS 代管專案,建議您建立 Google Cloud 專案做為代管專案。如果您有多個 AWS 帳戶中的 EC2 執行個體,請為每個帳戶建立 Google Cloud 專案。我們也建議您為這些專案使用命名慣例,或是使用專案標籤,以便識別代管專案。我們不建議您重複使用現有的Google Cloud 專案,尤其是當中含有任何 Google Cloud 資源時。

    2. 完成使用服務帳戶金鑰檔案授權代理人的步驟。

如要驗證存取權範圍,請按照下列步驟操作:

  1. 在 Compute Engine 執行個體上執行下列指令,查詢存取範圍:
    curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
  2. 如果指令輸出內容中列出存取範圍 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

如要修改存取權範圍,請按照下列步驟操作:

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

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

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

  2. 如有必要,請按一下 Google Cloud 專案的下拉式清單,然後選取專案名稱。
  3. 從導覽選單中選取「VM 執行個體」,然後選取「Instances」分頁標籤,並選取 VM 名稱。
  4. 按一下 「停止」,關閉 VM。
  5. 虛擬機器人停止運作後,請按一下 「編輯」
  6. 在頁面「Identity and API access」(身分和 API 存取權) 區段中找出「Access scopes」,然後選取「Set access for each API」
  7. 針對 Stackdriver Logging APIStackdriver Monitoring API 項目,請選取「Write Only」(唯寫)
  8. 按一下「儲存」,然後按一下 「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 主控台判斷現有服務帳戶具有哪些角色,並新增缺少的必要角色:

  1. 前往 Google Cloud 控制台的「IAM」頁面:

    前往「身分與存取權管理」頁面

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

  2. 如有必要,請按一下 Google Cloud 專案的下拉式清單,然後選取專案名稱。

  3. 如果您沒有看到 IAM 授權對象 (使用者和服務帳戶) 清單,請選取「權限」分頁。

  4. 在「View by Principals」清單中,找出服務帳戶的項目。「角色」欄會列出授予服務帳戶的角色。

  5. 如果您的服務帳戶沒有監控代理程式所需的角色,請按照「建立服務帳戶」一文所述的步驟新增角色:

    1. 在服務帳戶的項目中,按一下 「編輯」
    2. 按一下「Add Another Role」,新增缺少的角色。
    3. 按一下 [儲存]

使用已附加的服務帳戶授權

如要授權在具有已附加服務帳戶的 Compute Engine VM 執行個體上安裝 Monitoring 代理程式,請執行下列操作:

  1. 請確認您已驗證 VM 的存取範圍

  2. 請將最少權限的 IAM 角色授予服務帳戶。如需瞭解必要角色,請參閱本頁的「建立服務帳戶」一節。

  3. 將服務帳戶連結至代理程式執行的 VM。

  4. 如果您尚未安裝代理程式,請先安裝。如要瞭解如何安裝代理程式,請參閱「安裝代理程式」。

使用服務帳戶金鑰授權

如要使用服務帳戶私密金鑰授權在 VM 執行個體上安裝的 Monitoring 代理程式,請執行下列操作:

  1. 將服務帳戶金鑰檔案從本機系統轉移至 VM 執行個體:

    1. 建立環境變數,指向本機系統中的服務帳戶金鑰檔案。以下範例會建立名為 CREDS 的變數:

      CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
      
    2. 請完成下表中的步驟:

      Compute Engine

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

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

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

        找出 VM 的 INSTANCE_NAMEINSTANCE_ZONE

      2. 在本機系統上執行 Google Cloud CLI 指令,將金鑰檔案從本機系統複製到 VM 執行個體:

        REMOTE_USER="$USER"
        INSTANCE="INSTANCE_NAME"
        ZONE="INSTANCE_ZONE"
        gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
        
      3. 在 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"
        

      Amazon EC2

      1. 找出 VM 的 YOUR-INSTANCE'S-IDYOUR-INSTANCE'S-AWS-REGION

      2. 在本機系統上使用 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 定義的命名慣例

      3. 在 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"
        

  2. 您的 VM 執行個體現在已具有代理程式所需的服務帳戶金鑰檔案。接下來,請安裝或重新啟動代理程式:

設定 GOOGLE_APPLICATION_CREDENTIALS

本節說明如何設定環境變數 GOOGLE_APPLICATION_CREDENTIALS,讓代理程式程序能夠檢視該變數。

Linux

  1. 編輯下列設定檔,或建立檔案 (如果檔案不存在):

    /etc/default/stackdriver-agent
    
  2. 在設定檔中新增下列內容:

    GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
    
  3. 在 VM 執行個體上執行下列指令,重新啟動代理程式:

    sudo service stackdriver-agent restart
    

Windows

  1. 在 PowerShell 中,以系統管理員身分執行下列指令,設定 Ops Agent 可用的 GOOGLE_APPLICATION_CREDENTIALS 系統環境變數:

    [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
    
  2. 在 VM 執行個體上執行下列指令,重新啟動代理程式:

    Restart-Service -Name StackdriverMonitoring