授權作業套件代理程式

本指南說明如何確保在虛擬機器 (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 說明文件中的「授權」一節。

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

  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 執行個體,請選擇您已在其中建立執行個體的專案。

  • 在「Role」下拉式選單中,選取下列角色:

    • 「Monitoring」 >「Monitoring 指標寫入者」

    • [Logging] (記錄) > [Logs Writer] (記錄寫入者)

  • 如果您打算使用服務帳戶金鑰進行驗證,請選取「JSON」做為「金鑰類型」,然後按一下「建立」。

    按一下「Create」後,系統就會將含有服務帳戶金鑰的檔案下載到本機系統。詳情請參閱「建立及刪除服務帳戶金鑰」。

接著,請根據您是使用已附加的服務帳戶還是服務帳戶私密金鑰進行授權,設定服務帳戶和相關設定。

驗證及修改現有服務帳戶的角色

您可以使用 Google Cloud 主控台判斷現有服務帳戶具有哪些角色,並新增缺少的必要角色:

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

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

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

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

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

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

  5. 如果服務帳戶沒有 Ops Agent 所需的角色,請按照建立服務帳戶一文所述的步驟,新增相關角色:

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

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

如要在已連結服務帳戶的 Compute Engine VM 執行個體上安裝 Ops Agent,請執行下列操作:

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

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

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

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

使用服務帳戶金鑰授權

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

  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 讀取。

        您也必須將環境變數 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/systemd/system.conf
    
  2. 在設定檔中新增下列內容:

    DefaultEnvironment="GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE"
    
  3. 重新載入環境變數:

    sudo systemctl daemon-reload
    
  4. 在 VM 執行個體上執行下列指令,重新啟動代理程式:

    sudo systemctl restart google-cloud-ops-agent
    

Windows

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

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

    Restart-Service -Name google-cloud-ops-agent -Force