Service Control API のアクセス制御

マネージド サービスに対して Service Control API を呼び出すには、そのサービスに対する次の Identity and Access Management(IAM) 権限が必要です。

IAM ロール roles/servicemanagement.serviceControllerroles/ownerroles/editor にはこれらの権限が含まれており、各 IAM ロールを使用してこれらの権限を付与できます。マネージド サービスの実行には IAM ロール roles/servicemanagement.serviceController をおすすめします。roles/ownerroles/editor でもこうした権限を付与できますが、セキュリティ上の理由から適用範囲の狭いロールの方が適しています。

リソースモデル

IAM は、リソースに IAM ポリシーを適用し、そのリソース上でどのユーザーがどのアクションを実行できるかを制御します。Service Control API では次のリソースを使用して機能を提供します。

  • サービス プロデューサー プロジェクト: サービス プロデューサー プロジェクトは、ゼロ個以上のマネージド サービスを所有できます。サービス プロデューサー プロジェクトはこの階層内のサービスの親です。
  • マネージド サービス: マネージド サービスは、ゼロ人以上のサービス ユーザーを持つことができます。
  • サービス ユーザー: サービス ユーザーとは、サービスを有効にした Google Cloud プロジェクトを指します。

IAM アクセス制御はリソースモデルに適用されます。サービス プロデューサー プロジェクトのレベルで付与された役割は、そのプロデューサー プロジェクトが所有するすべてのマネージド サービスに影響します。マネージド サービス レベルで付与された役割は、そのマネージド サービスのすべてのユーザーに影響します。

セキュリティと独立性に関する理由から、マネージド サービスはサービス プロデューサー プロジェクトごとに 1 つだけ作成することを強くおすすめします。複数作成した場合、たとえば、サービス プロデューサー プロジェクトが Service Control API にリクエストを送信するための割り当てを使い果たした場合などには、その複数のマネージド サービスが影響を受けます。

マルチテナント サービスを使用している場合は、マネージド サービス レベルでロール roles/servicemanagement.serviceController を付与する必要があります。シングルテナント サービス、つまり各サービス ユーザーが専用のマネージド サービス インスタンスを持つサービスを使用している場合は、このロールをサービス ユーザー レベルで付与する必要があります。すべてのユーザーに影響するバックグラウンド データ処理の場合は、マネージド サービス レベルで役割を付与します。

役割の付与

Service Control API を呼び出すには、必要なロールを呼び出し元に付与する必要があります。ロールは次の 3 つのいずれかの方法で付与できます。 必要なロールを付与するため、サービス プロデューサー プロジェクトの所有者である必要があります。

サービス プロデューサー プロジェクト レベルで役割を付与する

マネージド サービスが属しているプロジェクトに対して必要なロールを付与するには、リソースに対するアクセス権の付与、変更、取り消しの手順に従うか、Google Cloud CLI の add-iam-policy-binding コマンドを使用します。

たとえば、foo@developer.gserviceaccount.com などのサービス アカウントにロールを付与できます。

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

同様に、ユーザー アカウント(bar@gmail.com など)にもロールを付与できます。

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

サービスレベルで役割を付与する

curl を使用して、サービスレベルでロール roles/servicemanagement.serviceController を付与できます。次の例では、スタートガイドcurl でテストするセクションで定義されている gcurl エイリアスを使用しています。

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

上記の例は、既存のサービスレベルの IAM ポリシーをすべて置き換えます。新しいロールを段階的に付与するには、リクエスト本文にすべての IAM ポリシーを含める必要があります。

サービス ユーザー レベルで役割を付与する

ロール roles/servicemanagement.serviceController をサービスレベルで付与することができます。サービス ユーザー レベルの権限では、Service Control API に対するリクエストに、有効なユーザー ID が 1 つ以上含まれている必要があります。次の例では、スタートガイドcurl でテストするセクションで定義されている gcurl エイリアスを使用しています。

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

上記の例は、既存のコンシューマ プロジェクト レベルの IAM ポリシーをすべて置き換えます。新しいロールを段階的に付与するには、リクエスト本文にすべての IAM ポリシーを含める必要があります。

詳細については、Cloud Auth ガイドをご覧ください。