En este tema se explica cómo habilitar Workload Identity para Apigee hybrid mediante apigeectl
.
Si usas gráficos de Helm para instalar y gestionar Apigee hybrid, consulta Habilitar Workload Identity con gráficos de Helm.
Información general
Workload Identity es una forma de que las aplicaciones que se ejecutan en GKE (Google Kubernetes Engine) accedan a los servicios de Google Cloud. Para ver información general sobre Workload Identity, consulta los siguientes artículos:
- Presentamos Workload Identity: una mejor autenticación para tus aplicaciones de GKE
- Usar Workload Identity
Una cuenta de servicio de gestión de identidades y accesos (IAM) de Google Cloud es una identidad que puede usar una aplicación para enviar solicitudes a las APIs de Google. En el documento, estas cuentas de servicio se denominan "cuentas de servicio de Google" (GSA). Para obtener más información sobre las cuentas de servicio, consulta el artículo Cuentas de servicio.
Por otra parte, Kubernetes también tiene el concepto de cuentas de servicio. Una cuenta de servicio proporciona una identidad a los procesos que se ejecutan en un pod. Las cuentas de servicio de Kubernetes son recursos de Kubernetes, mientras que las cuentas de servicio de Google son específicas de Google Cloud. Para obtener información sobre las cuentas de servicio de Kubernetes, consulta el artículo Configurar cuentas de servicio para pods de la documentación de Kubernetes.
En Apigee hybrid 1.4 y versiones posteriores, Apigee crea y usa una cuenta de servicio de Kubernetes para cada tipo de componente. Habilitar Workload Identity permite que los componentes híbridos interactúen con las cuentas de servicio de Kubernetes.
Cuentas de servicio de Google en Apigee Hybrid sin Workload Identity
Si no usas Workload Identity, debes vincular las cuentas de servicio de Google a cada componente del archivo overrides.yaml con una referencia a un archivo de certificado o a un secreto de Kubernetes. Por ejemplo:
- Archivos de certificado:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Consulta los siguientes artículos:
- Secreto de Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
Consulta los siguientes artículos:
Variables de entorno usadas en estos procedimientos
En estos procedimientos se usan las siguientes variables de entorno. Puedes definir estos valores en tu shell de comandos o sustituirlos por los valores reales en los ejemplos de código:
APIGEECTL_HOME
: el directorio en el que has instaladoapigeectl
.CLUSTER_LOCATION
: la región o zona de tu clúster. Por ejemplo,us-west1
.ENV_NAME
: nombre del entorno de Apigee.HYBRID_FILES
: tu directorio de archivos híbrido. Por ejemplo,hybrid-base-directory/hybrid-files
.ORG_NAME
: el nombre de tu organización de Apigee.PROJECT_ID
: el ID de tu proyecto de Google Cloud.NAMESPACE
: tu espacio de nombres de Apigee (normalmente, "apigee").
Verifica las variables de entorno:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES
Inicializa las variables que necesites:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files
Workload Identity y archivos de claves de cuentas de servicio
Cuando se ejecuta Apigee hybrid en GKE, lo habitual es crear y descargar claves privadas (archivos .json
) para cada una de las cuentas de servicio. Cuando se usa Workload Identity, no es necesario descargar claves privadas de cuentas de servicio ni añadirlas a los clústeres de GKE.
Si has descargado archivos de claves de cuentas de servicio como parte de la instalación de Apigee hybrid, puedes eliminarlos después de habilitar Workload Identity. En la mayoría de las instalaciones, se encuentran en el directorio hybrid-base-directory/hybrid-files/service-accounts/
.
Habilitar Workload Identity en Apigee hybrid
Para empezar, sigue las instrucciones de Preparar la habilitación de Workload Identity para actualizar los grupos de nodos e inicializar las variables antes de habilitar Workload Identity.
A continuación, sigue las instrucciones de Configurar workloadIdentityEnabled: true
y crear cuentas de servicio para habilitar Workload Identity en tu instalación de Apigee hybrid.
Preparar la habilitación de Workload Identity
Antes de iniciar el proceso de instalación, sigue los pasos que se indican en esta sección.
- Selecciona el proyecto que vas a modificar:
gcloud config set project $PROJECT_ID
-
Obtén las credenciales
gcloud
del clúster en el que vas a habilitar Workload Identity con el siguiente comando:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID}
- Verifica que Workload Identity esté habilitado en el clúster de GKE que ejecuta Apigee con el siguiente comando:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
El resultado debería incluir algo parecido a lo siguiente:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Si es necesario, habilita Workload Identity en el clúster. Esta operación puede tardar hasta 30 minutos:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Para obtener más información, consulta Habilitar Workload Identity.
- Comprueba que Workload Identity esté habilitado en cada grupo de nodos.
- Consulta tus grupos de nodos con el siguiente comando:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
La salida debería tener un aspecto similar a este:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION apigee-runtime e2-standard-4 100 1.23.12-gke.100 apigee-data e2-standard-4 100 1.23.12-gke.100
- Asegúrate de que Workload Identity esté habilitado en cada grupo de nodos mediante el siguiente comando:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Donde NODE_POOL_NAME es el nombre de cada grupo de nodos.
- Consulta tus grupos de nodos con el siguiente comando:
Verificar o crear cuentas de servicio de Google
Las cuentas de servicio de Google se crean para muchos componentes de Apigee hybrid durante la instalación. Sigue este procedimiento para verificar las cuentas de servicio de Google y crear las que necesites.
- Consulta los nombres de las cuentas de servicio de Google de tu proyecto con el siguiente comando:
gcloud iam service-accounts list --project $PROJECT_ID
La salida debería tener un aspecto similar a este:
Producción
En entornos que no sean de producción:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
No producción
En entornos que no sean de producción:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Si necesitas crear las cuentas de servicio de Google para tu proyecto, puedes usar dos métodos:
- Usa la herramienta
create-service-account
incluida con apigee en el directorioapigeectl/tools/
. Esta herramienta puede crear todas las cuentas de servicio con un solo comando o permitirte crearlas individualmente. - Usa el comando
gcloud iam service-accounts create
para crear las cuentas de servicio una a una y el comandogcloud projects add-iam-policy-binding
para asignar los roles adecuados a cada cuenta de servicio. Con este método, debe crear cada cuenta de servicio individualmente, pero no tiene que descargar los archivos de claves.
Usa el siguiente comando para crear una cuenta de servicio de Google por componente:create-service-account
Producción
En entornos que no sean de producción:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Este comando creará las siguientes cuentas de servicio:
apigee-cassandra
apigee-logger
apigee-mart
apigee-metrics
apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
No producción
En entornos que no sean de producción:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Este comando creará una sola cuenta de servicio,
apigee-non-prod
, con todos los roles asignados necesarios para gestionar todos los componentes de Apigee.gcloud
Crea las siguientes cuentas de servicio y asígnales roles.
- Cuenta de servicio:
apigee-cassandra
, rol:roles/storage.objectAdmin
Crea la cuenta:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
- Cuenta de servicio:
apigee-logger
, rol:roles/logging.logWriter
Crea la cuenta:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- Cuenta de servicio:
apigee-mart
, rol:roles/apigeeconnect.Agent
Crea la cuenta:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent"
- Cuenta de servicio:
apigee-metrics
, rol:roles/monitoring.metricWriter
Crea la cuenta:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
- Cuenta de servicio:
apigee-runtime
, rol: Ningún rol asignado.Crea la cuenta:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID
- Cuenta de servicio:
apigee-synchronizer
, rol:roles/apigee.synchronizerManager
Crea la cuenta:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager"
- Cuenta de servicio:
apigee-udca
, rol:roles/apigee.analyticsAgent
Crea la cuenta:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent"
- Cuenta de servicio:
apigee-watcher
, rol:roles/apigee.runtimeAgent
Crea la cuenta:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_ID
Asigna el rol:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- Usa la herramienta
Definir workloadIdentityEnabled: true
y crear cuentas de servicio
apigeectl
crea cuentas de servicio de Kubernetes para cada componente de Apigee hybrid
cuando defines workloadIdentityEnabled: true
en tu archivo de anulaciones y aplicas los
cambios.
- Añade la línea en negrita que aparece a continuación al archivo
overrides.yaml
, en la estrofagcp
. De esta forma, se habilita Workload Identity en tu instalación y se activaapigeectl
para crear las cuentas de servicio de Kubernetes cuando apliques la configuración:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- Añade las líneas en negrita que se muestran a continuación al archivo
overrides.yaml
, en la estrofacassandra
. De esta forma, se crea la cuenta de servicio de Kubernetes:apigee-cassandra-backup
cassandra: ... backup: enabled: true
- Aplica los cambios con
apigeectl
con la marca--restore
:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- Verifica las cuentas de servicio con el siguiente comando:
kubectl get sa -n $NAMESPACE
La salida debería tener un aspecto similar al siguiente. Las cuentas de servicio de Kubernetes en negrita son las que tendrás que anotar con tus cuentas de servicio de Google:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Anotar las cuentas de servicio de Kubernetes con las cuentas de servicio de Google
En cada componente de Apigee, anota las cuentas de servicio de Kubernetes correspondientes con la cuenta de servicio de Google del componente.
Componentes a nivel de organización
Solo tendrás una instancia de cada cuenta de servicio de Kubernetes para tu organización de Apigee.
Componente | Cuenta de servicio de Kubernetes | Cuenta de servicio de Google |
---|---|---|
Cassandra | apigee-cassandra-backup |
apigee-cassandra |
apigee-cassandra-restore |
apigee-cassandra |
|
apigee-cassandra-schema-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-cassandra-schema-val-my-project-id-num-id1 |
apigee-cassandra |
|
apigee-cassandra-user-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-datastore-default-sa |
apigee-cassandra |
|
Apigee Connect | apigee-connect-agent-my-project-id-num-id1-sa |
apigee-mart |
MART | apigee-mart-my-project-id-num-id1-sa |
apigee-mart |
Métricas | apigee-metrics-sa |
apigee-metrics |
UDCA (nivel de organización) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Componentes a nivel de entorno
Tendrás una instancia de cada cuenta de servicio de Kubernetes por cada entorno de Apigee.
Componente | Cuenta de servicio de Kubernetes | Cuenta de servicio de Google |
---|---|---|
Entorno de ejecución de Apigee | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
Sincronizador | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
UDCA (a nivel de entorno) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
En los siguientes comandos, usa los nombres de las cuentas de servicio de Kubernetes devueltos por el comando kubectl get sa -n $NAMESPACE
. Por ejemplo:
apigee-cassandra-schema-val-hybrid-example-project-123abcd
.
En este procedimiento, para cada cuenta de servicio de Kubernetes, debes hacer lo siguiente:
-
Vincula la cuenta de servicio de Kubernetes y la cuenta de servicio de Google principal al rol de gestión de identidades y accesos
roles/iam.workloadIdentityUser
. - Anota la cuenta de servicio de Kubernetes con la cuenta de servicio de Google.
- Vincula los roles y anota las cuentas de servicio.
Componentes a nivel de organización
Anota las cuentas de servicio de Kubernetes de los componentes a nivel de organización. Deberás hacerlo una vez por cada componente de tu organización de Apigee.
- Cassandra
El componente Cassandra tiene seis cuentas de servicio de Kubernetes asociadas:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= validación)apigee-cassandra-user-setup
apigee-datastore-default
Producción
apigee-cassandra-backup
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup
" - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
apigee-cassandra-backup
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name
" - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-connect-agent-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- MART
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-mart-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- Métricas de Apigee
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-metrics-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- UDCA (nivel de organización)
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define las variables de entorno
KSA_NAME
:KSA_NAME="apigee-udca-org-level-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- Apigee Watcher
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-watcher-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
En cada entorno:
- Tiempo de ejecución
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-runtime-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- Sincronizador
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-synchronizer-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- UDCA (nivel de entorno)
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
No producción
- Define la variable de entorno
KSA_NAME
:KSA_NAME="apigee-udca-env-level-service-account-name"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Define las variables de entorno
- Cassandra
- Valida si los pasos han funcionado:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Si no ves el símbolo del sistema, prueba a pulsar Intro.
Si has seguido los pasos correctamente, deberías ver una respuesta como la siguiente:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Si vas a actualizar una instalación anterior, elimina los secretos que contengan claves privadas de cuentas de servicio:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Comprueba los registros:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
- (Opcional) Puedes ver el estado de tus cuentas de servicio de Kubernetes en la página Kubernetes: Información general de las cargas de trabajo de la Google Cloud console.