第 4 步:创建服务账号

此步骤介绍如何创建 Apigee Hybrid 运行所需的 Google Cloud 服务账号。

概览

Apigee Hybrid 使用 Google Cloud 服务账号来允许 Hybrid 组件通过授权的 API 调用进行通信。

生产环境与非生产环境

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

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

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

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

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

GKE 上的 Workload Identity

对于 GKE 上的 Apigee Hybrid 安装,Google Cloud 提供了一个名为 Workload Identity 的选项,用于对 Hybrid 运行时组件进行身份验证。此选项不使用下载的证书文件对服务账号进行身份验证,而是将您在此步骤中创建的 Google Cloud 服务账号与 Kubernetes 集群中的 Kubernetes 服务账号相关联。

Workload Identity 仅适用于 GKE 安装。

创建服务账号

按照以下步骤为 Hybrid 安装创建 Google Cloud 服务账号:

  • create-service-account 工具:如果您在非 GKE 平台上安装 Apigee Hybrid,或者在 GKE 上安装但不想使用 Workload Identity,请使用 Apigee 提供的工具 create-service-account,在一个命令中创建服务账号、将角色分配给服务账号以及创建和下载服务账号的密钥文件。请按照
    使用 create-service-account 创建服务账号中的步骤操作。
  • Google Cloud 控制台或 gcloud:如果您在 GKE 上安装 Apigee Hybrid 并计划使用 Workload Identity,请使用 Google Cloud 控制台或 gcloud 创建服务账号,无需下载证书文件。请按照
    在 Google Cloud 控制台中或使用 gcloud 创建服务账号中的步骤操作。

使用 create-service-account 创建服务账号

在以下情况下使用 create-service-account 工具:

  • 您在 GKE 以外的平台上安装
  • 您在 GKE 上安装,但不打算使用 Workload Identity。

否则,请跳至在 Google Cloud 控制台中或使用 gcloud 创建服务账号

  1. 确保已设置 HYBRID_FILENAMEPROJECT_ID 环境变量。

    PROJECT_ID 必须设置为您的 Google Cloud 项目 ID,因为 create-service-account 工具会读取 PROJECT_ID 环境变量以在正确的项目中创建服务账号。

    echo $HYBRID_FILES
    echo $PROJECT_ID
  2. 使用以下命令创建服务账号:

    非生产

    此命令会创建一个用于非生产安装的名为 apigee-non-prod 的服务账号,并将服务账号的密钥文件下载到 $HYBRID_FILES/service-accounts 目录中。

    $HYBRID_FILES/tools/create-service-account --env non-prod --dir $HYBRID_FILES/service-accounts

    生产环境

    此命令会为生产安装创建所有单独的服务账号,并将服务账号的密钥文件下载到 $HYBRID_FILES/service-accounts 目录中。

    $HYBRID_FILES/tools/create-service-account --env prod --dir $HYBRID_FILES/service-accounts

    当您看到以下提示时,请输入 y

    [INFO]: gcloud configured project ID is project_id.
     Enter: y to proceed with creating service account in project: project_id
     Enter: n to abort.

    如果这是您第一次创建特定服务账号,则该工具会在没有进一步提示的情况下创建该账号。

    但是,如果您看到以下消息和提示,请输入 y 以生成新的密钥:

    [INFO]: Service account apigee-non-prod@project_id.iam.gserviceaccount.com already exists.
    ...
     [INFO]: The service account might have keys associated with it. It is recommended to use existing keys.
     Press: y to generate new keys.(this does not deactivate existing keys)
     Press: n to skip generating new keys.
  3. 使用以下命令验证是否已创建服务账号密钥。您需要确保安全地存储这些私钥。密钥文件名以您的 Google Cloud 项目的名称为前缀。
    ls $HYBRID_FILES/service-accounts

    结果应该类似如下所示:

    project_id-apigee-non-prod.json

在 Google Cloud 控制台中或使用 gcloud 创建服务账号

如果您打算在 GKE 上使用 Workload Identity 对 Hybrid 运行时组件进行身份验证,则无需为服务账号创建和下载证书文件。因此,请勿使用 create-service-account 工具。请改为在 Google Cloud 控制台中或使用 gcloud 中的 IAM API 创建服务账号。

否则,请跳至使用 create-service-account 创建服务账号

控制台

按照创建服务账号中的说明创建以下服务账号并为其分配以下角色:

非生产

对于非生产安装:

服务账号名称 IAM 角色
apigee-non-prod
  • Apigee Analytics Agent
  • Apigee Connect Agent
  • Apigee Runtime Agent
  • Apigee Synchronizer Manager
  • 日志写入者
  • Monitoring Metric Writer
  • Storage Object Admin

生产

对于生产安装:

生产安装
服务账号名称 IAM 角色
apigee-cassandra Storage Object Admin
apigee-logger 日志写入者
apigee-mart Apigee Connect Agent
apigee-metrics Monitoring Metric Writer
apigee-runtime 无需角色
apigee-synchronizer Apigee Synchronizer Manager
apigee-udca Apigee Analytics Agent
apigee-watcher Apigee Runtime Agent

gcloud

使用以下命令创建服务账号并分配 IAM 角色。

非生产

对于非生产安装:

  1. 创建 apigee-non-prod 服务账号:
    gcloud iam service-accounts create apigee-non-prod \
      --display-name="apigee-non-prod" \
      --project=$PROJECT_ID
  2. 向服务账号分配 IAM 角色:
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectAdmin"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigeeconnect.Agent"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.synchronizerManager"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.analyticsAgent"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.runtimeAgent"
  3. 验证角色绑定:
    gcloud projects get-iam-policy ${PROJECT_ID} \
      --flatten="bindings[].members" \
      --format='table(bindings.role)' \
      --filter="bindings.members:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com"

生产

对于生产安装:

使用以下命令创建每个服务账号并分配相应的 IAM 角色。

  1. apigee-cassandra 服务账号:
    gcloud iam service-accounts create apigee-cassandra \
      --display-name="apigee-cassandra" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectAdmin"
  2. apigee-logger 服务账号:
    gcloud iam service-accounts create apigee-logger \
      --display-name="apigee-logger" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
  3. apigee-mart 服务账号:
    gcloud iam service-accounts create apigee-mart \
      --display-name="apigee-mart" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigeeconnect.Agent"
  4. apigee-metrics 服务账号:
    gcloud iam service-accounts create apigee-metrics \
      --display-name="apigee-metrics" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
  5. apigee-runtime 服务账号:
    gcloud iam service-accounts create apigee-runtime \
      --display-name="apigee-runtime" \
      --project=$PROJECT_ID
  6. apigee-synchronizer 服务账号:
    gcloud iam service-accounts create apigee-synchronizer \
      --display-name="apigee-synchronizer" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.synchronizerManager"
  7. apigee-udca 服务账号:
    gcloud iam service-accounts create apigee-udca \
      --display-name="apigee-udca" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.analyticsAgent"
  8. apigee-watcher 服务账号:
    gcloud iam service-accounts create apigee-watcher \
      --display-name="apigee-watcher" \
      --project=$PROJECT_ID
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/apigee.runtimeAgent"

如需详细了解如何使用 gcloud 创建服务账号,请参阅创建服务账号

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

1 2 3 4 (下一步)第 5 步:创建 TLS 证书 6 7 8 9 10 11