Controle de acesso à API Service Control

Para chamar a API Service Control de um serviço gerenciado, o autor da chamada precisa ter as seguintes permissões do gerenciamento de identidade e acesso (IAM) no serviço:

Os papéis do IAM roles/servicemanagement.serviceController, roles/owner e roles/editor incluem essas permissões e podem ser usados para concedê-las. Recomendamos o uso do papel do IAM roles/servicemanagement.serviceController para executar seus serviços gerenciados. Embora roles/owner e roles/editor também concedam essas permissões, o papel mais restrito é melhor por motivos de segurança.

Modelo de recurso

O IAM aplica políticas de IAM a recursos para controlar quem pode realizar quais ações nos recursos. A API Service Control usa os seguintes recursos para fornecer a funcionalidade correspondente:

  • Projeto de produtor de serviço: um projeto de produtor de serviço pode ter zero ou mais serviços gerenciados. Esse projeto é o pai dos serviços nessa hierarquia.
  • Serviço gerenciado: um serviço gerenciado pode ter zero ou mais consumidores de serviço.
  • Consumidor de serviços: um consumidor de serviços refere-se a um projeto do Google Cloud que ativou o serviço.

O controle de acesso IAM é aplicado ao modelo de recurso. Se um papel é concedido no nível do projeto de produtor de serviço, ele afeta todos os serviços pertencentes ao projeto de produtor. Se um papel for concedido no nível de serviço gerenciado, ele afetará todos os consumidores de serviço do serviço gerenciado.

É altamente recomendável que você crie apenas um serviço por projeto de produtor por motivos de segurança e isolamento. Caso contrário, por exemplo, se o projeto de produtor de serviço ficar sem cota para enviar solicitações à API Service Control, vários serviços gerenciados serão afetados.

Se você tiver um serviço de multilocação, conceda a função roles/servicemanagement.serviceController no nível de serviço gerenciado. Se você tiver um serviço de locatário único, isto é, um serviço em que cada consumidor de serviço recebe a própria instância do seu serviço gerenciado, você precisa conceder o papel no nível do consumidor de serviço. Para processamento de dados em segundo plano que afeta todos os consumidores de serviço, você precisa conceder o papel no nível de serviço gerenciado.

Conceder papéis

Para chamar a API Service Control, você precisa conceder os papéis necessários aos chamadores. É possível conceder os papéis por uma das três abordagens a seguir. Você precisa ser um proprietário do projeto de produtor de serviço para poder conceder os papéis necessários.

Conceder um papel no nível do projeto de produtor de serviço

É possível conceder os papéis necessários no projeto a que pertence um serviço gerenciado. Basta seguir as instruções em como conceder, alterar e revogar acesso a recursos ou usar o comando add-iam-policy-binding do SDK do Google Cloud.

Por exemplo, você pode conceder os papéis a uma conta de serviço, como foo@developer.gserviceaccount.com:

gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member serviceAccount:SERVICE_ACCOUNT --role roles/servicemanagement.serviceController

Da mesma forma, você pode conceder os papéis a uma conta de usuário, como bar@gmail.com:

gcloud projects add-iam-policy-binding PRODUCER_PROJECT_ID --member user:USER_ACCOUNT --role roles/servicemanagement.serviceController

Conceder um papel no nível de serviço

Você pode conceder o papel roles/servicemanagement.serviceController no nível de serviço, conforme mostrado pelo exemplo a seguir:

gcurl -d "{
  'policy': {
    'bindings': [ {
      role: 'roles/servicemanagement.serviceController',
      members: 'serviceAccount:SERVICE_ACCOUNT'
    } ]
  }
}" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME:setIamPolicy

Conceder um papel no nível de consumidor de serviço

Você pode conceder o papel roles/servicemanagement.serviceController no nível do consumidor do serviço. As permissões no nível do consumidor de serviço exigem que a solicitação à API Service Control contenha pelo menos um ID de projeto de consumidor de serviço válido. Por exemplo, você pode conceder os papéis conforme mostrado pelo comando a seguir:

gcurl -d "{
  'policy': {
    'bindings': [ {
      role: "roles/servicemanagement.serviceController",
      members: "serviceAccount:SERVICE_ACCOUNT"
    } ]
  }
}" https://servicemanagement.googleapis.com/v1/services/YOUR_SERVICE_NAME/consumers/CONSUMER_PROJECT_NUMBER:setIamPolicy

Para mais informações, consulte o Guia de autenticação do Cloud.