向 Pub/Sub 進行驗證

本文說明如何以程式輔助方式向 Pub/Sub 進行驗證。向 Pub/Sub 進行驗證的方法,取決於您用來存取 API 的介面,以及執行程式碼的環境。

注意:Pub/Sub 不支援以 API 金鑰作為驗證方法。

如要進一步瞭解 Google Cloud 驗證,請參閱「驗證方式」。

API 存取權

Pub/Sub 支援程式輔助存取。您可以透過下列方式存取 API:

用戶端程式庫

Pub/Sub 用戶端程式庫提供高階語言支援,可透過程式輔助方式向 Pub/Sub 進行驗證。為驗證向 Google Cloud API 發出的呼叫,用戶端程式庫支援應用程式預設憑證 (ADC)。程式庫會在定義的一組位置中尋找憑證,並使用這些憑證驗證向 API 發出的要求。有了 ADC,您可以在各種環境 (例如本機開發環境或正式環境),為應用程式提供憑證,不用修改應用程式程式碼。

Google Cloud CLI

使用 gcloud CLI 存取 Pub/Sub 時,使用使用者帳戶登入 gcloud CLI,可提供 gcloud CLI 指令所使用的憑證。

如果組織的安全政策禁止使用者帳戶具備必要權限,可以採用服務帳戶模擬

詳情請參閱「使用 gcloud CLI 進行驗證」。如要進一步瞭解如何透過 gcloud CLI 使用 Pub/Sub,請參閱 gcloud CLI 參考頁面

REST

您可以使用 gcloud CLI 憑證或應用程式預設憑證,向 Pub/Sub API 進行驗證。如要進一步瞭解 REST 要求的驗證機制,請參閱「使用 REST 進行驗證」。如要瞭解憑證類型,請參閱「gcloud CLI 憑證和 ADC 憑證」。

Pub/Sub 的使用者憑證和 ADC

如要將憑證提供給 ADC,其中一種方法是使用 gcloud CLI,將使用者憑證插入憑證檔案。這個檔案會存放在本機檔案系統,供 ADC 尋找;ADC 接著會使用提供的使用者憑證驗證要求。這個方法通常用於本機開發環境。

如果您使用這個方法,嘗試向 Pub/Sub 進行驗證時,可能會發生驗證錯誤。如要進一步瞭解這項錯誤及解決方式,請參閱「使用者憑證無法運作」一節。

設定 Pub/Sub 的驗證

驗證機制的設定方式取決於執行程式碼的環境。

以下是最常用的驗證機制設定方式。如要瞭解更多驗證選項和相關資訊,請參閱「驗證方式」。

適用於本機開發環境

您可以透過下列方式,為本機開發環境設定憑證:

用戶端程式庫或第三方工具

在本機環境中設定應用程式預設憑證 (ADC)

  1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init

    若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  2. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果您使用 Cloud Shell,則不需要執行這項操作。

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    登入畫面會隨即顯示。登入後,您的憑證會儲存在 ADC 使用的本機憑證檔案中。

如要進一步瞭解如何在本機環境中使用 ADC,請參閱「為本機開發環境設定 ADC」。

透過指令列發出 REST 要求

透過指令列發出 REST 要求時,只要在用於傳送要求的指令中加入 gcloud auth print-access-token,即可使用 gcloud CLI 憑證。

下列範例會列出指定專案的服務帳戶。您可以將相同模式用於任何 REST 要求。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud 專案 ID。

如要傳送要求,請展開以下其中一個選項:

 

如要進一步瞭解如何使用 REST 和 gRPC 進行驗證,請參閱「使用 REST 進行驗證」。如要瞭解本機 ADC 憑證與 gcloud CLI 憑證的差異,請參閱「gcloud CLI 驗證設定和 ADC 設定」。

服務帳戶模擬

在多數情況下,您可以使用使用者憑證,從本機開發環境進行驗證。如果無法這麼做,或者需要測試指派給服務帳戶的權限,可以使用服務帳戶模擬功能。您必須具備 iam.serviceAccounts.getAccessToken 權限,這項權限包含在服務帳戶權杖建立者 (roles/iam.serviceAccountTokenCreator) 身分與存取權管理角色中。

您可以使用 gcloud config set 指令,設定 gcloud CLI 來使用服務帳戶模擬功能:

gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL

對於特定語言,您可以使用服務帳戶模擬功能建立本機 ADC 檔案,供用戶端程式庫使用。這種做法僅適用於 Go、Java、Node.js 和 Python 用戶端程式庫,不適用於其他語言。如要使用服務帳戶模擬功能設定本機 ADC 檔案,請搭配 gcloud auth application-default login 指令使用 --impersonate-service-account 旗標

gcloud auth application-default login --impersonate-service-account=SERVICE_ACCT_EMAIL

如要進一步瞭解服務帳戶模擬功能,請參閱「使用服務帳戶模擬功能」。

透過 Google Cloud

如要驗證在 Google Cloud上執行的工作負載,請使用附加至程式碼執行所在運算資源的服務帳戶憑證,例如 Compute Engine 虛擬機器 (VM) 執行個體。對於在 Google Cloud 運算資源上執行的程式碼,我們建議採用這種驗證方式。

對於大多數服務,您必須在建立要執行程式碼的資源時附加服務帳戶,之後無法新增或替換服務帳戶。Compute Engine 是例外狀況,可讓您隨時將服務帳戶附加至 VM 執行個體。

請使用 gcloud CLI 建立服務帳戶,並附加至資源:

  1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init

    若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  2. 設定驗證方法:

    1. 確認您具備「建立服務帳戶」身分與存取權管理角色 (roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色
    2. 建立服務帳戶:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 換成服務帳戶的名稱。

    3. 如要授予服務帳戶專案和資源的存取權,請將角色授予該帳戶:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      請替換下列項目:

      • SERVICE_ACCOUNT_NAME:服務帳戶名稱
      • PROJECT_ID:您建立服務帳戶的專案 ID
      • ROLE:要授予的角色
    4. 如要將其他角色授予服務帳戶,請執行上一個步驟中的指令。
    5. 將必要角色指派給要將服務帳戶附加至其他資源的主體。

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      更改下列內容:

      • SERVICE_ACCOUNT_NAME:服務帳戶名稱
      • PROJECT_ID:您建立服務帳戶的專案 ID
      • USER_EMAIL:Google 帳戶的電子郵件地址
  3. 建立要執行程式碼的資源,並將服務帳戶附加至該資源。例如,如果您使用 Compute Engine:

    建立 Compute Engine 執行個體。請依照下列步驟來設定執行個體:
    • INSTANCE_NAME 替換成您偏好的執行個體名稱。
    • --zone 旗標設為您要在其中建立執行個體的區域
    • --service-account 旗標設為您建立的服務帳戶電子郵件地址。
    gcloud compute instances create INSTANCE_NAME --zone=ZONE --service-account=SERVICE_ACCOUNT_EMAIL

如要進一步瞭解如何向 Google API 進行驗證,請參閱「驗證方式」。

地端部署或其他雲端服務供應商

如要從 Google Cloud 外部設定驗證,建議使用 workload identity federation。詳情請參閱驗證說明文件中的「為地端部署或其他雲端服務供應商設定 ADC」。

Pub/Sub 的存取權控管

向 Pub/Sub 進行驗證後,您必須獲得授權才能存取 Google Cloud 資源。Pub/Sub 會使用 Identity and Access Management (IAM) 進行授權。

如要進一步瞭解 Pub/Sub 的角色,請參閱「使用 IAM 控管存取權」一文;如要進一步瞭解 IAM 和授權,請參閱「IAM 總覽」一文。

後續步驟