Controlo de admissão

Introdução

Esta página descreve como usar a API Service Control v2 para o controlo de admissão para serviços geridos que estão integrados com a infraestrutura de serviços. Destina-se a produtores de serviços que queiram integrar profundamente os respetivos serviços com o Google Cloud.

A Service Infrastructure é uma plataforma fundamental para os programadores produzirem, gerirem, protegerem e consumirem APIs e serviços. Usa um modelo de utilização de serviços simples e genérico: um consumidor consome um serviço gerido por um produtor. Todas as APIs Google e as APIs Google Cloud usam este modelo, uma vez que também são criadas com base na infraestrutura de serviços.

Quando um cliente acede a um serviço, todas as entidades envolvidas no acesso normalmente requerem uma verificação do estado e das políticas, incluindo o consumidor, o serviço, o produtor, o utilizador, a aplicação, a rede e os recursos. Com a infraestrutura de serviços, este processo chama-se controlo de admissão, que inclui autenticação, autorização, auditoria, limitação de taxa e muito mais.

API Service Control v2

A API Service Control v2 oferece um método simples services.check que oferece controlo de admissão a todos os serviços integrados com a infraestrutura de serviços. Este método permite-lhe fazer o seguinte numa única chamada de método:

  • Verificação do estado
    • Estado de abuso
    • Estado de faturação
    • Estado do consumidor
    • Estado do serviço
    • Ativação de serviços
  • Autenticação
    • Chave de acesso do Google OAuth
    • JWT assinado da conta de serviço Google
  • Autorização
  • Auditoria

Quando um serviço chama a API Service Control, o produtor também é um consumidor da API Service Control. Por conseguinte, o método services.check também executa o controlo de admissão na chamada para a API Service Control.

Para que um serviço chame a API Service Control, tem de ativar a API Service Control no projeto do produtor e ter as autorizações adequadas no serviço. Para mais informações, consulte os artigos Introdução às APIs Cloud e Controlo de acesso do Service Control.

Atributos de pedido

Quando um cliente acede a um serviço, o serviço tem de abstrair o acesso em um ou mais pedidos de API que podem ser verificados com o controlo de admissão. Na maioria dos casos, estes acessos são, de facto, pedidos API reais. Noutros casos, o acesso pode envolver tarefas de importação de dados complexas ou consultas SQL, e o serviço tem de modelar o acesso em termos de um conjunto de pedidos de API virtuais e realizar o controlo de admissão em cada pedido.

Para realizar o controlo de admissão através da API Service Control, o serviço tem de chamar o método services.check com os atributos de pedido necessários. A tabela seguinte lista os atributos necessários para o controlo de admissão. Para ver a especificação completa, consulte AttributeContext.

Attibute Descrição Exemplo
origin.ip O endereço IP do autor da chamada. "1.2.3.4"
api.service O nome do serviço da API. "endpointsapis.appspot.com"
api.operation O nome do método da API. "google.example.hello.v1.HelloService.GetHello"
api.version A string da versão da API. "v1"
api.protocol O nome do protocolo da API. "https"
request.id Um ID do pedido exclusivo. "123e4567-e89b-12d3-a456-426655440000"
request.time A hora do pedido. "2019-07-31T05:20:00Z"
request.method O nome do método HTTP. "POST"
request.scheme O esquema de URL. "https"
request.host O cabeçalho do anfitrião HTTP. "endpointsapis.appspot.com"
request.path O caminho de URL. "/v1/hello"
request.headers Os cabeçalhos do pedido HTTP. Os cabeçalhos necessários são "authorization", "user-agent", "origin" e "referer".
resource.name O nome do recurso de destino. "projects/123/topics/news-feed"

Atributos do recurso

Quando um cliente acede a um serviço, o acesso pode envolver um ou mais recursos no serviço, como ler um objeto ou criar uma instância de VM. O serviço pode usar o controlo de admissão da infraestrutura de serviços para o controlo de acesso em recursos, suportado pela IAM e pelos registos de auditoria do Cloud. Se o seu serviço não precisar de controlo de acesso, pode ignorar esta secção.

Para o controlo de acesso, um serviço tem de transmitir atributos de recursos ao método services.check juntamente com os atributos de solicitação. A tabela seguinte mostra os atributos de recursos necessários para o controlo de acesso.

Attibute Descrição Exemplo
name O nome do recurso. "projects/123/locations/global/instances/instance-1"
type O tipo de recurso. O formato é "{service}/{Kind}". "endpointsapis.appspot.com/Instance"
permission A autorização de recursos. O formato é "{service}/{kinds}.{verb}". "endpointsapis.appspot.com/instances.get"

Para desempenho e eficiência, o método services.check permite-lhe verificar várias autorizações num único recurso numa única chamada.

Realizar o controlo de admissão

Depois de implementar a configuração do serviço na API Service Management e o serviço estiver pronto para processar pedidos de clientes, pode começar a chamar services.check para o serviço implementado. Deve chamar services.check para realizar o controlo de admissão sempre que o seu serviço receber um pedido.

Para experimentar rapidamente o controlo de admissão, pode usar o comando gcurl para chamar o método services.check. Consulte o artigo Introdução à API Service Control para ver os passos de configuração iniciais.

O exemplo seguinte mostra como usar o comando gcurl para chamar services.check atravé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
{
}

A resposta do método services.check indica se o controlo de admissão foi aprovado. Se passar, a resposta deve estar vazia. Se falhar, o status na resposta contém informações de erro que o serviço deve devolver ao cliente. Muitas vezes, o serviço tem de traduzir as informações de erro para o seu próprio formato. O serviço também pode usar as informações para fins de registo e monitorização.

Para serviços de produção, deve usar uma das bibliotecas cliente fornecidas pela Google para chamar a API Service Control. Estas bibliotecas oferecem uma excelente usabilidade e processam automaticamente a funcionalidade comum, como a autenticação. Para mais informações, consulte o artigo Bibliotecas de cliente explicadas.