2.5. GCP でのサービスアカウントの作成
OpenShift Container Platform には、Google API でデータにアクセスするための認証および承認を提供する Google Cloud Platform (GCP) サービスアカウントが必要です。プロジェクトに必要なロールが含まれる既存の IAM サービスアカウントがない場合は、これを作成する必要があります。
前提条件
- クラスターをホストするためのプロジェクトを作成した。
手順
- OpenShift Container Platform クラスターをホストするために使用するプロジェクトでサービスアカウントを作成します。GCP ドキュメントで サービスアカウントの作成 を参照してください。
サービスアカウントに適切な権限を付与します。以下の個別の権限を付与するか、
Ownerロールを割り当てることができます。特定のリソースのサービスアカウントへのロールの付与 を参照してください。注記サービスアカウントをプロジェクトの所有者にすることは、必要な権限を得る最も簡単な方法ですが、その場合、サービスアカウントはプロジェクトに対して完全な管理権限を持つことになります。この権限を提供することに伴うリスクが受け入れ可能であるかどうかを判別する必要があります。
サービスアカウントキーを JSON 形式で作成するか、サービスアカウントを GCP 仮想マシンにアタッチできます。GCP ドキュメントの サービスアカウントキー の 作成とインスタンスのサービスアカウントの作成と有効 化をご覧ください。
クラスターを作成するには、サービスアカウントキーまたはサービスアカウントがアタッチされた仮想マシンが必要です。
注記サービスアカウントがアタッチされた仮想マシンを使用してクラスターを作成する場合は、インストール前に
install-config.yamlファイルでcredentialsMode: Manualを設定する必要があります。
2.5.1. 必要な GCP のロール リンクのコピーリンクがクリップボードにコピーされました!
作成したサービスアカウントに Owner ロールを割り当てると、OpenShift Container Platform のインストールに必要な権限を含め、すべての権限がそのサービスアカウントに付与されます。組織のセキュリティーポリシーによって、権限のセットをさらに制限することが求められる場合は、次の権限を持つサービスアカウントを作成できます。
Cloud Credential Operator を passthrough モードで動作するように設定する場合、粒度の細かいパーミッションではなくロールを使用する必要があります。
クラスターを既存の Virtual Private Cloud (VPC) にデプロイする場合、次のリストに記載されているネットワーク権限は、サービスアカウントに必要ありません。
インストールプログラムに必要なロール
- Compute 管理者
- IAM セキュリティー管理者
- サービスアカウント管理者
- Service Account Key Admin
- Service Account User
- Storage Admin
インストール時のネットワークリソースの作成に必要なロール
- DNS 管理者
パススルー認証情報モードの使用に必要なロール
- ロードバランサー計算の管理者
- IAM ロールビューアー
ロールは、コントロールプレーンおよびコンピュートマシンが使用するサービスアカウントに適用されます。
| アカウント | ロール |
|---|---|
| コントロールプレーン |
|
|
| |
|
| |
|
| |
|
| |
| Compute |
|
|
|
2.5.2. installer-provisioned infrastructure に必要な GCP 権限 リンクのコピーリンクがクリップボードにコピーされました!
作成したサービスアカウントに Owner ロールを割り当てると、OpenShift Container Platform のインストールに必要な権限を含め、すべての権限がそのサービスアカウントに付与されます。
組織のセキュリティーポリシーで、より制限的なアクセス許可のセットが必要な場合は、必要なアクセス許可を持つ カスタムロール を作成できます。OpenShift Container Platform クラスターを作成および削除するために、installer-provisioned infrastructure には、以下のパーミッションが必要です。
Cloud Credential Operator を passthrough モードで動作するように設定する場合、粒度の細かいパーミッションではなくロールを使用する必要があります。詳細は、「必須の GCP ロール」セクションの「パススルー認証情報モードを使用するための必要なロール」を参照してください。
例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.networks.create -
compute.networks.get -
compute.networks.list -
compute.networks.updatePolicy -
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.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
例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.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
例2.8 GCP ゾーンとリージョン関連の情報を取得するために必要な権限
-
compute.globalOperations.get -
compute.regionOperations.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.get
例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.firewalls.delete -
compute.firewalls.list -
compute.forwardingRules.delete -
compute.forwardingRules.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.regionBackendServices.delete -
compute.regionBackendServices.list -
compute.targetPools.delete -
compute.targetPools.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
例2.21 削除に必要なイメージ権限
-
compute.images.list