授權作業套件代理程式

本指南說明如何確保安裝在虛擬機器 (VM) 執行個體上的 Ops Agent,已獲得授權可將遙測資料傳送至 Logging。

授權總覽

「授權」是指判斷經過驗證的用戶端對一組資源具備哪些權限的程序。 Google Cloud 會使用應用程式預設憑證 (ADC),授權 Compute Engine VM 執行個體上的 Ops Agent。

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 執行個體」,然後選取「執行個體」分頁標籤,並選取 VM 名稱。
  4. 按一下「停止」,關閉 VM。
  5. VM 停止後,按一下「編輯」
  6. 在頁面的「Identity and API access」(身分及 API 存取權) 區段中,找到「Access scopes」(存取權範圍),然後選取「Set access for each API」(針對各個 API 設定存取權)
  7. 針對 Stackdriver Logging APIStackdriver Monitoring API 項目,選取「Write Only」(唯寫)
  8. 按一下「儲存」,然後按一下「啟動/繼續」,重新啟動 VM。

使用服務帳戶

「驗證」是指判斷用戶端身分的程序,以驗證作業來說,我們會建議您使用「服務帳戶」,這是一種特殊的帳戶,通常是由應用程式或工作負載 (而非使用者) 所使用。詳情請參閱服務帳戶總覽

無論您是在何處執行程式碼 (Compute Engine、App Engine 或內部部署系統),都可以使用服務帳戶進行驗證。詳情請參閱「Google 的驗證方式」。

本節說明如何建立新的服務帳戶並授予必要角色,以及如何更新現有服務帳戶 (如果該帳戶沒有必要角色)。

建立服務帳戶

如要建立服務帳戶,請按照「建立服務帳戶」 程序,提供下列資訊:

  • 選取要建立服務帳戶的 Google Cloud 專案。

    • 針對 Compute Engine 執行個體,選擇您已在其中建立執行個體的專案。
  • 在「Role」(角色) 下拉式選單中,選取下列角色:

    • 「監控」>「監控指標寫入者」

    • 「記錄」>「記錄寫入者」

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

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

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

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

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

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面:

    前往 IAM

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

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

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

  4. 在「依主體檢視」清單中,找出服務帳戶的項目。「角色」欄會列出授予服務帳戶的角色。

  5. 如果服務帳戶沒有 Ops Agent 的必要角色,請按照下列步驟新增「建立服務帳戶」一文所述的角色:

    1. 在服務帳戶的項目中,按一下「編輯」
    2. 按一下「新增其他角色」,新增任何遺漏的角色。
    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. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

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

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

      找出 VM 的 INSTANCE_NAMEINSTANCE_ZONE

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

      REMOTE_USER="$USER"
      INSTANCE="INSTANCE_NAME"
      ZONE="INSTANCE_ZONE"
      gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
      
    4. 在 Compute Engine 執行個體上,將服務帳戶金鑰檔案從暫時位置移至永久位置,並確保只有 root 可以讀取服務帳戶金鑰檔案 (適用於 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"
      

  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