2.5. GCP でのサービスアカウントの作成
OpenShift Container Platform には、Google API でデータにアクセスするための認証および承認を提供する Google Cloud Platform (GCP) サービスアカウントが必要です。プロジェクトに必要なロールが含まれる既存の IAM サービスアカウントがない場合は、これを作成する必要があります。
前提条件
- クラスターをホストするためのプロジェクトを作成した。
手順
- OpenShift Container Platform クラスターをホストするために使用するプロジェクトでサービスアカウントを作成します。GCP ドキュメントで サービスアカウントの作成 を参照してください。
サービスアカウントに適切な権限を付与します。以下の個別の権限を付与するか、
Ownerロールを割り当てることができます。特定のリソースのサービスアカウントへのロールの付与 を参照してください。注記サービスアカウントをプロジェクトの所有者にすることは、必要な権限を得る最も簡単な方法ですが、その場合、サービスアカウントはプロジェクトに対して完全な管理権限を持つことになります。この権限を提供することに伴うリスクが受け入れ可能であるかどうかを判別する必要があります。
サービスアカウントキーを JSON 形式で作成するか、サービスアカウントを GCP 仮想マシンにアタッチできます。GCP ドキュメントの Creating service account keys および Creating and enabling service accounts for instances を参照してください。
注記サービスアカウントがアタッチされた仮想マシンを使用してクラスターを作成する場合は、インストール前に
install-config.yamlファイルでcredentialsMode: Manualを設定する必要があります。
2.5.1. 必要な GCP のロール リンクのコピーリンクがクリップボードにコピーされました!
作成したサービスアカウントに Owner ロールを割り当てると、OpenShift Container Platform のインストールに必要な権限を含め、すべての権限がそのサービスアカウントに付与されます。組織のセキュリティーポリシーによって、権限のセットをさらに制限することが求められる場合は、次の権限を持つサービスアカウントを作成できます。クラスターを既存の Virtual Private Cloud (VPC) にデプロイする場合、次のリストに記載されているネットワーク権限は、サービスアカウントに必要ありません。
インストールプログラムに必要なロール
- Compute Admin
- Role Administrator
- Security Admin
- Service Account Admin
- Service Account Key Admin
- Service Account User
- Storage Admin
インストール時のネットワークリソースの作成に必要なロール
- DNS Administrator
Passthrough モードで Cloud Credential Operator を使用するために必要なロール
- Compute Load Balancer Admin
- Tag User
次のロールは、コントロールプレーンとコンピュートマシンが使用するサービスアカウントに適用されます。
| アカウント | ロール |
|---|---|
| コントロールプレーン |
|
|
| |
|
| |
|
| |
|
| |
| Compute |
|
|
| |
|
|
2.5.2. installer-provisioned infrastructure に必要な GCP 権限 リンクのコピーリンクがクリップボードにコピーされました!
作成したサービスアカウントに Owner ロールを割り当てると、OpenShift Container Platform のインストールに必要な権限を含め、すべての権限がそのサービスアカウントに付与されます。
組織のセキュリティーポリシーで、より制限的なアクセス許可のセットが必要な場合は、必要なアクセス許可を持つ カスタムロール を作成できます。OpenShift Container Platform クラスターを作成および削除するために、installer-provisioned infrastructure には、以下のパーミッションが必要です。
例2.1 ネットワークリソースの作成に必要な権限
-
compute.addresses.create -
compute.addresses.createInternal -
compute.addresses.delete -
compute.addresses.get -
compute.addresses.list -
compute.addresses.use -
compute.addresses.useInternal -
compute.firewalls.create -
compute.firewalls.delete -
compute.firewalls.get -
compute.firewalls.list -
compute.forwardingRules.create -
compute.forwardingRules.get -
compute.forwardingRules.list -
compute.forwardingRules.setLabels -
compute.globalAddresses.create -
compute.globalAddresses.get -
compute.globalAddresses.use -
compute.globalForwardingRules.create -
compute.globalForwardingRules.get -
compute.globalForwardingRules.setLabels -
compute.networks.create -
compute.networks.get -
compute.networks.list -
compute.networks.updatePolicy -
compute.networks.use -
compute.routers.create -
compute.routers.get -
compute.routers.list -
compute.routers.update -
compute.routes.list -
compute.subnetworks.create -
compute.subnetworks.get -
compute.subnetworks.list -
compute.subnetworks.use -
compute.subnetworks.useExternalIp
例2.2 ロードバランサーリソースの作成に必要な権限
-
compute.backendServices.create -
compute.backendServices.get -
compute.backendServices.list -
compute.backendServices.update -
compute.backendServices.use -
compute.regionBackendServices.create -
compute.regionBackendServices.get -
compute.regionBackendServices.list -
compute.regionBackendServices.update -
compute.regionBackendServices.use -
compute.targetPools.addInstance -
compute.targetPools.create -
compute.targetPools.get -
compute.targetPools.list -
compute.targetPools.removeInstance -
compute.targetPools.use -
compute.targetTcpProxies.create -
compute.targetTcpProxies.get -
compute.targetTcpProxies.use
例2.3 DNS リソースの作成に必要な権限
-
dns.changes.create -
dns.changes.get -
dns.managedZones.create -
dns.managedZones.get -
dns.managedZones.list -
dns.networks.bindPrivateDNSZone -
dns.resourceRecordSets.create -
dns.resourceRecordSets.list
例2.4 サービスアカウントリソースの作成に必要な権限
-
iam.serviceAccountKeys.create -
iam.serviceAccountKeys.delete -
iam.serviceAccountKeys.get -
iam.serviceAccountKeys.list -
iam.serviceAccounts.actAs -
iam.serviceAccounts.create -
iam.serviceAccounts.delete -
iam.serviceAccounts.get -
iam.serviceAccounts.list -
resourcemanager.projects.get -
resourcemanager.projects.getIamPolicy -
resourcemanager.projects.setIamPolicy
例2.5 コンピューティングリソースの作成に必要な権限
-
compute.disks.create -
compute.disks.get -
compute.disks.list -
compute.disks.setLabels -
compute.instanceGroups.create -
compute.instanceGroups.delete -
compute.instanceGroups.get -
compute.instanceGroups.list -
compute.instanceGroups.update -
compute.instanceGroups.use -
compute.instances.create -
compute.instances.delete -
compute.instances.get -
compute.instances.list -
compute.instances.setLabels -
compute.instances.setMetadata -
compute.instances.setServiceAccount -
compute.instances.setTags -
compute.instances.use -
compute.machineTypes.get -
compute.machineTypes.list
例2.6 ストレージリソースの作成に必要
-
storage.buckets.create -
storage.buckets.delete -
storage.buckets.get -
storage.buckets.list -
storage.objects.create -
storage.objects.delete -
storage.objects.get -
storage.objects.list
例2.7 ヘルスチェックリソースを作成するために必要な権限
-
compute.healthChecks.create -
compute.healthChecks.get -
compute.healthChecks.list -
compute.healthChecks.useReadOnly -
compute.httpHealthChecks.create -
compute.httpHealthChecks.get -
compute.httpHealthChecks.list -
compute.httpHealthChecks.useReadOnly -
compute.regionHealthChecks.create -
compute.regionHealthChecks.get -
compute.regionHealthChecks.useReadOnly
例2.8 GCP ゾーンとリージョン関連の情報を取得するために必要な権限
-
compute.globalOperations.get -
compute.regionOperations.get -
compute.regions.get -
compute.regions.list -
compute.zoneOperations.get -
compute.zones.get -
compute.zones.list
例2.9 サービスとクォータを確認するために必要な権限
-
monitoring.timeSeries.list -
serviceusage.quotas.get -
serviceusage.services.list
例2.10 インストールに必要な IAM パーミッション
-
iam.roles.create -
iam.roles.get -
iam.roles.update
例2.11 サービスアカウントキーなしで認証する場合に必要な権限
-
iam.serviceAccounts.signBlob
例2.12 インストールのためのオプションのイメージ権限
-
compute.images.list
例2.13 収集ブートストラップを実行するためのオプションの権限
-
compute.instances.getSerialPortOutput
例2.14 ネットワークリソースを削除するために必要な権限
-
compute.addresses.delete -
compute.addresses.deleteInternal -
compute.addresses.list -
compute.addresses.setLabels -
compute.firewalls.delete -
compute.firewalls.list -
compute.forwardingRules.delete -
compute.forwardingRules.list -
compute.globalAddresses.delete -
compute.globalAddresses.list -
compute.globalForwardingRules.delete -
compute.globalForwardingRules.list -
compute.networks.delete -
compute.networks.list -
compute.networks.updatePolicy -
compute.routers.delete -
compute.routers.list -
compute.routes.list -
compute.subnetworks.delete -
compute.subnetworks.list
例2.15 ロードバランサーリソースを削除するために必要な権限
-
compute.backendServices.delete -
compute.backendServices.list -
compute.regionBackendServices.delete -
compute.regionBackendServices.list -
compute.targetPools.delete -
compute.targetPools.list -
compute.targetTcpProxies.delete -
compute.targetTcpProxies.list
例2.16 DNS リソースを削除するために必要な権限
-
dns.changes.create -
dns.managedZones.delete -
dns.managedZones.get -
dns.managedZones.list -
dns.resourceRecordSets.delete -
dns.resourceRecordSets.list
例2.17 サービスアカウントリソースを削除するために必要な権限
-
iam.serviceAccounts.delete -
iam.serviceAccounts.get -
iam.serviceAccounts.list -
resourcemanager.projects.getIamPolicy -
resourcemanager.projects.setIamPolicy
例2.18 コンピューティングリソースを削除するために必要な権限
-
compute.disks.delete -
compute.disks.list -
compute.instanceGroups.delete -
compute.instanceGroups.list -
compute.instances.delete -
compute.instances.list -
compute.instances.stop -
compute.machineTypes.list
例2.19 ストレージリソースの削除に必要
-
storage.buckets.delete -
storage.buckets.getIamPolicy -
storage.buckets.list -
storage.objects.delete -
storage.objects.list
例2.20 ヘルスチェックリソースを削除するために必要な権限
-
compute.healthChecks.delete -
compute.healthChecks.list -
compute.httpHealthChecks.delete -
compute.httpHealthChecks.list -
compute.regionHealthChecks.delete -
compute.regionHealthChecks.list
例2.21 削除に必要なイメージ権限
-
compute.images.list
2.5.3. 共有 VPC インストールに必要な GCP パーミッション リンクのコピーリンクがクリップボードにコピーされました!
クラスターを 共有 VPC にインストールする場合は、ホストプロジェクトとサービスプロジェクトの両方のサービスアカウントを設定する必要があります。共有 VPC にインストールしない場合は、このセクションをスキップできます。
上記の標準インストールに必要な最小限のロールをサービスプロジェクトに適用する必要があります。
手動または mint 認証情報モードで動作する Cloud Credential Operator に対して、詳細な権限を使用できます。パススルー認証情報モードでは、詳細な権限は使用できません。
ホストプロジェクトが、サービスアカウントに次のいずれかの設定を適用していることを確認します。
例2.22 ホストプロジェクトでファイアウォールを作成するために必要な権限
-
projects/<host-project>/roles/dns.networks.bindPrivateDNSZone -
roles/compute.networkAdmin -
roles/compute.securityAdmin
例2.23 ホストプロジェクトでファイアウォールを削除するために必要な権限
-
compute.firewalls.delete -
compute.networks.updatePolicy
例2.24 必要な最小限の権限
-
projects/<host-project>/roles/dns.networks.bindPrivateDNSZone -
roles/compute.networkUser
install-config.yaml ファイルでコントロールプレーンノードのサービスアカウントを指定しない場合は、ホストプロジェクトのサービスアカウントに以下の権限を付与してください。install-config.yaml ファイルでコンピュートノードのサービスアカウントを指定しない場合は、クラスターを破棄するために、ホストプロジェクトのサービスアカウントに以下の権限を付与してください。
-
resourcemanager.projects.getIamPolicy -
resourcemanager.projects.setIamPolicy
2.5.4. ユーザー提供のサービスアカウントに必要な GCP 権限 リンクのコピーリンクがクリップボードにコピーされました!
クラスターをインストールする場合は、コンピュートノードとコントロールプレーンノードに独自のサービスアカウントが必要です。デフォルトでは、インストールプログラムはコントロールプレーンとコンピュートノードのサービスアカウントを作成します。インストールプログラムが使用するサービスアカウントには、GCP でのサービスアカウントの作成 セクションに記載されているロールと権限に加えて、resourcemanager.projects.getIamPolicy 権限と resourcemanager.projects.setIamPolicy 権限が必要です。これらの権限は、ホストプロジェクトのサービスアカウントに適用する必要があります。このアプローチが組織のセキュリティー要件を満たさない場合は、install-config.yaml ファイルでコントロールプレーンまたはコンピュートノードのサービスアカウントのメールアドレスを指定できます。詳細は、GCP のインストール設定パラメーター ページを参照してください。共有 VPC へのインストール中にコントロールプレーンノードのサービスアカウントを提供する場合は、そのサービスアカウントにホストプロジェクト内の roles/compute.networkUser ロールを付与する必要があります。コントロールプレーンサービスアカウントを指定したときにインストールプログラムによってファイアウォールルールが自動的に作成されるようにするには、そのサービスアカウントにホストプロジェクト内の roles/compute.networkAdmin ロールおよび roles/compute.securityAdmin ロールを付与する必要があります。roles/compute.networkUser ロールのみを指定する場合は、ファイアウォールルールを手動で作成する必要があります。
コントロールプレーンとコンピュートノードのユーザー提供のサービスアカウントには、それぞれ次のロールが必要です。
例2.25 コントロールプレーンノードに必要なロール
-
roles/compute.instanceAdmin -
roles/compute.networkAdmin -
roles/compute.securityAdmin -
roles/storage.admin
例2.26 コンピュートノードに必要なロール
-
roles/compute.viewer -
roles/storage.admin -
roles/artifactregistry.reader