2.7. 创建 initdata
您可以创建一个 initdata 来在运行时安全地初始化具有敏感或特定于工作负载的数据的对等 pod,以避免在虚拟机镜像中嵌入此数据。这种方法通过降低公开机密信息的风险并消除自定义镜像构建需求来提供额外的安全性。
在生产环境中,您必须创建 initdata 来覆盖默认的 permissive Kata 代理策略。
您可以在对等 pod 配置映射中指定 initdata,用于全局配置,或者在对等 pod 清单中为特定 pod 指定。peer pod 清单中的 initdata 值覆盖对等 pod 配置映射中设置的值。
然后,您从 initdata.toml 文件中为红帽构建的 Trust Value Provider Service (RVPS)配置映射生成平台配置寄存器(PCR) 8 哈希。
红帽构建的 Trustee 使用 RVPS 验证机密工作负载发送的测试证据。RVPS 包含可信引用值,如文件哈希,与测试请求中包含的 PCR 测量进行比较。这些哈希不是由红帽构建的 Trustee 生成。
如果您在红帽构建的 Trustee 的 kbs-config 配置映射中配置 insecure_http = true,则必须删除 kbs_cert 设置。
流程
运行以下命令,获取红帽构建的 Trustee URL:
$ TRUSTEE_URL=$(oc get route kbs-service \ -n trustee-operator-system -o jsonpath='{.spec.host}') \ && echo $TRUSTEE_URL创建
initdata.toml文件:algorithm = "sha384" version = "0.1.0" [data] "aa.toml" = ''' [token_configs] [token_configs.coco_as] url = '<trustee_url>' [token_configs.kbs] url = '<trustee_url>' cert = """ -----BEGIN CERTIFICATE----- <kbs_certificate> -----END CERTIFICATE----- """ ''' "cdh.toml" = ''' socket = 'unix:///run/confidential-containers/cdh.sock' credentials = [] [kbc] name = 'cc_kbc' url = '<trustee_url>' kbs_cert = """ -----BEGIN CERTIFICATE----- <kbs_certificate> -----END CERTIFICATE----- """ ''' "policy.rego" = ''' package agent_policy default AddARPNeighborsRequest := true default AddSwapRequest := true default CloseStdinRequest := true default CopyFileRequest := true default CreateContainerRequest := true default CreateSandboxRequest := true default DestroySandboxRequest := true default ExecProcessRequest := true default GetMetricsRequest := true default GetOOMEventRequest := true default GuestDetailsRequest := true default ListInterfacesRequest := true default ListRoutesRequest := true default MemHotplugByProbeRequest := true default OnlineCPUMemRequest := true default PauseContainerRequest := true default PullImageRequest := true default ReadStreamRequest := false default RemoveContainerRequest := true default RemoveStaleVirtiofsShareMountsRequest := true default ReseedRandomDevRequest := true default ResumeContainerRequest := true default SetGuestDateTimeRequest := true default SetPolicyRequest := true default SignalProcessRequest := true default StartContainerRequest := true default StartTracingRequest := true default StatsContainerRequest := true default StopTracingRequest := true default TtyWinResizeRequest := true default UpdateContainerRequest := true default UpdateEphemeralMountsRequest := true default UpdateInterfaceRequest := true default UpdateRoutesRequest := true default WaitProcessRequest := true default WriteStreamRequest := true '''- URL
-
指定红帽构建的 Trustee URL。如果您使用
insecure_http配置红帽构建的 Trustee 用于测试目的,请使用 HTTP。否则,请使用 HTTPS。对于生产环境系统,请避免使用insecure_http,除非您将环境配置为外部处理 TLS,例如使用代理。 - <kbs_certificate>
- 为 attestation 代理指定 Base64 编码的 TLS 证书。
- kbs_cert
-
如果您在红帽构建的 Trustee 的
kbs-config配置映射中配置insecure_http = true,请删除kbs_cert设置。
运行以下命令,将
initdata.toml文件转换为 gzip 格式的 Base64 编码字符串:$ cat initdata.toml | gzip | base64 -w0 > initdata.txt为对等 pod 配置映射或对等 pod 清单记录此字符串。
运行以下命令,计算
initdata.toml文件的 SHA-256 哈希,并将其值分配给hash变量:$ hash=$(sha256sum initdata.toml | cut -d' ' -f1)运行以下命令,将 32 字节 0s 分配给
initial_pcr变量:$ initial_pcr=0000000000000000000000000000000000000000000000000000000000000000运行以下命令,计算哈希和
initial_pcr的 SHA-256哈希,并将其值分配给PCR8_HASH变量:$ PCR8_HASH=$(echo -n "$initial_pcr$hash" | xxd -r -p | sha256sum | cut -d' ' -f1) && echo $PCR8_HASH记录下
PCR8_HASH值的.运行以下命令,计算initdata.toml文件的 SHA-256 哈希,并将其值分配给hash变量:$ hash=$(sha256sum initdata.toml | cut -d' ' -f1)运行以下命令,将 32 字节 0s 分配给
initial_pcr变量:$ initial_pcr=0000000000000000000000000000000000000000000000000000000000000000运行以下命令,计算哈希和
initial_pcr的 SHA-256哈希,并将其值分配给PCR8_HASH变量:$ PCR8_HASH=$(echo -n "$initial_pcr$hash" | xxd -r -p | sha256sum | cut -d' ' -f1) && echo $PCR8_HASH记录 RVPS 配置映射的
PCR8_HASH值。