Contrôle des accès à l'API Service Control

Pour appeler l'API Service Control pour un service géré, l'appelant doit disposer des autorisations Identity and Access Management (IAM) suivantes sur le service :

Les rôles IAM roles/servicemanagement.serviceController, roles/owner et roles/editor incluent ces autorisations et peuvent être utilisés pour les accorder. Nous vous recommandons d'utiliser le rôle IAM roles/servicemanagement.serviceController pour exécuter vos services gérés. Bien que roles/owner et roles/editor accordent également ces autorisations, pour des raisons de sécurité, le rôle le plus restreint est préférable.

Modèle de ressource

IAM applique des stratégies IAM sur les ressources pour contrôler qui peut effectuer quelles actions sur les ressources. L'API Service Control utilise les ressources suivantes pour fournir ses fonctionnalités :

  • Projet producteur de services : un projet producteur de services peut posséder plusieurs services gérés ou aucun. Le projet producteur de services est le parent des services dans cette hiérarchie.
  • Service géré : un service géré peut posséder plusieurs clients de service ou aucun.
  • Client de service : un client de service est un projet Google Cloud qui active le service en question.

Le contrôle d'accès IAM est appliqué au modèle de ressource. Si un rôle est attribué au niveau du projet producteur de services, il affecte alors tous les services gérés appartenant au projet producteur. Si un rôle est attribué au niveau du service géré, il affecte tous les clients de service du service géré.

Pour des raisons de sécurité et d'isolement, il est vivement recommandé de ne créer qu'un seul service géré par projet producteur de services. Sinon, dans le cas où, par exemple, le projet producteur de services manque de quota pour l'envoi de requêtes à l'API Service Control, plusieurs services gérés se trouveront alors affectés.

Si vous disposez d'un service multilocataire, vous devez accorder le rôle roles/servicemanagement.serviceController au niveau du service géré. Dans le cas d'un service à locataire unique, c'est-à-dire où chaque client de service obtient sa propre instance de votre service géré, vous devez attribuer le rôle au niveau du client de service. Si le traitement de données en arrière-plan affecte tous les clients du service, vous devez attribuer le rôle au niveau du service géré.

Attribuer des rôles

Pour appeler l'API Service Control, vous devez attribuer les rôles nécessaires aux appelants. Pour ce faire, vous pouvez choisir l'une des trois approches décrites ci-dessous. Toutefois, vous devez être propriétaire du projet producteur de services pour pouvoir attribuer les rôles nécessaires.

Attribuer un rôle au niveau du projet producteur de services

Vous pouvez attribuer les rôles nécessaires sur le projet auquel appartient un service géré en suivant les instructions fournies dans Accorder, modifier et révoquer les accès à des ressources, ou utiliser le Google Cloud CLI add-iam-policy-binding pour attribuer les rôles.

Par exemple, vous pouvez accorder les rôles à un compte de service, tel que foo@developer.gserviceaccount.com :

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

De même, vous pouvez accorder les rôles à un compte d'utilisateur, tel que bar@gmail.com :

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

Attribuer un rôle au niveau du service

Vous pouvez accorder le rôle roles/servicemanagement.serviceController au niveau du service à l'aide de curl. L'exemple suivant utilise l'alias gcurl défini dans la section Tester avec curl du guide Premiers pas :

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

Notez que l'exemple ci-dessus remplacera toutes les stratégies IAM existantes au niveau du service. Pour attribuer le nouveau rôle de manière incrémentielle, vous devez inclure toutes les stratégies IAM dans le corps de la requête.

Attribuer un rôle au niveau du client de service

Vous pouvez accorder le rôle roles/servicemanagement.serviceController au niveau du client de service. Les autorisations au niveau du client de service nécessitent que la demande à l'API Service Control contienne au moins un ID de projet de client de service valide. L'exemple suivant utilise l'alias gcurl définis dans le Tester avec curl du guide de démarrage:

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

Notez que l'exemple ci-dessus remplacera toutes les stratégies IAM existantes au niveau du projet grand public. Pour accorder le nouveau rôle de manière incrémentielle, vous devez inclure toutes les stratégies IAM dans le corps de la requête.

Pour plus d'informations, consultez le guide d'authentification Google Cloud.