Usa 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 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 autenticar con servicios de Google, como Cloud Logging, Secret Manager y servicios personalizados que se ejecutan en ciertos productos de Google Cloud, como Cloud Functions y Cloud Run.

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

  • Políticas ServiceCallout
  • Políticas ExternalCallout
  • Parámetros de configuración de TargetEndpoint

Después de completar algunos pasos de configuración básicos (como se describe en este tema), Apigee realiza la generación de tokens y las llamadas seguras a los servicios de Google orientados o a los servicios personalizados alojados, sin necesidad de configurar manualmente los encabezados de autenticación; de lo contrario, modifica una solicitud de servicio. Desde la perspectiva de un desarrollador de API, el proceso de llamar a los servicios de Google desde un proxy de API configurado de forma adecuada se controla sin problemas.

Opciones de configuración del proxy de API

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

Opción de configuración Descripción
Política ServiceCallout La política ServiceCallout te permite llamar a otros servicios internos o externos desde un proxy de API. Por ejemplo, puedes usar ServiceCallout para llamar a servicios de Google externos o servicios personalizados alojados. Para obtener detalles de 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 sea compatible con las políticas Apigee. Para obtener detalles de uso y ejemplos, consulta la Política ExternalCallout.
TargetEndpoint Especifica un servicio de Google o un servicio alojado personalizado como un extremo de destino del proxy de API. Para obtener detalles de uso y ejemplos, consulta la referencia de la configuración del proxy de API.

Contextos admitidos del token 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:

Se usa en GoogleAccessToken GoogleIDToken
Política ServiceCallout Admitido Admitido
Política ExternalCallout No compatible Admitido
TargetEndpoint Admitido Admitido

Pasos para la implementación

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

Implementa en Apigee

En los siguientes pasos, se explica cómo implementar un proxy de API en Apigee, en el que el proxy está configurado para realizar llamadas autenticadas a servicios de Google o servicios personalizados alojados. En los pasos se supone que ya creaste el proxy y que incluye un elemento <Authentication> en uno de los contextos admitidos enumerados.

  1. Crea una cuenta de servicio de Google en el mismo proyecto de 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, y los tokens de OAuth que se generen representarán la cuenta de servicio. Puedes crear la cuenta de servicio en la consola de Google Cloud o con el comando de gcloud. Consulta Crea y administra cuentas de servicio.
  2. Otorga al usuario que realizará la implementación (el implementador), el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta también Acerca de los permisos de la cuenta de servicio.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  3. Aquí:

    • PROJECT_ID: Es el ID del proyecto El ID es el mismo que el nombre de la organización.
    • SA_NAME: Es el nombre que proporcionaste cuando creaste la cuenta de servicio.
    • MEMBER: Es el miembro al que se agregará la vinculación. Debe tener la forma user|group|serviceAccount:email o domain:domain.
  4. Otorga los permisos necesarios a la cuenta de servicio para comunicarse con los servicios de Google de destino. Por ejemplo, si deseas llamar al servicio de Google Logging, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Información sobre las funciones.
  5. Antes de implementar un proxy de API que está configurado para usar la autenticación de Google, necesitas lo siguiente:
    • El nombre de la cuenta de servicio que creaste antes. Por ejemplo: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
    • Como usuario que realiza la implementación (el implementador), ya debes tener el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta Otorga, cambia y revoca el acceso a recursos.
  6. Implementa el proxy de API que contiene la configuración de autenticación de Google que implementaste. Puedes usar la IU o la API de Apigee para implementar el proxy. Para obtener más información, consulta Implementa un proxy de API.
    • Si usas la IU, se te pedirá que proporciones un nombre de cuenta de servicio. Usa el nombre de la cuenta de servicio proxy que creaste en el paso 1. Por ejemplo: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • Si prefieres implementar el proxy con la API de implementación de Apigee, aquí hay un ejemplo de comando cURL que puedes usar. Ten en cuenta que el comando incluye un nombre de cuenta de servicio como parámetro de búsqueda. Este es el nombre de la cuenta de servicio que creaste 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

      Aquí:

      • TOKEN: Es un token de OAuth que debes obtener a cambio de tus credenciales de Google. Para obtener más información, consulta Obtén un token de acceso de OAuth 2.0.
      • ORG_NAME: El nombre de tu organización de Apigee.
      • ENV_NAME: Es el nombre del entorno en el que se implementará el proxy de API.
      • SA_NAME: Es el nombre que proporcionaste cuando creaste la cuenta de servicio.
      • PROJECT_ID: Es el ID del proyecto de Google Cloud (igual que el nombre de la organización).
  7. Cuando se complete la implementación, prueba el proxy de API para asegurarte de que el servicio de Google muestre la respuesta esperada.

Implementa en Apigee Hybrid

En los siguientes pasos, se explica cómo implementar en Apigee Hybrid un proxy de API que está configurado para realizar llamadas autenticadas a los servicios de Google. En los pasos se supone que ya creaste el proxy y que incluye un elemento <Authentication> en uno de los contextos admitidos enumerados.

  1. Crea una cuenta de servicio y una clave para el componente runtime híbrido de Apigee mediante uno de los siguientes métodos:
  2. Abre tu archivo overrides.yaml y especifica la ruta al archivo de claves de la cuenta de servicio para cada entorno que requiera la capacidad 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 anulación a tu clúster con apigeectl apply.
  4. Crea una segunda cuenta de servicio, a la que llamamos cuenta de servicio del proxy. Esta cuenta de servicio debe estar en el mismo proyecto de Google Cloud que usaste para crear tu organización de Apigee. Debes proporcionar la dirección de correo electrónico de esta cuenta de servicio cuando implementes un proxy de API configurado para usar la autenticación de Google, y los tokens de OAuth que se generen representarán la cuenta de servicio.
  5. Otorga al usuario que realizará la implementación (el implementador), el permiso iam.serviceAccounts.actAs en la cuenta de servicio. Consulta también Acerca de los permisos de la cuenta de servicio.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  6. Aquí:

    • PROJECT_ID: Es el ID del proyecto El ID es el mismo que el nombre de la organización.
    • SA_NAME: El nombre que proporcionaste cuando creaste la cuenta de servicio.
    • MEMBER: Es el miembro al que se agregará la vinculación. Debe tener la forma user|group|serviceAccount:email o domain:domain.
  7. Otorga los permisos proxy necesarios a la cuenta de servicio para comunicarse con los servicios de Google de destino. Por ejemplo, si deseas llamar al servicio de Google Logging, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Información sobre las funciones.
  8. Asegúrate de que el entorno de ejecución tenga la capacidad de actuar en nombre de la cuenta de servicio del proxy. Para proporcionar esta función, otorga a la cuenta de servicio runtime la función iam.serviceAccountTokenCreator en la cuenta de servicio de proxy. Consulta también Acerca de los permisos de la cuenta 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
    

    Aquí:

    • PROJECT_ID: Es el ID del proyecto El ID es el mismo que el nombre de la organización. Ten en cuenta que no tuviste que usar el proyecto asociado con tu organización para crear la cuenta de servicio del entorno de ejecución. Solo asegúrate de usar los ID del proyecto correctos en este comando.
    • PROXY_SA_NAME: El ID de la cuenta de servicio del proxy
    • RUNTIME_SA_NAME: El ID de la cuenta de servicio del entorno de ejecución.
  9. Antes de implementar un proxy de API que está configurado para usar la autenticación de Google, necesitas lo siguiente:
    • El nombre del proxy de la cuenta de servicio que creaste antes. Por ejemplo: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
    • Como usuario que realiza la implementación, ya debes tener o haber otorgado el permiso iam.serviceAccounts.actAs en el proyecto de Google Cloud en el que se aprovisiona la organización de Apigee. Consulta Otorga, cambia y revoca el acceso a recursos.
  10. Implementa el proxy de API que contiene la configuración de autenticación de Google que implementaste. Puedes usar la IU o la API de Apigee para implementar el proxy. Para obtener más información, consulta Implementa un proxy de API.
    • Si usas la IU, se te pedirá que proporciones un nombre de cuenta de servicio. Usa el nombre de la cuenta de servicio de proxy que creaste antes. Por ejemplo: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • Si prefieres implementar el proxy con la API de implementación de Apigee, aquí hay un ejemplo de comando cURL que puedes usar. Ten en cuenta que el comando incluye un nombre de cuenta de servicio como parámetro de búsqueda. Este es el nombre de la cuenta de servicio del 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

      Aquí:

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

Acerca de los permisos de cuenta de servicio

A fin de configurar un proxy de API para usar la autenticación de Google, debes crear una cuenta de servicio como se describe en la siguiente tabla. Consulta también Crea y administra cuentas de servicio.

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

Tiene los permisos necesarios para que un proxy de API realice llamadas autenticadas a los servicios de Google orientados.

  • Debe crearse en el mismo proyecto de Google Cloud que tu organización de Apigee.
  • El usuario que realiza la implementación (el implementador) debe tener el permiso iam.serviceAccounts.actAs en la cuenta de servicio del proxy.
  • Debe incluir los permisos necesarios para comunicarse con servicios de Google de destino específicos. Por ejemplo, si deseas llamar al servicio de Google Logging, esta cuenta de servicio debe incluir los permisos necesarios para comunicarse con ese servicio. Consulta también Información sobre las funciones.
  • El nombre de la cuenta de servicio debe proporcionarse cuando implementas el proxy que usa la autenticación de Google.
Entorno de ejecución Solo Apigee Hybrid

Permite que el entorno de ejecución de Apigee genere tokens para autenticarse en los servicios de Google que solicita un proxy de API. Esta cuenta de servicio “actúa en nombre de” la cuenta de servicio específica del proxy para realizar llamadas autenticadas en su nombre.

  • Para poder actuar en nombre de la cuenta de servicio de proxy y crear tokens, el entorno de ejecución de la cuenta de servicio deber tener la función roles/iam.serviceAccountTokenCreator en la cuenta de servicio de proxy. Consulta Administra el acceso a las cuentas de servicio.