本文說明在 Google Distributed Cloud 實作中建立叢集時,需要使用的 Google Cloud 服務帳戶和金鑰。
這裡的說明十分詳盡。如要簡短瞭解如何使用服務帳戶,請參閱「設定最少基礎架構」。
事前準備
服務帳戶總覽
建立管理員和使用者叢集之前,您需要下列服務帳戶:
- 元件存取服務帳戶
- 連結並註冊服務帳戶
- 記錄監控服務帳戶
視要啟用的功能而定,您可能也需要一些選用服務帳戶。
瞭解服務帳戶和 Google Cloud 專案
建立服務帳戶時,請將其與 Google Cloud 專案建立關聯。
這個 Google Cloud 專案稱為服務帳戶的「父項專案」。本文中的所有 gcloud iam service-accounts create
指令都會使用預留位置變數 PROJECT_ID
,這是服務帳戶父項專案的專案 ID。
如要判斷服務帳戶的父項專案,請查看服務帳戶的電子郵件地址。舉例來說,以下是名為 logger
的服務帳戶電子郵件地址。父項專案為 alice-123
。
logger@alice-123.iam.gserviceaccount.com
將 Identity and Access Management (IAM) 角色授予服務帳戶時,您是在特定Google Cloud 專案上,將角色授予服務帳戶。這遵循將資源的角色授予主體的通用模式。
舉例來說,您可以將 bigquery.dataEditor
角色授予 bob-456
專案的 logger@alice-123.iam.gserviceaccount.com
服務帳戶。在本例中,服務帳戶是主體, Google Cloud 專案是資源。
您可以將角色授予服務帳戶,但專案不一定要是服務帳戶的父項專案,也可以是同一個專案。 Google Cloud 為提供這種彈性,本文中元件存取服務帳戶、connect-register 服務帳戶和記錄/監控服務帳戶的 gcloud projects add-iam-policy-binding
指令會使用 FLEET_HOST_PROJECT_ID
預留位置變數。這是機群主專案的 ID。在 gcloud projects add-iam-policy-binding
指令中指定為 FLEET_HOST_PROJECT_ID
的 ID 必須相同。
將角色授予服務帳戶的權限
您必須在相關的Google Cloud 專案中,為每個服務帳戶授予特定角色。舉例來說,您必須在車隊主機專案中,將 gkehub.editor
角色授予連線註冊服務帳戶。
如要授予 Google Cloud 專案角色,您必須具備該專案的特定權限。詳情請參閱「瞭解角色」一文中的roles/resourcemanager.projectIamAdmin
。
如果您具備必要權限,可以自行授予角色。 否則,貴機構的其他使用者必須授予您這些角色。
使用 gkeadm
自動建立服務帳戶
本頁面說明如何手動建立服務帳戶,以及如何將角色授予服務帳戶。除了手動執行這些步驟,您也可以在建立管理工作站時,讓 gkeadm
指令列工具建立部分服務帳戶並授予角色。即使您允許 gkeadm
建立服務帳戶,仍須手動建立元件存取服務帳戶,並授予必要的 IAM 角色,如下一節所述。如要進一步瞭解 gkeadm
可建立的服務帳戶,請參閱「建立管理工作站」。
元件存取服務帳戶
Google Distributed Cloud 會使用這個服務帳戶,代表您從 Artifact Registry 下載叢集元件。
建立元件存取服務帳戶:
gcloud iam service-accounts create component-access-sa \ --display-name "Component Access Service Account" \ --project PROJECT_ID
將
PROJECT_ID
替換為您要設為服務帳戶父項專案的 Google Cloud 專案 ID。取得新建立的元件存取服務帳戶電子郵件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
為元件存取服務帳戶建立 JSON 金鑰:
gcloud iam service-accounts keys create component-access-key.json \ --iam-account COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL
將
COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL
替換為元件存取服務帳戶的電子郵件地址。
將角色授予元件存取服務帳戶
您必須在專案中,為元件存取服務帳戶授予下列 IAM 角色。Google Distributed Cloud 必須具備下列角色,才能執行預檢檢查:
serviceusage.serviceUsageViewer
iam.roleViewer
iam.serviceAccountViewer
compute.viewer
如要授予角色:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \ --role "roles/serviceusage.serviceUsageViewer" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.roleViewer" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.serviceAccountViewer" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \ --role "roles/compute.viewer"
將 FLEET_HOST_PROJECT_ID
替換為車隊主機專案的 ID。這可以是服務帳戶建立時所在的專案,也可以是其他專案。您在此指定的專案 ID,必須與授予 connect-register 服務帳戶和 logging-monitoring 服務帳戶 IAM 角色時指定的 ID 相同。
連結並註冊服務帳戶
Google Distributed Cloud 會使用這個服務帳戶,向車隊註冊叢集。
建立 connect-register 服務帳戶:
gcloud iam service-accounts create connect-register-sa \ --display-name "Connect-register Service Account" \ --project PROJECT_ID
將
PROJECT_ID
替換為您要設為 connect-register 服務帳戶父項的Google Cloud 專案 ID。取得新建立的連結註冊服務帳戶電子郵件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
為連結註冊服務帳戶建立 JSON 金鑰:
gcloud iam service-accounts keys create connect-register-key.json \ --iam-account CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL
將
CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL
替換為連結註冊服務帳戶的電子郵件地址。將
gkehub.editor
角色指派給 connect-register 服務帳戶:gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL" \ --role "roles/gkehub.editor"
您在此指定的專案 ID,必須與授予元件存取服務帳戶和記錄/監控服務帳戶 IAM 角色時指定的 ID 相同。
記錄監控服務帳戶
Google Distributed Cloud 會使用這個服務帳戶,將叢集的記錄檔和指標匯出至 Cloud Logging 和 Cloud Monitoring。
建立記錄/監控服務帳戶:
gcloud iam service-accounts create logging-monitoring-sa \ --display-name "Logging-monitoring Service Account" \ --project=PROJECT_ID
將
PROJECT_ID
替換為您要設為記錄/監控服務帳戶父項的Google Cloud 專案 ID。取得新建立的記錄/監控服務帳戶電子郵件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
為記錄/監控服務帳戶建立 JSON 金鑰:
gcloud iam service-accounts keys create logging-monitoring-key.json \ --iam-account LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL
將
LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL
替換為記錄監控服務帳戶的電子郵件地址。
將角色授予記錄檔監控服務帳戶
您必須在專案中將下列角色授予記錄/監控服務帳戶:
opsconfigmonitoring.resourceMetadata.writer
logging.logWriter
monitoring.metricWriter
monitoring.dashboardEditor
kubernetesmetadata.publisher
如要將必要角色授予記錄檔監控服務帳戶,請按照下列步驟操作:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \ --role "roles/opsconfigmonitoring.resourceMetadata.writer" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \ --role "roles/logging.logWriter" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \ --role "roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \ --role "roles/kubernetesmetadata.publisher"
您在此指定的專案 ID,必須與授予元件存取服務帳戶和連線註冊服務帳戶 IAM 角色時指定的 ID 相同。
選用服務帳戶
本節所述服務帳戶為選用。
稽核記錄服務帳戶
Google Distributed Cloud 會使用這個服務帳戶,將叢集的 Kubernetes 稽核記錄傳送至 Cloud 稽核記錄。
如果您打算建立已啟用進階叢集的叢集 (設定拓撲網域時必須啟用),請使用稽核記錄的記錄/監控服務帳戶和金鑰,不必再建立其他服務帳戶。
建立稽核記錄服務帳戶:
gcloud iam service-accounts create audit-logging-sa \ --project PROJECT_ID
將
PROJECT_ID
替換為您要設為稽核記錄服務帳戶上層的Google Cloud 專案 ID。取得新建立的稽核記錄服務帳戶電子郵件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
為稽核記錄服務帳戶建立 JSON 金鑰:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
將
AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
替換為稽核記錄服務帳戶的電子郵件地址。
您不需要授予稽核記錄服務帳戶任何角色。
二進位授權服務帳戶
Google Distributed Cloud 會使用這個服務帳戶呼叫 Binary Authorization API。
如要瞭解如何建立二進位授權服務帳戶,請參閱「GKE On-Prem 適用的二進位授權」。