向 Config Sync 授予对 OCI 映像或 Helm 代码库的访问权限

本页面介绍如何对 Config Sync 进行身份验证,以访问您的 OCI 映像或 Helm 代码库。Config Sync 需要对您的可靠来源具有只读权限,才能读取您的配置、将其应用于您的集群并保持同步。

选择身份验证方法

您使用的身份验证方法取决于您的来源类型支持的方法。

下表总结了可与 Config Sync 搭配使用的身份验证方法:

方法 支持的来源 说明 限制
无身份验证 Git、OCI、Helm 无需进行额外设置。 仅当可信来源为公开时才有效。
SSH 密钥对 Git 大多数 Git 提供商都支持此功能。 需要密钥管理。不支持 OCI 或 Helm。
token Git、Helm 大多数 Git 提供商都支持此功能。如果您的组织不允许使用 SSH 密钥,则不妨使用令牌。支持 Helm 的用户名和密码。 需要令牌管理。令牌可能会过期。不支持 OCI。
Kubernetes 服务账号 OCI、Helm 使用 IAM 直接向 Kubernetes 服务账号授予 Artifact Registry 访问权限。要求在集群上启用 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 1.19.1 及更高版本中受支持。

Config Sync 还支持以下身份验证方法;不过,只有在无法使用上表中列出的选项之一时,才建议使用这些方法:

  • cookiefile:可能并非所有 Git 提供商都支持此选项。不支持 OCI 或 Helm。
  • Compute Engine 默认服务账号 (gcenode):不建议使用,因为此方法仅在停用适用于 GKE 的工作负载身份联合时有效。支持 Git、OCI 和 Helm。
  • Helm 和 OCI 的 Google 服务账号:受支持,但不建议使用,因为 Kubernetes 服务账号方法所需的配置更少。

准备工作

在向 Config Sync 授予对可靠来源的只读访问权限之前,请完成以下任务:

授予对 OCI 映像的访问权限

本部分介绍如何使用受支持的身份验证方法向 Config Sync 授予对 OCI 映像的只读权限。

您必须在 Artifact Registry 中存储 OCI 映像,才能向 Config Sync 进行身份验证。

使用 Kubernetes 服务账号

如需使用 Kubernetes 服务账号进行身份验证,您的集群必须启用 Workload Identity Federation for GKE舰队 Workload Identity Federation for GKE

如需使用 Kubernetes 服务账号向 Config Sync 授予对 OCI 映像的只读权限,请完成以下步骤:

  1. 如需获得创建政策绑定所需的权限,请让您的管理员为您授予服务账号的 Service Account Admin (roles/iam.serviceAccountAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  2. 向使用 Workload Identity Federation for GKE 池的 Kubernetes 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色:

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
           --role=roles/artifactregistry.reader \
           --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
          --location=LOCATION \
          --role=roles/artifactregistry.reader \
          --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
          --project=PROJECT_ID
      

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • FLEET_HOST_PROJECT_ID:如果您使用的是 Workload Identity Federation for GKE,则此值与项目 ID 相同。如果您使用的是舰队 Workload Identity Federation for GKE,则此值是集群注册到的舰队的项目 ID。
    • REPOSITORY:图片的 ID。
    • LOCATION:制品库的单区域级或多区域级位置。

安装 Config Sync 时,请使用 Kubernetes 服务账号 (k8sserviceaccount) 作为身份验证类型。

使用 Compute Engine 默认服务账号

如果您未启用 Workload Identity Federation for GKE,则可以使用 Compute Engine 服务账号进行身份验证,而无需使用 Google 服务账号。

如需使用 Compute Engine 默认服务账号向 Config Sync 授予对代码库的只读访问权限,请向 Compute Engine 服务账号授予对 Artifact Registry 的读取权限:

gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.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 字段中指定 Secret 名称。

使用 Kubernetes 服务账号

如需使用 Kubernetes 服务账号进行身份验证,您必须满足以下要求:

如需使用 Kubernetes 服务账号向 Config Sync 授予对 Helm 代码库的只读权限,请完成以下步骤:

  1. 如需获得创建政策绑定所需的权限,请让您的管理员为您授予服务账号的 Service Account Admin (roles/iam.serviceAccountAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  2. 如需使用 Kubernetes 服务账号向 Config Sync 授予对 Helm 制品库的只读访问权限,请向包含 Workload Identity Federation for GKE 池的 Kubernetes 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色:

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
           --role=roles/artifactregistry.reader \
           --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
          --location=LOCATION \
          --role=roles/artifactregistry.reader \
          --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
          --project=PROJECT_ID
      

    替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • FLEET_HOST_PROJECT_ID:如果您使用 Workload Identity Federation for GKE,则此值与项目 ID 相同。如果您使用的是舰队 Workload Identity Federation for GKE,则此值是集群注册到的舰队的项目 ID。
    • REPOSITORY:图片的 ID。
    • LOCATION:制品库的单区域级或多区域级位置。

安装 Config Sync 时,请使用 Kubernetes 服务账号 (k8sserviceaccount) 作为身份验证类型。

使用 Compute Engine 默认服务账号

如果您未启用 Workload Identity Federation for GKE,则可以使用 Compute Engine 服务账号进行身份验证,而无需使用 Google 服务账号。

如需使用 Compute Engine 默认服务账号向 Config Sync 授予对代码库的只读访问权限,请向 Compute Engine 服务账号授予对 Artifact Registry 的读取权限:

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • PROJECT_NUMBER:您的项目编号。

安装 Config Sync 时,请使用 Compute Engine 服务账号 (gcenode) 作为身份验证类型。

后续步骤