第 4 步:创建服务账号

概览

此步骤介绍了如何创建 Apigee Hybrid 运行所需的 Google Cloud 服务账号,并为其分配适当的 IAM 角色。

此过程使用第 2 步:下载 Apigee Helm 图表中定义的以下两个环境变量。这些变量是可选的。如果您没有定义这些变量,请将代码示例中的每个变量替换为适当的目录路径。

生产环境与非生产环境

本指南适用于生产安装和非生产安装。生产安装针对更高的使用容量、存储空间和可伸缩性进行了调整。非生产安装使用的资源更少,主要用于学习和演示。

为 Apigee Hybrid 创建和配置服务账号时,请务必了解目标安装类型。

对于生产安装,我们建议为每个 Apigee Hybrid 组件创建一个单独的服务账号。例如,runtime、mart、metrics、mint 等。每个组件都有一个专用服务账号。

对于非生产安装,您可以创建一个适用于所有组件的服务账号。

如需详细了解 Apigee 使用的服务账号及其分配的角色,请参阅 Hybrid 组件使用的服务账号和角色。

对服务账号进行身份验证

Apigee Hybrid 支持以下 Google 服务账号身份验证方法:

  • Kubernetes Secret
  • 服务账号 JSON 密钥文件(以下部分的选择标签页中的“JSON 文件”)。
  • 保险柜
  • 适用于 GKE 的工作负载身份联合(以下部分的选择标签页中简称为“适用于 GKE 的 WIF”)。
  • 其他平台上的工作负载身份联合(以下部分的选择标签页中简称为“其他平台上的 WIF”)。

在下一部分中,选择您计划使用的身份验证类型所对应的步骤。

创建服务账号

Apigee Hybrid 使用以下服务账号:

生产

服务账号 IAM 角色 Apigee Helm 图表
apigee-cassandra Storage Object Admin apigee-datastore
apigee-guardrails Service Usage Viewer apigee-operator
apigee-logger Logs Writer apigee-telemetry
apigee-mart Apigee Connect Agent apigee-org
apigee-metrics 监控指标写入者 apigee-telemetry
apigee-mint-task-scheduler
(仅在您使用 Apigee Hybrid 的创收功能时是必需的)
无需角色 apigee-org
apigee-runtime 无需角色 apigee-env
apigee-synchronizer Apigee Synchronizer Manager
Storage Object Admin
apigee-env
apigee-watcher Apigee Runtime Agent apigee-org

非生产

服务账号 IAM 角色 Apigee Helm 图表
apigee-non-prod Storage Object Admin
Service Usage Viewer
Logs Writer
Apigee Connect Agent
Monitoring Metric Writer
Apigee Synchronizer Manager
Apigee Runtime Agent
apigee-datastore
apigee-operator
apigee-telemetry
apigee-org
apigee-env

create-service-account 工具会执行以下操作:

Apigee 在 apigee-operator/etc/tools 目录中提供了一个工具 create-service-account:

$APIGEE_HELM_CHARTS_HOME/
    └── apigee-operator/
        └── etc/
            └── tools/
                └── create-service-account

此工具会创建服务账号、将 IAM 角色分配给每个账号,并为每个账号下载 JSON 格式的证书文件。

使用以下标志来控制 create-service-account 创建哪些服务账号以及使用哪些项目和目录:

  • --prod 用于创建所有受支持的生产服务账号。 这是默认行为:如果您在运行 create-service-account 时既不使用 --prod 也不使用 --non-prod,则其行为与您传递 --prod 时相同。
  • --prod SA_NAME 会创建一个名为 --prod apigee-cassandra 的生产服务账号。
  • --non-prod 会创建一个具有所有 IAM 角色的非生产服务账号。账号名称为 apigee-non-prod。
  • --non-prod SA_NAME 会创建名称为 SA_NAME(而非默认名称 apigee-non-prod)的单个非生产服务账号,例如 --non-prod my-non-prod-sa。
  • --name NAME(或 -n NAME)将创建的单个服务账号命名为 NAME。--name 仅更改账号的名称,绝不会更改其接收的 IAM 角色。使用 --prod SA_NAME --name NAME 为单个生产服务账号指定除 SA_NAME 以外的名称。--name 不能与裸 --prod(为每个受支持的生产服务账号名称创建一个单独的账号)一起使用,并且与 --non-prod 一起使用时,它会优先于位置 SA_NAME。
  • --project-id PROJECT_ID 设置 Google Cloud 项目 ID。如果同时设置了 --project-id 和 PROJECT_ID 环境变量,则以 --project-id 为准,并且该工具会记录一条警告。该工具始终会记录其使用的项目 ID 来源,并在创建任何服务账号之前打印已解析的部署类型、项目和输出目录。
  • --dir DIRECTORY 将服务账号密钥文件写入 DIRECTORY。
  • --skip-key-download 会创建服务账号并分配其 IAM 角色,但不会下载 JSON 密钥文件。当您不需要密钥文件时(例如使用 Workload Identity Federation for GKE 身份验证方法时),请使用此标志。
  • --help 会打印完整的使用情况,包括支持的生产服务账号名称列表。

验证您可以执行 create-service-account。如果您刚刚下载了此图表,则 create-service-account 文件可能尚未处于可执行模式。在 APIGEE_HELM_CHARTS_HOME 目录中,运行以下命令:

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account --help

如果输出显示 permission denied,则需要使该文件可执行,例如在 Linux、MacOS 或 UNIX 中或者在 Windows 资源管理器中使用 chmod,在 Windows 中使用 icacls 命令。例如:

chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account

创建服务账号

选择您计划在安装中使用的服务账号身份验证方法的相应步骤。如需了解详情,请参阅 Apigee Hybrid 中的服务账号身份验证方法。

Kubernetes Secret

如需准备好服务账号密钥文件以存储在 Kubernetes Secret 中,您可以使用 create-service-account 工具创建带有 --dir 标志的服务账号密钥文件,以创建密钥文件目录。

生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 通过检查 service-accounts 目录的内容,验证是否已创建服务账号文件。您的输出应如下所示:
    ls $APIGEE_HELM_CHARTS_HOME/service-accounts/
    my-project-apigee-cassandra.json    my-project-apigee-mint-task-scheduler.json
    my-project-apigee-guardrails.json   my-project-apigee-runtime.json
    my-project-apigee-logger.json       my-project-apigee-synchronizer.json
    my-project-apigee-mart.json         my-project-apigee-watcher.json
    my-project-apigee-metrics.json
    

非生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --non-prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 通过检查 service-accounts 目录的内容,验证服务账号文件是否已创建。您的输出应如下所示:
    ls $APIGEE_HELM_CHARTS_HOME/service-accounts/
    my-project-apigee-non-prod.json

JSON 文件

由于 Helm 不支持引用图表目录之外的文件,因此您将在图表目录中为相应的 Hybrid 组件创建每个服务账号证书文件。

在接下来的步骤中,选择是配置生产安装还是非生产安装。

生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-cassandra \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-datastore
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-guardrails \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-operator
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-logger \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-telemetry
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-mart \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-org
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-metrics \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-telemetry
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-runtime \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-env
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-synchronizer \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-env
    
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-watcher \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-org

    如果您要为 Apigee Hybrid 启用创收功能(Apigee Hybrid v1.15.1 及更高版本):

    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod apigee-mint-task-scheduler \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-org
    
  3. 通过检查每个图表的目录内容,验证是否已在正确的目录中创建服务账号文件。您的输出应如下所示:
    ls ./apigee-operator
    Chart.yaml  my-project-apigee-guardrails.json  tests
    etc         templates                          values.yaml
    
    ls ./apigee-datastore
    Chart.yaml  my-project-apigee-cassandra.json  templates  values.yaml
    
    ls ./apigee-telemetry
    Chart.yaml                     my-project-apigee-metrics.json  values.yaml
    my-project-apigee-logger.json  templates
    
    ls ./apigee-org
    Chart.yaml                                  my-project-apigee-watcher.json
    my-project-apigee-mart.json                 values.yaml
    my-project-apigee-mint-task-scheduler.json
    
    ls ./apigee-env
    Chart.yaml                            templates
    my-project-apigee-runtime.json      values.yaml
    my-project-apigee-synchronizer.json
    

非生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --non-prod \
      --dir $APIGEE_HELM_CHARTS_HOME/apigee-datastore
  3. 验证在 apigee-datastore 目录中创建的服务账号文件的名称:
    ls $APIGEE_HELM_CHARTS_HOME/apigee-datastore
    Chart.yaml  PROJECT_ID-apigee-non-prod.json  templates  values.yaml
  4. 将服务账号文件复制到需要引用它的其他图表目录:
    cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/SA_FILE_NAME $APIGEE_HELM_CHARTS_HOME/apigee-operator/
    cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/SA_FILE_NAME $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/
    cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/SA_FILE_NAME $APIGEE_HELM_CHARTS_HOME/apigee-org/
    cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/SA_FILE_NAME $APIGEE_HELM_CHARTS_HOME/apigee-env/

保险柜

如需准备好服务账号密钥文件以存储在保险柜中,您可以使用 create-service-account 工具创建带有 --dir 标志的服务账号密钥文件,以创建密钥文件目录。

生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 通过检查 service-accounts 目录的内容,验证是否已创建服务账号文件。您的输出应如下所示:
    ls $APIGEE_HELM_CHARTS_HOME/service-accounts/
    my-project-apigee-cassandra.json    my-project-apigee-mint-task-scheduler.json
    my-project-apigee-guardrails.json   my-project-apigee-runtime.json
    my-project-apigee-logger.json       my-project-apigee-synchronizer.json
    my-project-apigee-mart.json         my-project-apigee-watcher.json
    my-project-apigee-metrics.json
    
    

非生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --non-prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 通过检查 service-accounts 目录的内容,验证是否已创建服务账号文件。您的输出应如下所示:
    ls $APIGEE_HELM_CHARTS_HOME/service-accounts/
    my-project-apigee-non-prod.json

适用于 GKE 的 WIF

使用以下命令为您的安装创建服务账号:

生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 使用以下命令验证 Google 服务账号的创建情况:
    gcloud iam service-accounts list --project $PROJECT_ID

    输出应类似如下所示:

    DISPLAY NAME                EMAIL                                                          DISABLED
    apigee-cassandra            apigee-cassandra@my-project.iam.gserviceaccount.com            False
    apigee-guardrails           apigee-guardrails@my-project.iam.gserviceaccount.com           False
    apigee-mart                 apigee-mart@my-project.iam.gserviceaccount.com                 False
    apigee-metrics              apigee-metrics@my-project.iam.gserviceaccount.com              False
    apigee-mint-task-scheduler  apigee-mint-task-scheduler@my-project.iam.gserviceaccount.com  False
    apigee-runtime              apigee-runtime@my-project.iam.gserviceaccount.com              False
    apigee-synchronizer         apigee-synchronizer@my-project.iam.gserviceaccount.com         False
    apigee-watcher              apigee-watcher@my-project.iam.gserviceaccount.com              False
    

非生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --non-prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 使用以下命令验证 Google 服务账号的创建情况:
    gcloud iam service-accounts list --project $PROJECT_ID

    输出应类似如下所示:

    DISPLAY NAME         EMAIL                                                   DISABLED
    apigee-non-prod      apigee-non-prod@my-project.iam.gserviceaccount.com      False
    

可选:您将不需要 Workload Identity Federation for GKE 的服务账号密钥文件。完成后,您可以删除 service-accounts 目录。

其他平台上的 WIF

使用以下命令为您的安装创建服务账号:

生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建每个服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 使用以下命令验证 Google 服务账号的创建情况:
    gcloud iam service-accounts list --project $PROJECT_ID

    输出应类似如下所示:

    DISPLAY NAME                EMAIL                                                          DISABLED
    apigee-cassandra            apigee-cassandra@my-project.iam.gserviceaccount.com            False
    apigee-guardrails           apigee-guardrails@my-project.iam.gserviceaccount.com           False
    apigee-mart                 apigee-mart@my-project.iam.gserviceaccount.com                 False
    apigee-metrics              apigee-metrics@my-project.iam.gserviceaccount.com              False
    apigee-mint-task-scheduler  apigee-mint-task-scheduler@my-project.iam.gserviceaccount.com  False
    apigee-runtime              apigee-runtime@my-project.iam.gserviceaccount.com              False
    apigee-synchronizer         apigee-synchronizer@my-project.iam.gserviceaccount.com         False
    apigee-watcher              apigee-watcher@my-project.iam.gserviceaccount.com              False
    

非生产

  1. 确保已定义 PROJECT_ID 环境变量。
    echo $PROJECT_ID

    create-service-account tool uses the value of thePROJECT_ID environment variable 。 如果未定义该变量,请使用您的 Google Cloud 项目 ID 定义它,或将 --project-id PROJECT_ID 标志添加到 create-service-account 命令。

  2. 使用以下命令创建服务账号,其中 $APIGEE_HELM_CHARTS_HOME 是您下载 Apigee Helm 图表的路径。系统可能会提示您创建服务账号。回复 y。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
      --non-prod \
      --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
  3. 使用以下命令验证 Google 服务账号的创建情况:
    gcloud iam service-accounts list --project $PROJECT_ID

    输出应类似如下所示:

    DISPLAY NAME         EMAIL                                                   DISABLED
    apigee-non-prod      apigee-non-prod@my-project.iam.gserviceaccount.com      False
    

可选:您将不需要 Workload Identity Federation for GKE 的服务账号密钥文件。完成后,您可以删除 service-accounts 目录。

如需详细了解服务账号和 create-service-account 工具,请参阅:

现在,您已经创建了服务账号并分配了 Apigee Hybrid 组件所需的角色。接下来,创建混合入站流量网关所需的 TLS 证书。

下一步

1 2 3 4 (下一步)第 5 步:设置服务账号验证 6 7 8 9 10 11