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
- Registros de auditoría de Cloud. El registro de auditoría está asociado al servicio "externalaudit.googleapis.com".
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.