プロジェクトに新しいメンバーを追加する際は、Identity and Access Management(IAM)ポリシーを使用して、そのメンバーに 1 つ以上の IAM ロールを付与できます。各 IAM ロールには、メンバーに特定のリソースへのアクセスを許可する権限が含まれています。
Compute Engine には、このページで説明する一連の事前定義された IAM ロールが用意されています。また、ニーズに直接対応する権限のサブセットを含むカスタムロールを作成することもできます。
各メソッドに対して必要な権限については、Compute Engine API のリファレンス ドキュメントをご覧ください。
アクセス権の付与の詳細については、次のページをご覧ください。
- プロジェクト レベルで IAM ポリシーを設定するには、IAM ドキュメントのリソースへのアクセス権の付与、変更、取り消しをご覧ください。
- 特定の Compute Engine リソースにポリシーを設定するには、Compute Engine リソースへのアクセス権の付与をご覧ください。
- Compute Engine サービス アカウントにロールを割り当てる方法については、インスタンスのサービス アカウントの作成と有効化をご覧ください。
始める前に
- IAM のドキュメントをお読みください。
IAM とは
Google Cloud には IAM 機能があります。これにより、特定の Google Cloud リソースに対するアクセス権を詳細に設定できるため、他のリソースへの不正なアクセスを防ぐことができます。IAM を使用すると、セキュリティに関する最小権限の原則を導入できるため、リソースに対する必要なアクセス権のみ付与できます。
IAM では、IAM ポリシーを設定して、誰(どのユーザー)に、どのリソースに対するどのアクセス権(ロール)を付与するかを制御できます。IAM ポリシーは、特定のロールをプロジェクト メンバーに付与することで、その ID に特定の権限を付与します。たとえば、プロジェクトなどの特定のリソースに対し、Google アカウントに roles/compute.networkAdmin
のロールを割り当てた場合、そのアカウントはプロジェクト内のネットワーク関連のリソースは制御できるようになりますが、インスタンスやディスクなどの他のリソースは管理できません。また、IAM を使用して、プロジェクト チームメンバーに付与されている Google Cloud Console の以前のロールを管理することもできます。
serviceAccountUser の役割
roles/compute.instanceAdmin.v1
と roles/iam.serviceAccountUser
の両方が付与されたメンバーは、サービス アカウントを使用するインスタンスを作成、管理できます。具体的には、roles/iam.serviceAccountUser
と roles/compute.instanceAdmin.v1
の両方が付与されたメンバーには次の権限が設定されます。
- サービス アカウントとして実行するインスタンスの作成。
- サービス アカウントとして実行するインスタンスへの永続ディスクの接続。
- サービス アカウントとして実行するインスタンスへのインスタンス メタデータの設定。
- サービス アカウントとして実行するインスタンスへの SSH を使用した接続。
- サービス アカウントとして実行するインスタンスの再構成。
roles/iam.serviceAccountUser
は、次の 2 つの方法のいずれかで付与できます。
(推奨)特定のサービス アカウントに基づいてメンバーに役割を付与する。これにより、この役割が付与されたメンバーは自身が
iam.serviceAccountUser
となっているサービス アカウントにはアクセスできますが、iam.serviceAccountUser
となっていない他のサービス アカウントにはアクセスできません。プロジェクト レベルでメンバーに役割を付与する。このメンバーは、プロジェクト内のすべてのサービス アカウントにアクセスできます。今後作成されるサービス アカウントにもアクセスできます。
サービス アカウントに精通していない場合は、サービス アカウントの詳細を確認してください。
Google Cloud Console 権限
Google Cloud Console を使用して Compute Engine リソースにアクセスするには、プロジェクトに対して次の権限を持つロールが必要です。
compute.projects.get
instanceAdmin としてのインスタンスへの接続
プロジェクト メンバーに roles/compute.instanceAdmin.v1
のロールを付与すると、そのメンバーは gcloud CLI やブラウザからの SSH をはじめとする標準の Google Cloud ツールを使用して、仮想マシン(VM)インスタンスに接続できます。
メンバーが gcloud CLI またはブラウザからの SSH を使用すると、公開鍵 / 秘密鍵のペアが自動的に生成され、公開鍵がプロジェクト メタデータに追加されます。メンバーがプロジェクト メタデータを編集する権限を保有していない場合、ツールによって代わりにメンバーの公開鍵がインスタンス メタデータに追加されます。
使用する既存の鍵のペアを持っているメンバーは、自分の公開鍵をインスタンスのメタデータに手動で追加できます。インスタンスへの SSH 認証鍵の追加の詳細について確認します。
IAM とサービス アカウント
新しいカスタム サービス アカウントを作成し、IAM のロールをサービス アカウントに付与して、インスタンスのアクセスを制限します。IAM のロールとカスタム サービス アカウントは、以下の目的のために使用します。
- きめ細かい IAM のロールを使用して、Google Cloud APIs に対するインスタンスのアクセスを制限する。
- 各インスタンス、または一連のインスタンスに一意の ID を付与する。
- デフォルトのサービス アカウントのアクセスを制限する。
マネージド インスタンス グループと IAM
マネージド インスタンス グループ(MIG)は、直接的なユーザー操作なしでユーザーの代わりにアクションを実行するリソースです。たとえば、MIG はグループに対して VM の追加や削除を行うことができます。
MIG の一部として Compute Engine により実行されるオペレーションはすべて、プロジェクトの Google API サービス エージェントによって実行されます。このサービス エージェントは、PROJECT_ID@cloudservices.gserviceaccount.com
のようなメールアドレスを持っています。
デフォルトでは、Google API サービス エージェントにはプロジェクト レベルで編集者のロール(roles/editor
)が付与されています。このロールは、MIG の構成に基づいてリソースを作成するのに十分な権限を持っています。Google API サービス エージェントのアクセス権をカスタマイズする場合は、Compute インスタンス管理者(v1)ロール(roles/compute.instanceAdmin.v1
)と、必要に応じてサービス アカウント ユーザーのロール(roles/iam.serviceAccountUser
)を付与します。サービス アカウント ユーザーのロールは、MIG がサービス アカウントとして実行できる VM を作成する場合にのみ必要です。
なお、Google API サービス エージェントは Deployment Manager などの他のプロセスでも使用されます。
MIG の作成やインスタンス テンプレートの更新を行うと、Compute Engine は、Google API サービス エージェントに次のロールと権限が付与されていることを確認します。
- サービス アカウント ユーザーのロール(サービス アカウントとして実行できるインスタンスを作成する場合には重要)。
- イメージ、ディスク、VPC ネットワーク、サブネットなどのインスタンス テンプレートから参照されるすべてのリソースに対する権限。
事前定義された Compute Engine IAM 役割
IAM では、Compute Engine API のすべての API メソッドで、API リクエストを行う ID がリソースの使用に必要な権限を保持していることが要求されます。権限を付与するには、プロジェクトのメンバー(ユーザー、グループ、またはサービス アカウント)に役割を付与するポリシーを設定します。
基本ロール(閲覧者、編集者、オーナー)やカスタムロールに加え、Compute Engine で以下の事前定義ロールもプロジェクトのメンバーに割り当てることができます。
1 人のプロジェクト メンバーに、同一リソースにおける複数の役割を付与できます。たとえば、ネットワーキング チームがファイアウォール ルールも管理している場合、roles/compute.networkAdmin
と roles/compute.securityAdmin
の両方のロールをネットワーキング チームの Google グループに付与できます。
次の表に、事前定義された Compute Engine IAM ロールと、それぞれのロールに含まれる権限を記載します。各ロールには、特定のタスクに適した一連の権限が含まれています。たとえば、インスタンス管理者のロールはインスタンスを管理する権限を付与することができ、ネットワーク関連のロールにはネットワーク関連のリソースを管理する権限が含まれています。また、セキュリティ関連のロールには、セキュリティ関連のリソース(ファイアウォール証明書、SSL 証明書など)を管理する権限が含まれています。
一部の権限は、
でオーナー権限とマークされています。次のいずれかに該当する場合、権限は所有者の権限です。 アイコン- 権限はオーナーの基本ロールに含まれていますが、閲覧者または編集者の基本ロールはありません。
- この権限は基本ロールにはありませんが、プリンシパルはアカウント所有者が実行できるタスク(課金の管理など)を実行できます。
Compute 管理者のロール
詳細 | 権限 |
---|---|
Compute 管理者( Compute Engine リソースのすべてを管理する権限。 ユーザーがサービス アカウントとして実行するように構成されている仮想マシン インスタンスを管理する場合は、 このロールを付与できる最下位レベルのリソース:
33 個のオーナー権限を含む |
compute.*
resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute イメージ ユーザーのロール
詳細 | 権限 |
---|---|
Compute イメージ ユーザー( イメージを一覧表示し、読み取る権限(イメージに対する他の権限はありません)。このロールをプロジェクト レベルで付与すると、ユーザーはプロジェクト内のすべてのイメージを一覧表示し、プロジェクト内のイメージに基づいてインスタンス、永続ディスクなどのリソースを作成できます。 このロールを付与できる最下位レベルのリソース:
|
compute.images.get compute.images.getFromFamily compute.images.list compute.images.useReadOnly resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute インスタンス管理者(ベータ版)のロール
詳細 | 権限 |
---|---|
Compute インスタンス管理者(ベータ版)( 仮想マシン インスタンスを作成、変更、削除する権限。ディスクの作成、変更、削除を行う権限が含まれます。Shielded VM の設定を構成する権限も含まれます。 ユーザーがサービス アカウントとして実行するように構成されている仮想マシン インスタンスを管理する場合は、 たとえば、仮想マシン インスタンスのグループは管理しているが、ネットワークやセキュリティの設定の管理や、サービス アカウントとして実行するインスタンスの管理は行っていないというユーザーが社内にいる場合は、このロールをインスタンスが含まれている組織、フォルダ、プロジェクトあるいは個々のインスタンスに付与できます。 このロールを付与できる最下位レベルのリソース:
6 個のオーナー権限を含む |
compute.acceleratorTypes.*
compute. compute. compute.addresses.get compute.addresses.list compute.addresses.use compute.addresses.useInternal compute.autoscalers.*
compute.diskTypes.*
compute.disks.create compute.disks.createSnapshot compute.disks.delete compute.disks.get compute.disks.list compute.disks.resize compute.disks.setLabels compute.disks.update compute.disks.use compute.disks.useReadOnly compute.globalAddresses.get compute.globalAddresses.list compute.globalAddresses.use compute.
compute.globalOperations.get compute.globalOperations.list compute.images.get compute.images.getFromFamily compute.images.list compute.images.useReadOnly compute.
compute.instanceGroups.*
compute.instanceTemplates.*
compute.instances.*
compute.licenses.get compute.licenses.list compute.machineImages.*
compute.machineTypes.*
compute.
compute.networks.get compute.networks.list compute.networks.use compute.networks.useExternalIp compute.projects.get compute.
compute.regionOperations.get compute.regionOperations.list compute.regions.*
compute.reservations.get compute.reservations.list compute.subnetworks.get compute.subnetworks.list compute.subnetworks.use compute. compute.targetPools.get compute.targetPools.list compute.zoneOperations.get compute.zoneOperations.list compute.zones.*
resourcemanager.projects.get resourcemanager.projects.list serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Compute インスタンス管理者(v1)のロール
詳細 | 権限 |
---|---|
Compute インスタンス管理者(v1)( Compute Engine インスタンス、インスタンス グループ、ディスク、スナップショット、イメージのすべてを管理する権限。すべての Compute Engine ネットワーキング リソースへの読み取り専用権権限。 このロールをユーザーにインスタンス レベルでのみ付与した場合、そのユーザーは新しいインスタンスを作成できません。 18 個のオーナー権限を含む |
compute.acceleratorTypes.*
compute. compute. compute.addresses.get compute.addresses.list compute.addresses.use compute.addresses.useInternal compute.autoscalers.*
compute.backendBuckets.get compute.backendBuckets.list compute.backendServices.get compute.backendServices.list compute.diskTypes.*
compute.disks.*
compute. compute. compute.firewalls.get compute.firewalls.list compute.forwardingRules.get compute.forwardingRules.list compute.globalAddresses.get compute.globalAddresses.list compute.globalAddresses.use compute. compute. compute. compute.
compute.globalOperations.get compute.globalOperations.list compute.healthChecks.get compute.healthChecks.list compute.httpHealthChecks.get compute.httpHealthChecks.list compute.httpsHealthChecks.get compute.httpsHealthChecks.list compute.images.*
|