Paso 10 (opcional): Configura Workload Identity en GKE

GKE solo con Workload Identity: Configura Workload Identity

Sigue estos pasos si configuras el archivo de anulación para Workload Identity en GKE en el Paso 6: Configura el clúster.

Si no usas Workload Identity en GKE, continúa con la Parte 3: Paso 1: Expón la puerta de enlace de entrada de Apigee.

Cuentas de servicio de Google Cloud y cuentas de servicio de Kubernetes

Una cuenta de servicio de Google Cloud es un tipo especial de cuenta que se puede usar para realizar llamadas autorizadas a APIs mediante la autenticación como la cuenta de servicio. Las cuentas de servicio de Google Cloud pueden tener roles y permisos similares a los de un usuario individual. Cuando una aplicación se autentica como una cuenta de servicio, tiene acceso a todos los recursos a los que tiene acceso la cuenta de servicio. Si deseas obtener más información sobre las cuentas de servicio de Google Cloud, consulta Descripción general de las cuentas de servicio.

Creaste cuentas de servicio de Google Cloud para tu instalación de Apigee hybrid en el Paso 4: Crea cuentas de servicio. Apigee usa estas cuentas de servicio para autenticar los componentes híbridos.

Las cuentas de servicio de Kubernetes son similares a las cuentas de servicio de Google Cloud. Una cuenta de servicio de Kubernetes proporciona una identidad para los procesos que se ejecutan en un Pod y le permite autenticarse en el servidor de la API de manera similar a un usuario. Si deseas obtener más información sobre las cuentas de servicio de Kubernetes, consulta Configura cuentas de servicio para Pods.

La herramienta apigeectl creó la mayoría de las cuentas de servicio de Kubernetes que necesita Apigee hybrid cuando ejecutaste apigeectl apply en el procedimiento anterior.

Cuando configuras Workload Identity en GKE, asocia las cuentas de servicio de Google Cloud con las cuentas de servicio de Kubernetes en el clúster de Kubernetes. De esta manera, las cuentas de servicio de Kubernetes pueden actuar en nombre de las cuentas de servicio de Google Cloud y usar sus roles y permisos asignados para autenticarse con los componentes híbridos.

Sigue estas instrucciones para configurar Workload Identity para tu proyecto.

Prepárate para configurar Workload Identity

En estos procedimientos, se usan las siguientes variables de entorno. Verifica que estén definidas y define las que no lo están:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME

Aquí:

  • APIGEECTL_HOME es el directorio en el que instalaste apigeectl.
  • CLUSTER_LOCATION es la región (o zona) de tu clúster, por ejemplo, us-central1.
  • ENV_NAME es el nombre de tu entorno.
  • HYBRID_FILES es el directorio en el que creaste los directorios overrides y certs.
  • NAMESPACE es el espacio de nombres de Apigee.
  • PROJECT_ID es tu proyecto de Google Cloud.
  • ORG_NAME es el nombre de tu organización de Apigee.

  1. Verifica que la configuración actual de gcloud sea el ID de tu proyecto de Google Cloud con el siguiente comando:
    gcloud config get project
  2. Si es necesario, establece la configuración actual gcloud:

    gcloud config set project $PROJECT_ID
  3. Crea la cuenta de servicio apigee-cassandra-restore de Kubernetes:

    Cuando aplicaste la configuración mediante la ejecución de apigeectl apply, el comando creó la mayoría de las cuentas de servicio de Kubernetes necesarias para Workload Identity.

    Para crear la cuenta de servicio apigee-cassandra-restore de Kubernetes, ejecuta apigeectl apply con la marca --restore:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Verifica que Workload Identity esté habilitada para el clúster de GKE. Cuando creaste el clúster en el Paso 1: Crea un clúster, el paso 6 fue Habilitar Workload Identity. Para confirmar si Workload Identity está habilitado, ejecuta el siguiente comando:

    Clústeres regionales

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Clústeres zonales

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    El resultado debe tener el siguiente aspecto:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    Si, en cambio, ves null en los resultados, ejecuta el siguiente comando para habilitar Workload Identity en tu clúster:

    Clústeres regionales

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Clústeres zonales

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Habilita Workload Identity para cada grupo de nodos con los siguientes comandos. Esta operación puede demorar hasta 30 minutos por cada nodo:

    Clústeres regionales

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Clústeres zonales

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    En el ejemplo anterior, NODE_POOL_NAME es el nombre de cada grupo de nodos. En la mayoría de las instalaciones híbridas de Apigee, los dos grupos de nodos predeterminados se llaman apigee-data y apigee-runtime.

  6. Verifica que Workload Identity esté habilitada en tus grupos de nodos con los siguientes comandos:

    Clústeres regionales

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Clústeres zonales

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Deberías obtener un resultado similar al siguiente:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Obtén una lista de los nombres de las cuentas de servicio de Google Cloud para tu proyecto. Necesitarás estos nombres para asociar las cuentas de servicio de Kubernetes a fin de configurar Workload Identity. En el caso de las instalaciones que no son de producción, solo debe haber una cuenta de servicio de Google. Para las instalaciones de producción, debería haber ocho.

    Usa el siguiente comando para obtener la lista de nombres:

    gcloud iam service-accounts list --project $PROJECT_ID

    Deberías obtener un resultado similar al siguiente:

    No producción

    Para entornos que no son de producción, haz lo siguiente:

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

    Producción

    Para entornos que no son de producción, haz lo siguiente:

    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
    
  8. Obtén una lista de nombres de las cuentas de servicio de Kubernetes. Necesitarás esta lista de nombres para asociarlos con tus cuentas de servicio de Google Cloud más adelante en este procedimiento. Usa el siguiente comando:
    kubectl get sa -n $NAMESPACE

    El resultado debería ser similar al siguiente. Las cuentas de servicio de Kubernetes en negrita son las que deberás asociar con tus cuentas de servicio de Google Cloud:

    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
        

Configura Workload Identity

Usa el siguiente procedimiento a fin de habilitar Workload Identity para tu instalación de Hybrid:

  1. Para cada componente de Apigee, anota las cuentas de servicio de Kubernetes correspondientes con la cuenta de servicio de Google para el componente.

    En los siguientes pasos, se usan dos variables de entorno. Restablecerás los valores de estas variables antes de cada conjunto de comandos:

    • GSA_NAME: el nombre de una cuenta de servicio de Google. Estas son las cuentas de servicio que creaste con la herramienta de create-service-account en el Paso 4: Crear cuentas de servicio.
    • KSA_NAME: el nombre de una cuenta de servicio de Kubernetes. Estas son las cuentas que enumeraste antes con el comando kubectl get sa -n $NAMESPACE, por ejemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Configura Workload Identity para el componente 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

      No producción

      Configura la cuenta de servicio apigee-cassandra-backup de Kubernetes

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        El resultado debe tener una línea que describa la anotación, similar a la siguiente:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Configura la cuenta de servicio apigee-cassandra-restore de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-schema-setup de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por ejemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-schema-val de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por ejemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-user-setup de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por ejemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-datastore-default-sa de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      Configura la cuenta de servicio apigee-cassandra-backup de Kubernetes

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. El resultado debe tener una línea que describa la anotación, similar a la siguiente:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-restore de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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

      Configura la cuenta de servicio apigee-cassandra-schema-setup de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por ejemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:

        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-schema-val de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por ejemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-cassandra-user-setup de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por ejemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura la cuenta de servicio apigee-datastore-default-sa de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configura Workload Identity para el componente de Apigee Connect.

      No producción

      1. Define la variable de entorno KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por ejemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por ejemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configura Workload Identity para el componente MART.

      No producción

      1. Define la variable de entorno KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name-sa"
        por ejemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        por ejemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Métricas de Apigee

      Configura Workload Identity para el componente de métricas de Apigee.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Vincula el rol de IAM:
        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 \
        --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (nivel de organización)

      Configura Workload Identity para el componente UDCA a nivel de la organización.

      El UDCA se implementa a nivel de la organización y del entorno. Por lo tanto, existen dos cuentas de servicio diferentes de Kubernetes para el UDCA, una para cada permiso. Puedes distinguirlas por el nombre de la cuenta. La cuenta con permiso de entorno incluye el nombre del entorno en el nombre de la cuenta de servicio. Por ejemplo:

      • Nivel de organización: apigee-udca-my-project-id-123abcd-sa donde my-project-id es el ID del proyecto de nombre.
      • Nivel de entorno: apigee-udca-my-project-id-my-env-234bcde-sa donde my-env es el nombre del entorno.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-udca-service-account-name-sa"
        por ejemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
          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 \
            --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        por ejemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configura Workload Identity para el componente Watcher de Apigee.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        por ejemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        por ejemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Entorno de ejecución

      Configura Workload Identity para el componente Runtime de Apigee.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por ejemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por ejemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Sincronizador

      Configura Workload Identity para el componente Synchronizer.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por ejemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por ejemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (nivel de entorno)

      Configura Workload Identity para el componente UDCA a nivel de entorno.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por ejemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por ejemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Vincula el rol de IAM:
        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 \
          --project $PROJECT_ID
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Opcional: Borra los archivos de claves de la cuenta de servicio descargados.

    Si creaste las cuentas de servicio de Google con la herramienta de create-service-account, es posible que haya creado claves de cuenta de servicio y descargado los archivos de claves .json. Cuando usas Workload Identity en GKE, no necesitas estos archivos de claves.

    Puedes borrar los archivos de claves con el siguiente comando:

    rm $HYBRID_FILES/service-accounts/*.json

Verifica Workload Identity

  1. (Opcional) Puedes ver el estado de tus cuentas de servicio de Kubernetes en la página Descripción general de las cargas de trabajo de Kubernetes en la consola de Google Cloud.

    Ir a Cargas de trabajo

  2. Para volver a verificar el estado de la implementación con apigeectl check-ready, haz lo siguiente:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(SIGUIENTE) Paso 1: Expón la entrada de Apigee 2