Computeインスタンス管理者 ロール「v1」「ベータ版」の違いとは?

Google Cloud
スポンサーリンク

ロールの「Compute インスタンス管理者」には「ベータ版」と「v1」の2種類があるけど、どっちを使うべきなんだろう? というか、何が違うんだ?

Google CloudのCompute Engineにおいて、インスタンス管理権限を持つ事前定義ロールには、次の2種類があります。

  • Compute インスタンス管理者(ベータ版 [roles/compute.instanceAdmin]
  • Compute インスタンス管理者(v1 [roles/compute.instanceAdmin.v1]

本記事ではこの「ベータ版」と「v1」のロールの違いについて、調べた結果を紹介します。ロールに含まれる権限を細かく比較した表も載せています。ただし、各ロールの使い分け(ユースケース)については、情報が無いため独自の推測にとどまっており、煮え切らない結論になっております。

結論

「ベータ版」「v1」の2つのロールの違いを一言で表すのは難しいのですが、含まれる権限を比較した結果を見ると、次のことが言えると思います。

権限の違い
  • 「v1」の方が強い権限を持ち、「ベータ版」にある権限はすべて「v1」にも含まれる。
  • VMインスタンスにフルアクセス可能なのはどちらも同じだが、「v1」はスナップショット、イメージ、ディスク、ネットワークリソースなどに対してより広範な権限を有する。

詳細な権限の比較結果は「権限の比較」に載せています。

「ベータ版」は「v1」の機能限定版といったイメージに見えますが、どのようなシーンで「ベータ版」を使うべきなのかは、情報が見つからず分かりません。このあたりは考察として後述していますが、おそらくは過去の互換性のために残っているロールではないかと想像しています。

これから新たにCompute Engineのインスタンス管理者権限を付与する場合は、特別な理由がない限り「v1」のロールを使うことで良いのではないかと筆者は考えています。

権限の比較

「ベータ版」と「v1」に含まれる権限については、Google Cloud公式ドキュメントの「Compute Engine IAM のロールと権限」に記載があります。これを比較した結果(2023年8月時点)を、下の表に示します。

ピンクでマークしている項目が、両者で差異のある権限です。この結果から、「v1」は「ベータ版」が持つ権限をすべて包含していることが分かります。

項目Compute インスタンス管理者
(ベータ版)
[roles/compute.instanceAdmin]
Compute インスタンス管理者
(v1)
[roles/compute.instanceAdmin.v1]
acceleratorTypescompute.acceleratorTypes.*compute.acceleratorTypes.*
addressescompute.addresses.createInternal
compute.addresses.deleteInternal
compute.addresses.get
compute.addresses.list
compute.addresses.use
compute.addresses.useInternal
compute.addresses.createInternal
compute.addresses.deleteInternal
compute.addresses.get
compute.addresses.list
compute.addresses.use
compute.addresses.useInternal
autoscalerscompute.autoscalers.*compute.autoscalers.*
backendBucketscompute.backendBuckets.get
compute.backendBuckets.list
compute.backendBuckets.listEffectiveTags
compute.backendBuckets.listTagBindings
backendServicescompute.backendServices.get
compute.backendServices.list
compute.backendServices.listEffectiveTags
compute.backendServices.listTagBindings
diskscompute.disks.create
compute.disks.createSnapshot
compute.disks.delete
compute.disks.get
compute.disks.list
compute.disks.resize
compute.disks.setLabels
compute.disks.startAsyncReplication
compute.disks.stopAsyncReplication
compute.disks.stopGroupAsyncReplication
compute.disks.update
compute.disks.use
compute.disks.useReadOnly
compute.disks.*
diskTypescompute.diskTypes.*compute.diskTypes.*
externalVpnGatewayscompute.externalVpnGateways.get
compute.externalVpnGateways.list
firewallscompute.firewalls.get
compute.firewalls.list
compute.firewalls.listEffectiveTags
compute.firewalls.listTagBindings
forwardingRulescompute.forwardingRules.get
compute.forwardingRules.list
compute.forwardingRules.listEffectiveTags
compute.forwardingRules.listTagBindings
globalAddressescompute.globalAddresses.get
compute.globalAddresses.list
compute.globalAddresses.use
compute.globalAddresses.get
compute.globalAddresses.list
compute.globalAddresses.use
globalForwardingRulescompute.globalForwardingRules.get
compute.globalForwardingRules.list
compute.globalForwardingRules.listEffectiveTags
compute.globalForwardingRules.listTagBindings
compute.globalForwardingRules.pscGet
globalNetworkEndpointGroupscompute.globalNetworkEndpointGroups.*compute.globalNetworkEndpointGroups.*
globalOperationscompute.globalOperations.get
compute.globalOperations.list
compute.globalOperations.get
compute.globalOperations.list
healthCheckscompute.healthChecks.get
compute.healthChecks.list
compute.healthChecks.listEffectiveTags
compute.healthChecks.listTagBindings
httpHealthCheckscompute.httpHealthChecks.get
compute.httpHealthChecks.list
compute.httpHealthChecks.listEffectiveTags
compute.httpHealthChecks.listTagBindings
httpsHealthCheckscompute.httpsHealthChecks.get
compute.httpsHealthChecks.list
compute.httpsHealthChecks.listEffectiveTags
compute.httpsHealthChecks.listTagBindings
imagescompute.images.get
compute.images.getFromFamily
compute.images.list
compute.images.useReadOnly
compute.images.*
instanceGroupManagerscompute.instanceGroupManagers.*compute.instanceGroupManagers.*
instanceGroupscompute.instanceGroups.*compute.instanceGroups.*
instancescompute.instances.*compute.instances.*
instanceTemplatescompute.instanceTemplates.*compute.instanceTemplates.*
instantSnapshotscompute.instantSnapshots.*
interconnectAttachmentscompute.interconnectAttachments.get
compute.interconnectAttachments.list
interconnectLocationscompute.interconnectLocations.*
interconnectRemoteLocationscompute.interconnectRemoteLocations.*
interconnectscompute.interconnects.get
compute.interconnects.list
licenseCodescompute.licenseCodes.*
licensescompute.licenses.get
compute.licenses.list
compute.licenses.*
machineImagescompute.machineImages.*compute.machineImages.*
machineTypescompute.machineTypes.*compute.machineTypes.*
networkAttachmentscompute.networkAttachments.get
compute.networkAttachments.list
networkEndpointGroupscompute.networkEndpointGroups.*compute.networkEndpointGroups.*
networkscompute.networks.get
compute.networks.list
compute.networks.listEffectiveTags
compute.networks.listTagBindings
compute.networks.use
compute.networks.useExternalIp
compute.networks.get
compute.networks.list
compute.networks.listEffectiveTags
compute.networks.listTagBindings
compute.networks.use
compute.networks.useExternalIp
projectscompute.projects.getcompute.projects.get
compute.projects.setCommonInstanceMetadata
regionBackendServicescompute.regionBackendServices.get
compute.regionBackendServices.list
compute.regionBackendServices.listEffectiveTags
compute.regionBackendServices.listTagBindings
regionHealthCheckscompute.regionHealthChecks.get
compute.regionHealthChecks.list
compute.regionHealthChecks.listEffectiveTags
compute.regionHealthChecks.listTagBindings
regionHealthCheckServicescompute.regionHealthCheckServices.get
compute.regionHealthCheckServices.list
regionNetworkEndpointGroupscompute.regionNetworkEndpointGroups.*compute.regionNetworkEndpointGroups.*
regionNotificationEndpointscompute.regionNotificationEndpoints.get
compute.regionNotificationEndpoints.list
regionOperationscompute.regionOperations.get
compute.regionOperations.list
compute.regionOperations.get
compute.regionOperations.list
regionscompute.regions.*compute.regions.*
regionSslCertificatescompute.regionSslCertificates.get
compute.regionSslCertificates.list
compute.regionSslCertificates.listEffectiveTags
compute.regionSslCertificates.listTagBindings
regionSslPoliciescompute.regionSslPolicies.get
compute.regionSslPolicies.list
compute.regionSslPolicies.listAvailableFeatures
regionTargetHttpProxiescompute.regionTargetHttpProxies.get
compute.regionTargetHttpProxies.list
compute.regionTargetHttpProxies.listEffectiveTags
compute.regionTargetHttpProxies.listTagBindings
regionTargetHttpsProxiescompute.regionTargetHttpsProxies.get
compute.regionTargetHttpsProxies.list
compute.regionTargetHttpsProxies.listEffectiveTags
compute.regionTargetHttpsProxies.listTagBindings
regionTargetTcpProxiescompute.regionTargetTcpProxies.get
compute.regionTargetTcpProxies.list
regionUrlMapscompute.regionUrlMaps.get
compute.regionUrlMaps.list
compute.regionUrlMaps.listEffectiveTags
compute.regionUrlMaps.listTagBindings
reservationscompute.reservations.get
compute.reservations.list
compute.reservations.get
compute.reservations.list
resourcePoliciescompute.resourcePolicies.useReadOnlycompute.resourcePolicies.*
routerscompute.routers.get
compute.routers.list
routescompute.routes.get
compute.routes.list
compute.routes.listEffectiveTags
compute.routes.listTagBindings
serviceAttachmentscompute.serviceAttachments.get
compute.serviceAttachments.list
snapshotscompute.snapshots.*
sslCertificatescompute.sslCertificates.get
compute.sslCertificates.list
compute.sslCertificates.listEffectiveTags
compute.sslCertificates.listTagBindings
sslPoliciescompute.sslPolicies.get
compute.sslPolicies.list
compute.sslPolicies.listAvailableFeatures
compute.sslPolicies.listEffectiveTags
compute.sslPolicies.listTagBindings
subnetworkscompute.subnetworks.get
compute.subnetworks.list
compute.subnetworks.listEffectiveTags
compute.subnetworks.listTagBindings
compute.subnetworks.use
compute.subnetworks.useExternalIp
compute.subnetworks.get
compute.subnetworks.list
compute.subnetworks.listEffectiveTags
compute.subnetworks.listTagBindings
compute.subnetworks.use
compute.subnetworks.useExternalIp
targetGrpcProxiescompute.targetGrpcProxies.get
compute.targetGrpcProxies.list
targetHttpProxiescompute.targetHttpProxies.get
compute.targetHttpProxies.list
compute.targetHttpProxies.listEffectiveTags
compute.targetHttpProxies.listTagBindings
targetHttpsProxiescompute.targetHttpsProxies.get
compute.targetHttpsProxies.list
compute.targetHttpsProxies.listEffectiveTags
compute.targetHttpsProxies.listTagBindings
targetInstancescompute.targetInstances.get
compute.targetInstances.list
compute.targetInstances.listEffectiveTags
compute.targetInstances.listTagBindings
targetPoolscompute.targetPools.get
compute.targetPools.list
compute.targetPools.listEffectiveTags
compute.targetPools.listTagBindings
compute.targetPools.get
compute.targetPools.list
compute.targetPools.listEffectiveTags
compute.targetPools.listTagBindings
targetSslProxiescompute.targetSslProxies.get
compute.targetSslProxies.list
compute.targetSslProxies.listEffectiveTags
compute.targetSslProxies.listTagBindings
targetTcpProxiescompute.targetTcpProxies.get
compute.targetTcpProxies.list
compute.targetTcpProxies.listEffectiveTags
compute.targetTcpProxies.listTagBindings
targetVpnGatewayscompute.targetVpnGateways.get
compute.targetVpnGateways.list
urlMapscompute.urlMaps.get
compute.urlMaps.list
compute.urlMaps.listEffectiveTags
compute.urlMaps.listTagBindings
vpnGatewayscompute.vpnGateways.get
compute.vpnGateways.list
vpnTunnelscompute.vpnTunnels.get
compute.vpnTunnels.list
zoneOperationscompute.zoneOperations.get
compute.zoneOperations.list
compute.zoneOperations.get
compute.zoneOperations.list
zonescompute.zones.*compute.zones.*
resourcemanager.projectsresourcemanager.projects.get
resourcemanager.projects.list
resourcemanager.projects.get
resourcemanager.projects.list
serviceusage.quotasserviceusage.quotas.getserviceusage.quotas.get
serviceusage.servicesserviceusage.services.get
serviceusage.services.list
serviceusage.services.get
serviceusage.services.list

考察

権限の違いは前述の通りですが、そもそも「なぜ2種類のロールがあるのか」については公式ドキュメントやWebを検索しても、有効な記述が見つかりませんでした。ここからは事実ではなく、筆者の推測です。

「ベータ版」のロール識別子が「roles/compute.instanceAdmin」(「.v1」がつかない)であることから、「ベータ版」が先に作られたと思われます。

その後Google Cloudの機能追加により、スナップショットやより多くのネットワークリソースなどを含めた、より広範な権限を持つロールが必要になったのではないでしょうか。しかし単純に権限を追加したのでは、そのロールを使っているユーザーに対して急に強い権限が付与されます。これはセキュリティ上望ましくない可能性があります。

そのため、それまでとは別のロールとして、新しく「v1」を作ったのではないでしょうか。もしかするとその際に、元のロールのタイトルに「ベータ版」という文言を加えたのかもしれません。

こうして、以前のロールの権限範囲を保ったまま、新しい機能に対応したロールが生まれたという仮説です。それであれば、これから新たに「ベータ版」を使うケースはほとんどないのかもしれません。

繰り返しになりますが、あくまで推測です。本当の理由が記載されたドキュメントがあれば、そちらを参照して下さい。

参考URL

おわりに

今回の記事は以上です。

当サイトでは、ITインフラ関連の知識やノウハウをメインに紹介しています。下の関連記事にも役立つ情報があるかもしれませんので、ぜひご覧下さい。

また、知識やノウハウを効率的に学ぶ方法として、Udemy の「ながらセミナーもおすすめです。三日坊主にならず、普段の生活の中でスキルアップする方法です。これについては下の記事で紹介していますので、良ければご覧下さい。

もとだて
もとだて

最後まで読んでいただき、ありがとうございました。

フィードバック

コメント

タイトルとURLをコピーしました