アクセス制御の概要

デフォルトでは、すべての Google Cloud プロジェクトに単一のユーザー(元のプロジェクト作成者)が設定されています。その他のユーザーはプロジェクト メンバーとして追加されるか、特定のリソースにバインディングされるまで、そのプロジェクトにアクセスできず、Compute Engine リソースにもアクセスできません。このページでは、新規ユーザーをプロジェクトに追加する方法と、Compute Engine リソースに対するアクセス制御を設定する方法について説明します。

また、アプリを仮想マシン(VM)インスタンスで実行しており、そのアプリから Compute Engine や他の Google Cloud API にアクセスする必要がある場合は、ユーザーの認証情報を使用する代わりに、サービス アカウントを使用してアプリを認証できます。

ユーザーのアクセス制御オプション

ユーザーが Compute Engine リソースを作成および管理できるようにするには、そのユーザーをプロジェクトまたは特定のリソースのチームメンバーとして追加し、Cloud Identity and Access Management の役割を使用して権限を付与します。

チームメンバーにできるのは、有効な Google アカウント、Google グループ、サービス アカウント、G Suite ドメインのいずれかを持つ個別のユーザーです。プロジェクトまたはリソースにチームメンバーを追加するときは、そのメンバーに付与する役割を指定します。Cloud IAM には、事前定義された役割基本の役割カスタムの役割の 3 種類の役割があります。

リソースは Google Cloud のリソース階層での親リソースのポリシーを継承します。リソースで有効なポリシーは、そのリソースに設定されたポリシーとその親リソースから継承されたポリシーを組み合わせたものです。

Compute Engine の事前定義された役割

事前定義された役割は、関連する一連の権限を付与します。Compute Engine には、以下の事前定義された役割が用意されています。

役割のタイトル 機能 ターゲット ユーザー
Compute Engine イメージ ユーザー

別のプロジェクトのイメージを一覧表示して使用する権限。メンバーにこの役割を別の役割と一緒に付与すると、メンバーは別のプロジェクトのイメージを使用して新しいリソースを作成できるようになります。たとえば、この役割とインスタンス管理者の役割を付与すると、メンバーは別のプロジェクトのイメージを使用して VM インスタンスと永続ディスクを作成できるようになります。

マネージド インスタンス グループを作成しているか、Deployment Manager を使用して VM インスタンスを作成する場合に、他のプロジェクトのイメージを使用するには、その前にプロジェクトの Google API サービス アカウントにこの役割を付与する必要がある場合があります。

  • サービス アカウント
  • システム管理者
  • デベロッパー
Compute Engine インスタンス管理者(v1)

Compute Engine インスタンス、インスタンス グループ、ディスク、スナップショット、イメージのすべてを管理する権限。すべての Compute Engine ネットワーキング リソースへの読み取り専用アクセス権。

メンバーがサービス アカウントとして実行するように構成されている VM インスタンスを管理している場合は、サービス アカウント ユーザーの役割も付与して、メンバーが VM インスタンスにサービス アカウントを割り当てられるようにする必要があります。

  • システム管理者
  • デベロッパー
Compute Engine 管理者の役割

Compute Engine リソースのすべてを管理できる権限。ユーザーがサービス アカウントとして実行するように構成されている VM インスタンスを管理している場合は、roles/iam.serviceAccountUser の役割も付与する必要があります。

  • システム管理者
  • デベロッパー
Compute Engine ネットワーク管理者

ネットワーキング リソース(ファイアウォール ルールと SSL 証明書を除く)を作成、変更、削除するための権限。ネットワーク管理者の役割により、ファイアウォール ルール、SSL 証明書、インスタンス(それぞれのエフェメラル IP アドレスの表示用)への読み取り専用アクセスを付与できます。メンバーは、ネットワーク管理者の役割では、インスタンスの作成、起動、停止、削除はできません。

ネットワーク管理者
Compute Engine セキュリティ管理者

ファイアウォール ルールと SSL 証明書を作成、変更、削除するための権限。

セキュリティ管理者
Compute Engine ロードバランサ管理者ベータ版

ロードバランサと関連リソースを作成、変更、削除する権限。

ロードバランサ管理者
Compute Engine サービス アカウントのユーザー

サービス アカウントを使用するインスタンスの作成権限、およびディスクを接続して、サービス アカウントとして実行するようにすでに構成されているインスタンスにメタデータを設定する権限。

この役割には Compute Engine API にアクセスする権限がないため、この役割を単独では付与しないでください。この役割と別の役割(インスタンス管理者の役割など)をメンバーに付与してください。

  • システム管理者
  • デベロッパー
Compute Engine 閲覧者の役割

Compute Engine リソースを取得して表示するための読み取り専用アクセス権。そこに格納されたデータを読み取ることはできません。たとえば、この役割を持つアカウントはプロジェクトのすべてのディスクの一覧を作成できますが、それらのディスク内のデータは読み取ることができません。

システム管理者
Compute Engine ネットワーク ユーザー

共有 VPC ネットワークを使用する権限。具体的には、ホスト プロジェクトでリソースを使用する必要があるサービス オーナーにこの役割を付与します。アクセス権を付与されたサービス オーナーは、ホスト プロジェクトに属するサブネットワークとネットワークを使用できます。たとえば、ネットワーク ユーザーは、共有 VPC ホスト ネットワークに属する VM インスタンスを作成できますが、ホスト プロジェクトでネットワークを削除したり、新しいネットワークを追加したりすることはできません。

  • システム管理者
  • デベロッパー
Compute Engine ネットワーク閲覧者

すべてのネットワーク リソースへの読み取り専用アクセス権。たとえば、ネットワーク構成を検査するソフトウェアがある場合は、そのソフトウェアのサービス アカウントにネットワーク閲覧者の役割を付与します。

  • ネットワーク管理者
  • システム管理者
  • デベロッパー
  • サービス アカウント
Compute Engine ストレージ管理者ベータ版

ディスク、イメージ、スナップショットを作成、変更、削除するための権限。

たとえば、イメージを管理しているメンバーが社内にいて、プロジェクトに対する編集者の役割を付与したくない場合は、各メンバーのアカウントにこの役割を付与します。

  • システム管理者
  • デベロッパー
Compute Engine 共有 VPC 管理者

共有 VPC ホスト プロジェクトを管理する権限。特にホスト プロジェクトを有効にし、サービス プロジェクトをホスト プロジェクトのネットワークに関連付ける権限。この役割は、組織レベルでのみ付与できます。

プロジェクト作成者

特定の役割が権限を付与する API メソッドのリストを確認するには、Compute Engine Cloud IAM 役割のドキュメントをご覧ください。

事前定義された役割のマトリックス

次の表に、Compute Engine の役割ごとに可能な操作の比較を示します。

機能 インスタンス管理者(v1) イメージ ユーザー ネットワーク ユーザー ネットワーク閲覧者 ネットワーク管理者 セキュリティ管理者 ストレージ管理者 共有 VPC 管理者 Compute 管理者 Compute 閲覧者 ロードバランサ管理者
VM インスタンスの作成や削除 * × × × × × × × 希望しない ×
VM インスタンスへの SSH 接続 * × × × × × × × * × ×
VM インスタンスの一覧表示や取得 希望しない × 希望する 希望しない × ×
イメージ、ディスク、スナップショットの作成や削除 希望しない × × × × × 希望する ×
イメージの一覧表示や取得 希望する 希望しない × × × × 希望する ×
インスタンス グループの作成や削除 * × × × × × × × ×
インスタンス グループの一覧表示や取得 希望しない × 希望する 希望しない × ×
ロードバランサの作成と管理 × × × × 希望しない × × ×
VPN の作成と管理 × × × × 希望しない × × 希望しない ×
ネットワーク / サブネットワークのリソースの表示 × 希望する 希望しない × ×
ファイアウォール ルールの表示 × 希望する 希望しない × 希望する ×
ファイアウォールと SSL 証明書の作成と管理 × × × × × 希望しない × × ファイアウォールでは ×、SSL 証明書では 〇
共有 VPC ホスト プロジェクトの作成と管理 × × × × × × × 希望する 希望しない ×
共有 VPC ホスト プロジェクトでのネットワークとサブネットワークの使用 × × 希望しない × × × × 希望しない ×
ネットワークとサブネットワークの作成と管理 × × × × 希望しない × × 希望しない ×

* VM インスタンスをサービス アカウントとして実行できる場合は、サービス アカウント ユーザーの役割も付与してください。

特定の役割が権限を付与する API メソッドのリストを確認するには、Compute Engine Cloud IAM 役割のドキュメントをご覧ください。

Cloud IAM の基本の役割

Cloud IAM の基本の役割は、以前のプロジェクト オーナー、編集者、閲覧者の各役割に直接対応付けられています。一般に、可能な限り、事前定義されている役割を使用してください。ただし、Cloud IAM がまだサポートされていない場合は、基本の役割を使用して適切な権限を付与する必要があることがあります。

役割のタイトル 権限
Owner すべての閲覧者権限と編集者権限に加え、課金設定の変更、アクセス制御の管理、プロジェクトの削除が可能。
Editor すべての閲覧者権限に加え、リソースの作成、変更、削除が可能。
Viewer すべてのリソースに対する読み取り専用権限。リソースを変更する権限はありません。

基本の役割について詳しくは、基本の役割のドキュメントをご覧ください。

事前定義された役割や基本の役割がニーズを満たさない場合は、カスタムの役割を作成できます。

Compute Engine リソースの Cloud IAM ポリシー

Cloud IAM ポリシーを Compute Engine リソース(VM インスタンス、イメージ、ディスクなど)に直接接続することで、Compute Engine リソースへのアクセス権を付与できます。Cloud IAM ポリシーを使用すると、プロジェクト レベルで役割を管理する代わりに、あるいはこのレベルでの管理に加えて、リソースの Cloud IAM の役割を管理できます。これにより、共同編集者が作業を行うために必要な特定のリソースのみへのアクセスを許可する、最小権限の原則を適用できます。

Compute Engine リソースの Cloud IAM ポリシーを使用することで、次のような権限を付与できます。

  • ユーザーにリソースの特定のサブセットへのアクセスを許可します。Alice がプロジェクト内の一部のインスタンスを管理する必要があるとします。この場合、インスタンス レベルの Cloud IAM ポリシーを使用して、対象のインスタンスに限定した compute.instanceAdmin.v1 の役割を Alice に付与します。同じ役割をプロジェクトで Alice に付与した場合は、プロジェクト内のすべてのインスタンスを変更する権限が付与されることになります。
  • アクセスの付与を管理者に許可します。強い権限を持つプロジェクト オーナーでなくても、管理者がインスタンス、ディスク、イメージに対するアクセスを他のユーザーに付与できるようにします。Bob が特定のイメージに対する compute.storageAdmin の役割を付与されているデベロッパーであるとします。Bob は、そのイメージに対する compute.imageUser の役割をチームメートに付与することにより、そのメンバーとイメージを共有できます。Compute Engine リソースの Cloud IAM ポリシーを使用しない場合、チームメートとそのイメージを共有するにはプロジェクトのポリシーを変更する必要があるため、Bob は Cloud IAM のプロジェクト オーナーでない限りイメージを共有できません。

リソースは親リソースのポリシーも継承します。プロジェクト レベルでポリシーを設定すると、そのすべての子リソースでそのポリシーが継承されます。特定のリソースに対して有効なポリシーは、そのリソースに設定されたポリシーとリソース階層の上位から継承されるポリシーを組み合わせたものです。詳細については、Cloud IAM ポリシー階層をご覧ください。

組織のポリシー

G Suite メンバーの場合は、プロジェクトが組織リソースの一部である可能性があります。組織リソースは、G Suite アカウントと密接に関連する Google Cloud リソース階層のスーパーノードです。G Suite ドメインに組織リソースを作成すると、ドメインのメンバーが作成するすべての Google Cloud プロジェクトが組織リソースに属するようになります。

組織では、Google Cloud リソース階層全体で許可する構成を制限するポリシーである組織のポリシーを実装できます。Compute Engine の場合は、次のポリシーを実装できます。

組織のポリシーを設定するには、組織での orgpolicy.policyAdmin の役割が付与されている必要があります。ポリシーに対する例外がある場合は、プロジェクト固有のオーバーライドを設定することもできます。

組織について詳しくは、組織のドキュメントをご覧ください。

組織のポリシーについて詳しくは、組織のポリシーのドキュメントをご覧ください。

ユーザーに VM インスタンスへの SSH アクセスを許可する

ユーザーに Compute Engine リソースの管理権限を付与せずに、SSH を使用した VM インスタンスへの接続を許可するには、プロジェクトにユーザーの公開鍵を追加するか、特定のインスタンスにユーザーの公開鍵を追加します。この方法を使用すると、ユーザーをプロジェクト メンバーとして追加しなくても、特定のインスタンスへのアクセスを許可できるようになります。

SSH および SSH 認証鍵の管理について詳しくは、SSH 認証鍵の概要をご覧ください。

プロジェクト メンバーに roles/compute.instanceAdmin.v1 の役割を付与した場合は、インスタンスがサービス アカウントとして実行するように設定されていない限り、メンバーは自動的に SSH を使用してインスタンスに接続できます。インスタンスがサービス アカウントとして実行するように設定されている場合に、メンバーがそのインスタンスに接続するには、事前に roles/iam.serviceAccountUser の役割も付与する必要があります。

メンバーをプロジェクトのオーナーまたは編集者として追加すると、プロジェクト内の VM インスタンスへの SSH アクセスも自動的に付与されます。

VM インスタンスで実行されるアプリのアクセス制御

インスタンスでアプリのコードを実行しており、そのアプリが他の Google Cloud API に対して認証を行う必要がある場合は、サービス アカウントを作成し、他の Google Cloud API に対して代理で認証を行う特定の Cloud IAM 役割をそのサービス アカウントに付与できます。サービス アカウントは、ユーザーの認証情報を備えていない、サーバー間のやり取りに最適な特別アカウントです。

サービス アカウントについて詳しくは、サービス アカウントのドキュメントをご覧ください。

次のステップ