在金融风控、医疗健康等需要实现机密计算的场景下,您可以在ACK集群中通过CAA(Cloud API Adaptor)方案部署机密计算工作负载,基于Intel® TDX技术保护敏感数据免受外部攻击或云厂商的潜在威胁,以满足行业的合规要求。
Intel® TDX是一项基于CPU硬件的ECS保护技术,详情请参见TDX介绍。
功能介绍
CAA( Cloud API Adaptor,也称 Peer Pods)是云原生CNCF机密容器Confidential Containers项目的核心组件之一,可通过调用云平台 OpenAPI 将机密计算能力无缝集成到 Kubernetes 集群中,自动创建机密虚拟机。这些虚拟机可作为特殊的“机密沙箱”来运行工作负载 Pod,使用底层硬件的 TEE 技术来保护工作负载的运行时数据安全。优势如下。
简单易用:无需运维底层裸金属架构或嵌套虚拟化技术栈,连接ACK集群后可通过kubectl命令部署机密计算工作负载。
安全机密:工作负载运行在ECS机密虚拟机中,基于硬件级内存加密与隔离机制确保运行时数据的完整性与机密性。
开源兼容:ACK协同Confidential Containers社区实现了在集群中基于 CAA 方案部署机密计算工作负载,通过代码开源透明化(Code Transparency)接受社区持续审计。
您可以在ACK集群中部署 CAA DaemonSet,然后在此基础上部署机密计算工作负载。工作负载会以Pod的形式创建并运行在机密虚拟机内,从而保证整个容器生命周期的运行时数据安全,防止虚拟机之外的攻击者攻击。流程如下。
准备工作
TDX机密计算环境存在一些已知功能限制,在使用前请充分了解。
已创建一个ACK托管集群Pro版,且满足以下需求。详细信息,请参见创建ACK托管集群。
配置项
说明
地域
仅支持华北2(北京)。
Kubernetes 版本
1.22及以上,1.33以下。
如需升级集群,请参见手动升级集群。
网络插件
Flannel。
为专有网络配置 SNAT
开启,为集群开启访问公网的能力。
也支持为已创建的集群启用该能力,请参见为集群开启访问公网的能力。
RRSA OIDC
开启。RRSA可在集群内实现Pod维度的OpenAPI权限隔离,从而实现云资源访问权限的细粒度隔离,降低安全风险。
也支持为已创建的集群启用该能力,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离。
启用后,请参见获取集群中OIDC提供商的URL和ARN信息获取提供商ARN,供后续配置身份认证使用。
仅支持使用华北2(北京)可用区I下的vSwitch,请参见创建和管理交换机进行创建。
步骤一:配置RRSA
为了让CAA在机密容器场景下能够管理和配置机密虚拟机,您需要配置必要的身份(RAM 角色)和权限(RAM 策略)。下文介绍如何让Cloud API Adaptor ServiceAccount获得操作ECS和VPC资源的权限,实现Pod级别的精细权限控制。
1、创建RAM角色
请参见创建可信实体为身份提供商的RAM角色创建一个RAM角色。本示例RAM角色名为ack-caa-demo
,主要参数如下。
配置项 | 描述 |
身份提供者类型 | OIDC。 |
身份提供者 | 选择ack-rrsa-<CLUSTER_ID>。其中,<CLUSTER_ID>为集群ID。 |
条件 |
|
角色名称 | ack-caa-demo。 |
创建后,您可以在RAM角色详情页面的基本信息区域,获取其ARN,供后续配置身份认证使用。
2、创建权限策略
参见下方脚本创建一个名为
ack-caa-policy
的 RAM 权限策略,授予ECS和VPC的操作权限。操作入口,请参见创建自定义权限策略。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunInstances", "ecs:DeleteInstance", "ecs:DescribeInstanceAttribute", "ecs:CreateNetworkInterface", "ecs:DeleteNetworkInterface", "ecs:AttachNetworkInterface", "ecs:ModifyNetworkInterfaceAttribute", "ecs:DescribeNetworkInterfaceAttribute" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "vpc:DescribeVSwitchAttributes", "vpc:AllocateEipAddress", "vpc:ReleaseEipAddress", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:DescribeEipAddresses" ], "Resource": "*" } ] }
为此前创建的RAM角色授予权限策略
ack-caa-policy
。操作入口,请参见为RAM角色授权。
步骤二:创建节点池并配置安全组
您需要创建一个节点池,用于部署 CAA 方案的控制器工作负载。同时,您还需配置节点池的安全组规则,开放 CAA 方案依赖的特定端口。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击创建节点池,按照页面提示完成节点池的配置。
下表仅介绍主要配置项。详细配置项说明请参见创建和管理节点池。
配置项
描述
托管配置
选择不开启。
交换机
选择可用区I的vSwitch,节点池会在该可用区下弹出节点。
操作系统
Ubuntu 22.04 64位。
期望节点数
节点池初始节点数量,需为1个节点及以上。
以下为高级配置(页面下拉,展开高级选项(选填))
节点标签(Labels)
新增如下节点标签,便于CAA控制器的调度。
键:
node.kubernetes.io/worker
值:留空
在节点池列表,单击节点池名称,然后单击基本信息页签,在节点池信息区域单击安全组ID,跳转至安全组详情页面。
在入方向区域,单击增加规则,增加如下两条规则。
协议
访问来源
访问目的
说明
自定义TCP
本VPC网段
15150
支持CAA组件与机密虚拟机之间的安全通信。
自定义UDP
本VPC网段
4789
基于VXLAN实现机密容器的网络管理。
步骤三:部署 CAA
请参见下文部署CAA的两个核心组件:
CoCo(Confidential Containers) Operator:负责自动化部署和管理机密容器所需的运行时环境,例如Kata Containers的远程运行时Kata Remote Runtime。
CAA(Cloud API Adaptor) DaemonSet:CAA以DaemonSet的形式部署在节点上,可根据Pod调度请求动态创建机密虚拟机作为Pod的运行时节点。
1、安装CoCo Operator
参见以下命令进行安装。
kubectl apply -k "https://github.com/AliyunContainerService/coco-operator/config/release"
kubectl apply -k "https://github.com/AliyunContainerService/coco-operator/config/samples/ccruntime/peer-pods"
2、部署 CAA DaemonSet
下载项目源码。
git clone https://github.com/confidential-containers/cloud-api-adaptor.git -b v0.14.0 cd cloud-api-adaptor
修改
src/cloud-api-adaptor/install/overlays/alibabacloud/kustomization.yaml
文件中的安全组和交换机ID,以便虚拟机能够正确接入网络环境。参数
说明
SECURITY_GROUP_IDS
修改为步骤二所创建的节点池的安全组ID。
VSWITCH_ID
修改为步骤二所创建的节点池在可用区I下的交换机ID。
新建文件
src/cloud-api-adaptor/install/overlays/alibabacloud/alibabacloud-cred.env
,配置身份认证。内容如下。替换
<role_arn>
为RAM 角色ARN,<provider_arn>
为RRSA OIDC的提供商 ARN。ALIBABA_CLOUD_ROLE_ARN=<role_arn> ALIBABA_CLOUD_OIDC_PROVIDER_ARN=<provider_arn> ALIBABA_CLOUD_OIDC_TOKEN_FILE=/var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
部署CAA工作负载。
kubectl apply -k src/cloud-api-adaptor/install/overlays/alibabacloud
等待大概3分钟后,检查部署状态。
kubectl -n confidential-containers-system get pod
预期输出:
NAME READY STATUS RESTARTS AGE cc-operator-controller-manager-5d79465b47-d8s2k 1/1 Running 0 2m11s cc-operator-daemon-install-trlvt 1/1 Running 0 108s cc-operator-pre-install-daemon-qpvzw 1/1 Running 0 117s cloud-api-adaptor-daemonset-46spp 1/1 Running 0 92s
预期输出包含
cc-operator-*
和cloud-api-adaptor-daemonset-*
组件,状态均为Running
,表明部署成功。
步骤四:部署示例应用
下文将部署一个示例应用,使用 runtimeClassName: kata-remote
为机密容器运行时。当Pod调度时,Kata Remote将触发CAA动态创建一台TDX机密虚拟机。
后续如需删除集群,删除集群前,请先删除所有使用runtimeClassName: kata-remote
的工作负载,以避免CAA创建的机密虚拟机资源残留。
将以下文件保存为pod-caa-demo.yaml,用于部署一个使用机密容器运行时的Pod。
apiVersion: v1 kind: Pod metadata: name: pod-caa-demo spec: runtimeClassName: kata-remote containers: - image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest name: hello command: - sh - -c - 'echo hello && sleep infinity'
部署pod-caa-demo.yaml。
kubectl apply -f pod-caa-demo.yaml
等待大概3分钟,确认应用是否部署成功。
kubectl get pod pod-caa-demo
预期输出:
NAME READY STATUS RESTARTS AGE pod-caa-demo 1/1 Running 0 52s
访问ECS管理控制台,在左侧导航栏单击实例,查看以
podvm-
开头的TDX 机密虚拟机,表明CAA已成功创建底层计算资源。
相关链接
联系我们
如有任何产品问题或使用建议,欢迎您加入钉群(钉群号:30521601)联系我们。