授予 Config Sync 存取 OCI 映像檔或 Helm 存放區的權限

本頁說明如何向 OCI 映像檔或 Helm 存放區驗證 Config Sync。Config Sync 需要可靠資料來源的唯讀存取權,才能讀取設定、將設定套用至叢集,並保持同步。

選擇驗證方式

使用的驗證方法取決於來源類型支援的方法。

下表摘要說明可搭配 Config Sync 使用的驗證方法:

方法 支援的來源 說明 限制
無驗證 Git、OCI、Helm 不需要進行額外設定。 只有在可靠來源為公開狀態時,這項功能才能運作。
安全殼層金鑰組 Git 大多數 Git 供應商都支援這項功能。 需要管理金鑰。不支援 OCI 或 Helm。
權杖 Git、OCI、Helm 大多數 Git 供應商都支援這項功能。如果貴機構不允許使用安全殼層金鑰,可以選擇使用權杖。支援 OCI 和 Helm 的使用者名稱和密碼。 需要權杖管理。權杖可能會過期。
Kubernetes 服務帳戶 OCI、Helm 使用 IAM 直接將 Artifact Registry 存取權授予 Kubernetes 服務帳戶。您必須在叢集上啟用 Workload Identity Federation for GKE。 不支援 Git。
Google 服務帳戶 Git 使用 IAM,避免在 Kubernetes Secret 中儲存憑證。建議用於 Secure Source Manager 和 Cloud Source Repositories。您必須在叢集上啟用 Workload Identity Federation for GKE。 在叢集上安裝 Config Sync 前後,都需要進行設定。不支援在 Secure Source Manager 或 Cloud Source Repositories 以外的平台代管存放區。
GitHub 應用程式 Git 直接與 GitHub 整合。允許精細權限。 僅適用於 GitHub 託管的存放區。

Config Sync 也支援下列驗證方法,但只有在無法使用上表列出的選項時,才建議採用這些方法:

  • cookiefile:部分 Git 供應商可能不支援這項功能。不支援 OCI 或 Helm。
  • Compute Engine 預設服務帳戶 (gcenode):不建議使用,因為只有在停用 Workload Identity Federation for GKE 時,這個方法才有效。支援 Git、OCI 和 Helm。
  • Helm 和 OCI 的 Google 服務帳戶:支援,但不建議使用,因為 Kubernetes 服務帳戶方法需要的設定較少。

事前準備

將可靠資料來源的唯讀存取權授予 Config Sync 前,請先完成下列工作:

授予 OCI 映像檔的存取權

本節說明如何使用支援的驗證方法,授予 Config Sync OCI 映像檔的唯讀存取權。

您必須將 OCI 映像檔儲存在 Artifact Registry 中,才能向 Config Sync 進行驗證。

使用權杖

如要使用權杖授予 Config Sync 對 OCI 存放區的唯讀存取權,請建立使用 OCI 存放區使用者名稱和密碼的 Secret:

kubectl create secret generic SECRET_NAME \
      --namespace=config-management-system \
      --from-literal=username=USERNAME \
      --from-literal=password=PASSWORD

更改下列內容:

  • SECRET_NAME:Secret 名稱。
  • USERNAME:OCI 存放區使用者名稱。
  • PASSWORD:您的 OCI 存放區密碼。

安裝 Config Sync 時,請使用權杖 (token) 做為驗證類型。您也必須在 spec.oci.secretRef.name 欄位中指定密鑰名稱。

使用 Kubernetes ServiceAccount

如要使用 Kubernetes ServiceAccount 進行驗證,叢集必須啟用 Workload Identity Federation for GKE 或 fleet Workload Identity Federation for GKE。

如要使用 Kubernetes ServiceAccount 授予 Config Sync 對 OCI 映像檔的唯讀存取權,請完成下列步驟:

  1. 如要取得建立政策繫結所需的權限,請要求管理員授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

  2. 將專案或存放區的 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount:

    • 如果專案中的所有存放區都適用相同權限,請授予專案層級權限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
           --role=roles/artifactregistry.reader \
           --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \
           --condition=None
      
    • 如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
          --location=LOCATION \
          --role=roles/artifactregistry.reader \
          --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \
          --project=PROJECT_ID \
          --condition=None
      

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • FLEET_HOST_PROJECT_NUMBER:如果您使用 Workload Identity Federation for GKE,這個值與專案編號相同。如果您使用 Workload Identity Federation for GKE,這個值是叢集註冊的機群專案編號。
    • FLEET_HOST_PROJECT_ID:如果您使用 Workload Identity Federation for GKE,這個值與專案 ID 相同。如果您使用 Workload Identity Federation for GKE,這個值就是叢集註冊的機群專案 ID。
    • KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount。在大多數情況下,值為 root-reconciler,因為透過 Cloud de Confiance 控制台或 Google Cloud CLI 安裝時,Config Sync 會自動建立名為 root-sync 的 RootSync 物件。否則,請使用 root-reconciler-ROOT_SYNC_NAME 做為值。
    • REPOSITORY:存放區 ID。
    • LOCATION:存放區的區域或多區域位置。

安裝 Config Sync 時,請使用 Kubernetes ServiceAccount (k8sserviceaccount) 做為驗證類型。

使用 Compute Engine 預設服務帳戶

如果未啟用 GKE 的 Workload Identity Federation,您可以使用 Compute Engine 服務帳戶進行驗證,做為 Google 服務帳戶的替代方案。

如要使用 Compute Engine 預設服務帳戶授予 Config Sync 唯讀存取權給存放區,請將讀取權限授予 Artifact Registry 的 Compute Engine 服務帳戶:

gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
      --role=roles/artifactregistry.reader

更改下列內容:

  • PROJECT_ID:專案 ID
  • PROJECT_NUMBER:您的專案編號。

安裝 Config Sync 時,請使用 Compute Engine 服務帳戶 (gcenode) 做為驗證類型。

授予 Helm 存放區的存取權

本節說明如何授予 Config Sync 存放區中儲存的 Helm 資訊套件唯讀存取權。

使用權杖

如要使用權杖授予 Config Sync 對 Helm 存放區的唯讀存取權,請使用 Helm 存放區的使用者名稱和密碼建立 Secret:

kubectl create secret generic SECRET_NAME \
      --namespace=config-management-system \
      --from-literal=username=USERNAME \
      --from-literal=password=PASSWORD

更改下列內容:

  • SECRET_NAME:Secret 名稱。
  • USERNAME:Helm 存放區使用者名稱。
  • PASSWORD:Helm 存放區密碼。

安裝 Config Sync 時,請使用權杖 (token) 做為驗證類型。您也必須在 spec.helm.secretRef.name 欄位中指定密鑰名稱。

使用 Kubernetes ServiceAccount

如要使用 Kubernetes ServiceAccount 進行驗證,請務必符合下列規定:

如要使用 Kubernetes ServiceAccount 授予 Config Sync 對 Helm 存放區的唯讀存取權,請完成下列步驟:

  1. 如要取得建立政策繫結所需的權限,請要求管理員授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

  2. 將專案或存放區的 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Kubernetes ServiceAccount:

    • 如果專案中的所有存放區都適用相同權限,請授予專案層級權限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
           --role=roles/artifactregistry.reader \
           --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \
           --condition=None
      
    • 如要讓服務帳戶在專案中對每個存放區擁有不同層級的存取權,請授予存放區專屬權限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
          --location=LOCATION \
          --role=roles/artifactregistry.reader \
          --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \
          --project=PROJECT_ID \
          --condition=None
      

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • FLEET_HOST_PROJECT_NUMBER:如果您使用 Workload Identity Federation for GKE,這個值與專案編號相同。如果您使用 Workload Identity Federation for GKE,這個值是叢集註冊的機群專案編號。
    • FLEET_HOST_PROJECT_ID:如果您使用 Workload Identity Federation for GKE,這個值與專案 ID 相同。如果您使用 Workload Identity Federation for GKE,這個值就是叢集註冊的機群專案 ID。
    • KUBERNETES_SERVICEACCOUNT:協調器的 Kubernetes ServiceAccount。在大多數情況下,值為 root-reconciler,因為透過 Cloud de Confiance 控制台或 Google Cloud CLI 安裝時,Config Sync 會自動建立名為 root-sync 的 RootSync 物件。否則,請使用 root-reconciler-ROOT_SYNC_NAME 做為值。
    • REPOSITORY:存放區 ID。
    • LOCATION:存放區的區域或多區域位置。

安裝 Config Sync 時,請使用 Kubernetes ServiceAccount (k8sserviceaccount) 做為驗證類型。

使用 Compute Engine 預設服務帳戶

如果未啟用 GKE 的 Workload Identity Federation,您可以使用 Compute Engine 服務帳戶進行驗證,做為 Google 服務帳戶的替代方案。

如要使用 Compute Engine 預設服務帳戶授予 Config Sync 唯讀存取權給存放區,請將讀取權限授予 Artifact Registry 的 Compute Engine 服務帳戶:

gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
      --role=roles/artifactregistry.reader

更改下列內容:

  • PROJECT_ID:專案 ID
  • PROJECT_NUMBER:您的專案編號。

安裝 Config Sync 時,請使用 Compute Engine 服務帳戶 (gcenode) 做為驗證類型。

後續步驟