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

本页面介绍了如何向 OCI 映像或 Helm 代码库验证 Config Sync 的身份。 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):不建议使用,因为此方法仅在 Workload Identity Federation for 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,则除了 Google 服务账号,还可以使用 Compute Engine 服务账号进行身份验证。

如需使用 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,则除了 Google 服务账号,还可以使用 Compute Engine 服务账号进行身份验证。

如需使用 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) 作为身份验证类型。

后续步骤