2.5. 在 GCP 中创建服务帐户
OpenShift Container Platform 需要一个 Google Cloud Platform(GCP)服务帐户,它提供访问 Google API 中数据的验证和授权。如果您没有包含项目中所需角色的现有 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 模式运行,则必须使用角色而不是粒度权限。
如果您将集群部署到现有的虚拟私有云 (VPC) 中,则服务帐户不需要某些网络权限,如以下列表中记录:
安装程序所需的角色
- Compute Admin
- IAM Security Admin
- Service Account Admin
- Service Account Key Admin
- Service Account User
- Storage Admin
安装过程中创建网络资源所需的角色
- DNS Administrator
使用 passthrough 凭证模式所需的角色
- Compute Load Balancer Admin
- IAM 角色视图
角色应用到 control plane 和计算机器使用的服务帐户:
| 帐户 | 角色 |
|---|---|
| Control Plane |
|
|
| |
|
| |
|
| |
|
| |
| Compute |
|
|
|
2.5.2. 安装程序置备的基础架构所需的 GCP 权限 复制链接链接已复制到粘贴板!
将 Owner 角色附加到您创建的服务帐户时,您可以为该服务帐户授予所有权限,包括安装 OpenShift Container Platform 所需的权限。
如果机构的安全策略需要更严格的权限集,您可以创建具有所需权限的自定义角色。安装程序置备的基础架构需要以下权限来创建和删除 OpenShift Container Platform 集群。
如果将 Cloud Credential Operator 配置为以 passthrough 模式运行,则必须使用角色而不是粒度权限。如需更多信息,请参阅 "Required GCP roles" 部分中的"Required roles for using passthrough credentials mode"。
例 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. 运行收集 bootstrap 的可选权限
-
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
2.5.3. 共享 VPC 安装所需的 GCP 权限 复制链接链接已复制到粘贴板!
当将集群安装到 共享 VPC 时,您必须为主机项目和服务项目配置服务帐户。如果您没有安装到共享 VPC 中,您可以跳过本节。
您必须将上面列出的标准安装所需的最小角色应用到服务项目。
对于以手动或 mint 凭证模式运行的 Cloud Credential Operator,您可以使用粒度权限。您不能在 passthrough 凭证模式中使用粒度权限。
确保主机项目将以下配置之一应用到服务帐户:
例 2.22. 在主机项目中创建防火墙所需的权限
-
projects/<host-project>/roles/dns.networks.bindPrivateDNSZone -
roles/compute.networkAdmin -
roles/compute.securityAdmin
例 2.23. 所需的最小权限
-
projects/<host-project>/roles/dns.networks.bindPrivateDNSZone -
roles/compute.networkUser