Control de admisión

Introducción

En esta página se describe cómo usar la API Service Control v2 para controlar el acceso a los servicios gestionados que están integrados con Service Infrastructure. Está dirigido a los productores de servicios que quieran integrar sus servicios en profundidad con Google Cloud.

Service Infrastructure es una plataforma fundamental para que los desarrolladores produzcan, gestionen, protejan y consuman APIs y servicios. Utiliza un modelo de uso de servicios sencillo y genérico: un consumidor usa un servicio gestionado por un productor. Todas las APIs de Google y las APIs de Google Cloud usan este modelo, ya que también se han creado sobre la infraestructura de servicios.

Cuando un cliente accede a un servicio, todas las entidades implicadas en el acceso suelen requerir una comprobación de estado y de política, incluidas el consumidor, el servicio, el productor, el usuario, la aplicación, la red y los recursos. Con la infraestructura de servicios, este proceso se denomina control de acceso, que incluye la autenticación, la autorización, la auditoría, la limitación de frecuencia y más.

API Service Control v2

La API Service Control v2 proporciona un método sencillo services.check que ofrece control de acceso a todos los servicios integrados con Service Infrastructure. Este método te permite hacer lo siguiente en una sola llamada de método:

  • Comprobación del estado
    • Estado de abuso
    • Estado de facturación
    • Estado del consumidor
    • Estado del servicio
    • Habilitación de servicios
  • Autenticación
    • Token de acceso OAuth de Google
    • JWT firmado por una cuenta de servicio de Google
  • Autorización
  • Auditoría

Cuando un servicio llama a la API Service Control, el productor también es un consumidor de la API Service Control. Por lo tanto, el método services.check también realiza un control de acceso en la llamada a la API Service Control.

Para que un servicio pueda llamar a la API Service Control, debes habilitar la API Service Control en el proyecto del productor y tener los permisos adecuados en el servicio. Para obtener más información, consulta los artículos Primeros pasos de las APIs de Cloud y Control de acceso de Service Control.

Atributos request

Cuando un cliente accede a un servicio, este debe abstraer el acceso en una o varias solicitudes de API que se puedan comprobar con el control de acceso. En la mayoría de los casos, estos accesos son solicitudes de API reales. En otros casos, el acceso puede ser complicado (por ejemplo, tareas de importación de datos o consultas SQL), y el servicio debe modelar el acceso en términos de un conjunto de solicitudes de API virtuales y realizar un control de acceso en cada solicitud.

Para llevar a cabo el control de admisión mediante la API Service Control, el servicio debe llamar al método services.check con los atributos de solicitud necesarios. En la siguiente tabla se indican los atributos necesarios para el control de acceso. Para consultar la especificación completa, vaya a AttributeContext.

Attibute Descripción Ejemplo
origin.ip La dirección IP de la persona que llama. "1.2.3.4"
api.service El nombre del servicio de la API. "endpointsapis.appspot.com"
api.operation Nombre del método de la API. "google.example.hello.v1.HelloService.GetHello"
api.version Cadena de versión de la API. "v1"
api.protocol Nombre del protocolo de la API. "https"
request.id Un ID de solicitud único. "123e4567-e89b-12d3-a456-426655440000"
request.time La hora de la solicitud. "2019-07-31T05:20:00Z"
request.method Nombre del método HTTP. "POST"
request.scheme El esquema de la URL. "https"
request.host El encabezado de host HTTP. "endpointsapis.appspot.com"
request.path La ruta de la URL. "/v1/hello"
request.headers Encabezados de solicitud HTTP. Los encabezados obligatorios son "authorization", "user-agent", "origin" y "referer".
resource.name Nombre del recurso de destino. "projects/123/topics/news-feed"

Atributos de recursos

Cuando un cliente accede a un servicio, el acceso puede implicar uno o varios recursos del servicio, como leer un objeto o crear una instancia de VM. El servicio puede usar el control de acceso de la infraestructura de servicios para controlar el acceso a los recursos, con la ayuda de IAM y Registros de auditoría de Cloud. Si tu servicio no necesita control de acceso, puedes saltarte esta sección.

Para controlar el acceso, un servicio debe transferir los atributos de recursos al método services.check junto con los atributos de solicitud. En la siguiente tabla se muestran los atributos de recursos necesarios para el control de acceso.

Attibute Descripción Ejemplo
name Nombre del recurso. "projects/123/locations/global/instances/instance-1"
type El tipo de recurso. El formato es "{service}/{Kind}". "endpointsapis.appspot.com/Instance"
permission Permiso del recurso. El formato es "{service}/{kinds}.{verb}". "endpointsapis.appspot.com/instances.get"

Para mejorar el rendimiento y la eficiencia, el método services.check le permite comprobar varios permisos en un solo recurso con una sola llamada.

Realizar el control de admisión

Una vez que hayas implementado la configuración de tu servicio en la API Service Management y tu servicio esté listo para atender las solicitudes de los clientes, podrás empezar a llamar a services.check para tu servicio implementado. Debes llamar a services.check para realizar el control de acceso cada vez que tu servicio reciba una solicitud.

Para experimentar rápidamente con el control de acceso, puedes usar el comando gcurl para llamar al método services.check. Consulta los primeros pasos con la API Service Control para ver los pasos de configuración inicial.

En el siguiente ejemplo se muestra cómo usar el comando gcurl para llamar a services.check a través de HTTP.

gcurl -d '{
  "service_config_id": "latest",
  "attributes": {
    "origin": {
      "ip": "1.2.3.4"
    },
    "api": {
      "service": "endpointsapis.appspot.com",
      "operation": "google.example.hello.v1.HelloService.GetHello",
      "version": "v1",
      "protocol": "https"
    }
  },
  "request": {
    "id": "123e4567-e89b-12d3-a456-426655440000",
    "time": "2019-07-31T05:20:00Z",
    "scheme": "https",
    "host": "endpointsapis.appspot.com"
    "headers": {
      "authorization": "Bearer xxx",
      "user-agent": "curl/1.0"
    }
  },
  "resources": [
  ]
}' https://servicecontrol.googleapis.com/v2/services/endpointsapis.appspot.com:check
{
}

La respuesta del método services.check indica si se ha superado el control de acceso. Si se supera, la respuesta debe estar vacía. Si falla, el elemento status de la respuesta contiene información sobre el error que el servicio debe devolver al cliente. A menudo, el servicio debe traducir la información de error a su propio formato. El servicio también puede usar la información con fines de registro y monitorización.

En el caso de los servicios de producción, debes usar una de las bibliotecas de cliente proporcionadas por Google para llamar a la API Service Control. Estas bibliotecas ofrecen una gran usabilidad y gestionan automáticamente funciones comunes, como la autenticación. Para obtener más información, consulta el artículo Explicación de las bibliotecas de cliente.