AWS IAM 角色
引导 IAM 角色
引导 IAM 角色需要具备以下权限:- EC2 和 VPC 操作:用于设置 VPC 和 EKS 集群。
- S3 操作 (例如
s3:CreateBucket) :用于为 ClickHouse BYOC Storage 创建 bucket。 - IAM 操作 (例如
iam:CreatePolicy) :供控制器创建其他角色所需 (详见下一节) 。 - EKS 操作:仅限名称以前缀
clickhouse-cloud开头的资源。
控制器创建的其他 IAM 角色
除了通过 CloudFormation 创建的ClickHouseManagementRole 之外,控制器还会创建其他几个角色。
这些角色由运行在客户 EKS 集群中的应用来承担:
- 状态导出器角色
- 向 ClickHouse Cloud 报告服务健康信息的 ClickHouse 组件。
- 需要具备向 ClickHouse Cloud 拥有的 SQS 队列写入的权限。
- 负载均衡控制器
- 标准的 AWS 负载均衡控制器。
- 用于管理 ClickHouse 服务卷的 EBS CSI 控制器。
- External-DNS
- 将 DNS 配置同步到 Route 53。
- Cert-Manager
- 为 BYOC 服务域预配 TLS 证书。
- 集群自动扩缩器
- 根据需要调整节点组规模。
- 监控存储 (Thanos)
- 由集群中的 Prometheus 和 Thanos 工作负载承担。
- 写入和读取长期保留的指标数据,范围限定为您自己账户中的监控存储桶。
data-plane-mgmt 允许 ClickHouse Cloud 控制平面组件协调所需的自定义资源,例如 ClickHouseCluster 以及 Istio Virtual Service/Gateway。
GCP 服务账号
引导服务账号
引导服务账号会被授予项目级自定义角色,这些角色具备以下权限:- 通用:基础只读和身份相关权限。
- VPC:管理承载你的 BYOC 基础设施的 VPC、子网、路由以及 Private Service Connect 附加连接。
- 集群:管理 GKE 集群及集群内资源。
- 存储:用于管理存放 ClickHouse 备份、共享状态和监控数据的 Cloud Storage 存储桶。
- IAM 角色:管理项目内的服务账号和自定义角色。此角色不授予创建服务账号密钥、绑定组织策略或操作其他项目中任何资源的能力。
控制器创建的其他服务账号
除了在 onboarding 过程中通过 Terraform 创建的clickhouse-management 服务账号外,当你预配首个 BYOC 服务时,ClickHouse 的 控制平面 (以 clickhouse-management 身份进行身份验证) 会在你的项目中为特定的集群内工作负载创建其他服务账号。每个账号都只授予一组权限范围严格且用途单一的权限。
- GKE 节点运行时身份
- 附加到你的 BYOC 集群中的每个 GKE 节点虚拟机。
- 供 kubelet 节点代理、节点本地 agent 以及 Cloud Operations collectors 发送日志和指标,也供镜像拉取子系统下载容器镜像。
- 计费抓取器身份
- 由独立运行的抓取器工作负载用于收集计费 telemetry。
- 监控身份
- 作为在你的集群中运行的 monitoring stack 的目标身份。用于对专用于此部署的 GCS 存储桶中的长期指标存储进行读写。
- ClickHouse 运行时管理身份
- 由 ClickHouse 的运行时数据平面管理控制器使用,该控制器负责处理第 2 天运维操作,例如 Private Service Connect 端点管理、存储桶生命周期调整以及服务账号轮换。
state-exporter 服务账号能够模拟该身份。整个过程不涉及任何密钥材料,且向 Pub/Sub 发布数据的身份在你的项目中不持有任何权限。
Azure 角色与身份
Onboarding 服务主体
使用 Azure Terraform 模块 进行 Onboarding 时,将遵循 Azure 的跨租户身份验证指南,在你的租户中将多租户应用程序预配为 Enterprise Application (服务主体) 。该服务主体会被授予作用域为目标订阅的最小权限自定义角色,包含以下权限:- 网络:管理承载 BYOC 基础设施的 VNet、子网、公网 IP、NAT 网关、网络安全组和 DNS 区域。
- 集群:管理 AKS 集群和节点池。
- 存储:管理用于存储 ClickHouse 数据、备份和监控数据的存储账户及 Blob 容器。
- 身份:管理订阅中的用户分配托管标识及其联合身份凭据。
- 授权:管理自定义角色定义和角色分配。所有权限均限定在目标订阅范围内——该角色无法操作其他订阅或租户中的资源。
控制器创建的其他托管标识
预配 BYOC 服务时,ClickHouse 控制平面会在您的订阅中创建用户分配的托管标识。每个标识都与特定的 Kubernetes 服务账号 (Workload Identity) 建立联合,并仅具有范围有限、用途单一的权限集:- 每服务标识
- 每个 ClickHouse 服务使用此标识,通过作用域限定为该存储账户的自定义 Blob 存储角色,访问其自身存储账户中的表数据和备份。
- 从备份还原服务时,该服务还会获得对源服务备份容器的只读访问权限。
- 共享基础设施标识
- ClickHouse 运行时数据平面管理控制器将其用于 Private Link 服务管理等第 2 天运维操作。
- 监控标识
- 通过作用域限定为监控存储访问的自定义角色,与您集群中的 Thanos 工作负载建立联合。
- 在您自己的订阅中写入和读取长期保留的指标。
state-exporter 服务账号为其获取标记,无需交换任何机密。向 Service Bus 发布消息的标识在您的订阅中不持有任何权限。
这与 AWS 不同:在 AWS 上,发布角色是在您自己的账户中创建的,并通过担任 ClickHouse 侧的角色来访问队列。而在 GCP 和 Azure 上,发布标识完全位于 ClickHouse 侧,您的集群仅与其建立联合,因此对于该流程,您无需审计任何额外的账户内权限。出站流量本身已在网络边界中列明。