本文說明如何以程式輔助方式向 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):
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
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 建立服務帳戶,並附加至資源:
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
設定驗證方法:
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。 -
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME換成服務帳戶的名稱。 -
如要授予服務帳戶專案和資源的存取權,請將角色授予該帳戶:
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:您建立服務帳戶的專案 IDROLE:要授予的角色
- 如要將其他角色授予服務帳戶,請執行上一個步驟中的指令。
-
將必要角色指派給要將服務帳戶附加至其他資源的主體。
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:您建立服務帳戶的專案 IDUSER_EMAIL:Google 帳戶的電子郵件地址
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
-
建立要執行程式碼的資源,並將服務帳戶附加至該資源。例如,如果您使用 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 總覽」一文。
後續步驟
- 進一步瞭解 Pub/Sub OAuth 2.0 範圍。
- 瞭解Google Cloud 驗證方式。
- 查看驗證用途清單。