Usar la autenticación de Google

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En este tema se explica cómo configurar e implementar un proxy de API que esté configurado para usar la autenticación de Google.

Introducción

Apigee admite el uso de tokens de OAuth de Google o tokens de OpenID Connect para autenticarte en servicios de Google como Cloud Logging y Secret Manager, así como en servicios personalizados que se ejecutan en determinados Google Cloud productos, como Cloud Functions y Cloud Run.

Para usar esta función, debes configurar el elemento <Authentication> XML en uno de los siguientes contextos:

  • Políticas de AssignMessage
  • Políticas ServiceCallout
  • Políticas ExternalCallout
  • Configuraciones de TargetEndpoint

Después de completar algunos pasos de configuración básicos (como se describe en este tema), Apigee genera el token y hace llamadas seguras a los servicios de Google o a los servicios alojados personalizados que elijas, sin que tengas que definir manualmente los encabezados de autenticación ni modificar de otro modo una solicitud de servicio. Desde el punto de vista de un desarrollador de APIs, el proceso de llamar a los servicios de Google desde un proxy de API configurado correctamente se gestiona sin problemas.

Opciones de configuración de proxies de APIs

En esta sección se explica dónde puede usar el elemento XML <Authentication> para habilitar la autenticación con token de OAuth de Google u OpenID Connect:

Opción de configuración Descripción
Política AssignMessage La política AssignMessage te permite añadir los encabezados necesarios para la autenticación de Google y la inyección de tokens. Para ver ejemplos y detalles de uso, consulta la política AssignMessage.
Política ServiceCallout La política ServiceCallout te permite llamar a otros servicios internos o externos desde un proxy de API. Por ejemplo, ServiceCallout puede llamar a servicios de Google externos o a servicios alojados personalizados. Para obtener información detallada sobre el uso y ejemplos, consulta la política ServiceCallout.
Política ExternalCallout La política ExternalCallout te permite enviar solicitudes gRPC a tu servidor gRPC para implementar un comportamiento personalizado que no admiten las políticas de Apigee. Para obtener información sobre el uso y ejemplos, consulta la política ExternalCallout.
TargetEndpoint Especifica un servicio de Google o un servicio alojado personalizado como endpoint de destino de un proxy de APIs. Para obtener información detallada sobre el uso y ejemplos, consulta la referencia de configuración de proxies de APIs.

Contextos admitidos de tokens de autenticación de Google

El elemento <Authentication> tiene dos configuraciones de subelementos: <GoogleAccessToken> o <GoogleIDToken>. En la siguiente tabla se muestran los contextos en los que se admiten estos elementos:

Utilizada en GoogleAccessToken GoogleIDToken
Política AssignMessage Compatible Compatible
Política ServiceCallout Compatible Compatible
Política de ExternalCallout No se admite Compatible
TargetEndpoint Compatible Compatible

Pasos de la implementación

En esta sección se explica cómo implementar un proxy de API que use la autenticación de Google para llamar a servicios de Google específicos o a servicios alojados personalizados. Explicamos los pasos de implementación de Apigee y Apigee Hybrid por separado.

Desplegar en Apigee

En los siguientes pasos se explica cómo desplegar un proxy de API en Apigee, donde el proxy está configurado para hacer llamadas autenticadas a servicios de Google o a servicios alojados personalizados. En los pasos se presupone que ya has creado el proxy y que incluye un elemento <Authentication> en uno de los contextos admitidos que se indican.

  1. Crea una cuenta de servicio de Google en el mismo proyecto Google Cloud en el que se creó tu organización de Apigee. Debes proporcionar el nombre de esta cuenta de servicio cuando implementes un proxy de API configurado para usar la autenticación de Google. Los tokens de OAuth que se generen representarán la cuenta de servicio. Puedes crear la cuenta de servicio en la Google Cloud consola o con el comando gcloud. Consulta el artículo Crear y gestionar cuentas de servicio.
  2. Concede al usuario que vaya a hacer la implementación (el implementador) el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta también Información sobre los permisos de las cuentas de servicio.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  3. Donde:

    • PROJECT_ID: el ID del proyecto. El ID es el mismo que el nombre de tu organización.
    • SA_NAME: el nombre que proporcionaste al crear la cuenta de servicio.
    • MEMBER: el miembro al que se va a añadir la vinculación. Debe tener el formato user|group|serviceAccount:email o domain:domain.
  4. Concede a la cuenta de servicio los permisos necesarios para comunicarse con los servicios de Google a los que te diriges. Por ejemplo, si quieres llamar al servicio de registro de Google, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Descripción de los roles.
  5. Antes de implementar un proxy de API configurado para usar la autenticación de Google, necesitas lo siguiente:
    • El nombre de la cuenta de servicio que has creado anteriormente. Por ejemplo: SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    • Como usuario que realiza el despliegue, debes tener o recibir el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta cómo conceder, cambiar y revocar el acceso a los recursos.
  6. Despliega el proxy de API que contiene la configuración de autenticación de Google que has implementado. Puedes usar la interfaz de usuario o la API de Apigee para desplegar el proxy. Para obtener más información, consulta Desplegar un proxy de API.
    • Si usas la interfaz de usuario, se te pedirá que proporciones el nombre de una cuenta de servicio. Usa el nombre de la cuenta de servicio proxy que has creado en el paso 1. Por ejemplo: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • Si prefieres desplegar el proxy con la API de implementación de Apigee, aquí tienes un ejemplo de comando cURL que puedes usar. Ten en cuenta que el comando incluye el nombre de una cuenta de servicio como parámetro de consulta. Este es el nombre de la cuenta de servicio que has creado en el paso 1:
      curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      -H "Content-Type: application/json" -X POST

      Donde:

      • TOKEN: un token de OAuth que debes obtener a cambio de tus credenciales de Google. Para obtener más información, consulta el artículo Obtener un token de acceso OAuth 2.0.
      • ORG_NAME: nombre de tu organización de Apigee.
      • ENV_NAME: nombre del entorno en el que se va a implementar el proxy de API.
      • SA_NAME: El nombre que proporcionaste al crear la cuenta de servicio.
      • PROJECT_ID: tu ID de proyecto Google Cloud (el mismo que el nombre de la organización).
  7. Cuando se complete la implementación, prueba tu proxy de API para asegurarte de que el servicio de Google devuelve la respuesta esperada.

Desplegar en Apigee hybrid

En los siguientes pasos se explica cómo desplegar en Apigee hybrid un proxy de API configurado para hacer llamadas autenticadas a servicios de Google. En los pasos se presupone que ya has creado el proxy y que incluye un elemento <Authentication> en uno de los contextos admitidos que se indican.

  1. Crea una cuenta de servicio y una clave para el componente de tiempo de ejecución de Apigee hybrid mediante uno de los siguientes métodos:
    • Usa la herramienta create-service-account que se proporciona con Apigee hybrid para crear una cuenta de servicio apigee-runtime. La herramienta crea la cuenta de servicio y devuelve una clave de cuenta de servicio. Consulta el artículo sobre cómo crear una cuenta de servicio para obtener más información.
    • Crea la cuenta de servicio en la Google Cloud consola o con el comando gcloud. Consulta el artículo Crear y gestionar cuentas de servicio. Para obtener la clave de la cuenta de servicio, consulta el artículo Crear y gestionar claves de cuentas de servicio.
  2. Abre el archivo overrides.yaml y especifica la ruta al archivo de clave de la cuenta de servicio para cada entorno que requiera la función de autenticación de Google:
    envs:
      - name: "ENVIRONMENT_NAME"
        serviceAccountPaths:
          runtime: "KEY_FILE_PATH"

    Por ejemplo:

    envs:
      - name: "test"
        serviceAccountPaths:
          runtime: "./service_accounts/my_runtime_sa.json"
  3. Aplica el archivo de anulaciones a tu clúster con Helm:
    helm upgrade ENV_NAME apigee-env/ \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      --atomic \
      -f overrides.yaml
  4. Crea una segunda cuenta de servicio, a la que llamaremos cuenta de servicio proxy. Esta cuenta de servicio debe estar en el mismo proyecto de Google Cloudque usaste para crear tu organización de Apigee. Debes proporcionar la dirección de correo de esta cuenta de servicio cuando implementes un proxy de API configurado para usar la autenticación de Google. Los tokens de OAuth que se generen representarán a la cuenta de servicio.
  5. Concede al usuario que vaya a hacer la implementación (el implementador) el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta también Información sobre los permisos de las cuentas de servicio.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  6. Donde:

    • PROJECT_ID: el ID del proyecto. El ID es el mismo que el nombre de tu organización.
    • SA_NAME: el nombre que proporcionaste al crear la cuenta de servicio.
    • MEMBER: el miembro al que se va a añadir la vinculación. Debe tener el formato user|group|serviceAccount:email o domain:domain.
  7. Concede a la cuenta de servicio proxy los permisos necesarios para comunicarse con los servicios de Google de destino. Por ejemplo, si quieres llamar al servicio de registro de Google, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Descripción de los roles.
  8. Asegúrate de que el tiempo de ejecución pueda suplantar la identidad de la cuenta de servicio proxy. Para proporcionar esta función, asigna el rol iam.serviceAccountTokenCreator a la cuenta de servicio runtime en la cuenta de servicio proxy. Consulta también Información sobre los permisos de las cuentas de servicio. Por ejemplo:
    gcloud iam service-accounts add-iam-policy-binding \
    PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/iam.serviceAccountTokenCreator
    

    Donde:

    • PROJECT_ID: el ID del proyecto. El ID es el mismo que el nombre de tu organización. Ten en cuenta que no has tenido que usar el proyecto asociado a tu organización para crear la cuenta de servicio de tiempo de ejecución. Asegúrate de usar los IDs de proyecto correctos en este comando.
    • PROXY_SA_NAME: el ID de la cuenta de servicio proxy.
    • RUNTIME_SA_NAME: ID de la cuenta de servicio runtime.
  9. Antes de implementar un proxy de API configurado para usar la autenticación de Google, necesitas lo siguiente:
    • El nombre de la cuenta de servicio proxy que has creado anteriormente. Por ejemplo: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    • Como usuario que realiza la implementación, ya debes tener o se te debe conceder el permiso iam.serviceAccounts.actAs en el Google Cloud proyecto en el que se aprovisiona la organización de Apigee. Consulta Conceder, cambiar y revocar el acceso a los recursos.
  10. Despliega el proxy de API que contiene la configuración de autenticación de Google que has implementado. Puedes usar la interfaz de usuario o la API de Apigee para desplegar el proxy. Para obtener más información, consulta Desplegar un proxy de API.
    • Si usas la interfaz de usuario, se te pedirá que proporciones el nombre de una cuenta de servicio. Usa el nombre de la cuenta de servicio proxy que has creado anteriormente. Por ejemplo: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • Si prefieres desplegar el proxy con la API de implementación de Apigee, aquí tienes un ejemplo de comando cURL que puedes usar. Ten en cuenta que el comando incluye el nombre de una cuenta de servicio como parámetro de consulta. Este es el nombre de la cuenta de servicio proxy:
      curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      -H "Content-Type: application/json" -X POST

      Donde:

      • TOKEN: un token de OAuth que debes obtener a cambio de tus credenciales de Google. Para obtener más información, consulta el artículo Obtener un token de acceso OAuth 2.0.
      • ORG_NAME: nombre de tu organización de Apigee.
      • ENV_NAME: nombre del entorno en el que se va a implementar el proxy de API.
      • PROXY_SA_NAME: nombre de la cuenta de servicio proxy.
      • PROJECT_ID: tu ID de proyecto Google Cloud (el mismo que el nombre de la organización).
  11. Cuando se complete la implementación, prueba tu proxy de API para asegurarte de que el servicio de Google devuelve la respuesta esperada.

Información sobre los permisos de las cuentas de servicio

Para configurar un proxy de API de forma que use la autenticación de Google, debes crear una cuenta de servicio tal como se describe en la siguiente tabla. Consulta también el artículo Crear y gestionar cuentas de servicio.

Cuenta de servicio Obligatorio para Descripción
Proxy Apigee y Apigee Hybrid

Tiene los permisos necesarios para que un proxy de API haga llamadas autenticadas a servicios de Google específicos.

  • Debe crearse en el mismo Google Cloud proyecto que tu organización de Apigee.
  • El usuario que realice la implementación (el implementador) debe tener o se le debe conceder el permiso iam.serviceAccounts.actAs en la cuenta de servicio proxy.
  • Debe incluir los permisos necesarios para comunicarse con servicios de Google específicos. Por ejemplo, si quieres llamar al servicio de registro de Google, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Descripción de los roles.
  • Debes indicar el nombre de la cuenta de servicio al implementar el proxy que usa la autenticación de Google.
Tiempo de ejecución Solo Apigee Hybrid

Permite que el tiempo de ejecución de Apigee genere tokens para autenticarse en los servicios de Google solicitados por un proxy de API. Esta cuenta de servicio "suplanta" la cuenta de servicio específica del proxy para hacer llamadas autenticadas en su nombre.

  • Para poder suplantar la identidad de la cuenta de servicio proxy y crear tokens, se debe asignar el rol roles/iam.serviceAccountTokenCreator a la cuenta de servicio runtime en la cuenta de servicio proxy. Consulta Gestionar el acceso a cuentas de servicio.