Skip to content

Commit 8a0709d

Browse files
committed
self-assessment: add Confidential Containers
Add self-assessment of Confidential Containers project (CNCF Sandbox). Signed-off-by: Mikko Ylinen <mikko.ylinen@intel.com>
1 parent 9fc9678 commit 8a0709d

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
<!-- cSpell:ignore Mikko Ylinen Tobin Feldman Fizthum -->
2+
# Confidential Containers Self-assessment
3+
4+
December 2024
5+
6+
Primary authors: Mikko Ylinen and Tobin Feldman-Fizthum
7+
8+
## Self-assessment outline
9+
10+
### Table of contents
11+
12+
* [Metadata](#metadata)
13+
* [Security links](#security-links)
14+
* [Overview](#overview)
15+
* [Actors and Actions](#actors-and-actions)
16+
* [Background](#background)
17+
* [Goals](#goals)
18+
* [Non-goals](#non-goals)
19+
* [Self-assessment use](#self-assessment-use)
20+
* [Security functions and features](#security-functions-and-features)
21+
* [Project compliance](#project-compliance)
22+
* [Secure development practices](#secure-development-practices)
23+
* [Security issue resolution](#security-issue-resolution)
24+
* [Appendix](#appendix)
25+
26+
### Metadata
27+
28+
|||
29+
| -- | -- |
30+
| Assessment Stage | Incomplete. |
31+
| Software | <https://github.com/confidential-containers/> |
32+
| Security Provider | Yes, the primary function of the project is to support the security of a system. |
33+
| Languages | Rust, Go, and Rego (for policies) |
34+
| SBOM | Currently, not generated by the project. `go.mod` and `Cargo.toml` files are available for each release. |
35+
36+
#### Security links
37+
38+
<!-- markdown-link-check-disable -->
39+
| Doc | url |
40+
| -- | -- |
41+
| Security file | Github org-wide security policy in each repo: <https://github.com/confidential-containers/.github/blob/main/SECURITY.md> |
42+
| Design overview | <https://confidentialcontainers.org/docs/architecture/design-overview/> |
43+
| Trust Model | <https://confidentialcontainers.org/docs/architecture/trust-model/> |
44+
| Attestation Flow | <https://confidentialcontainers.org/docs/attestation/> |
45+
<!-- markdown-link-check-enable -->
46+
47+
### Overview
48+
49+
Confidential Containers (CoCo) leverages [Trusted Execution Environments (TEEs)](https://en.wikipedia.org/wiki/Trusted_execution_environment)
50+
to protect containers and data and to deliver cloud native confidential computing.
51+
52+
The project enables the following:
53+
54+
* Run unmodified applications and containers
55+
* Support for multiple confidential hardware platforms and cloud offerings
56+
* End-to-end attestation flow built-in
57+
58+
#### Background
59+
60+
Confidential Containers provides a set of primitives for building confidential Cloud Native
61+
applications. The following are the key ingredients in CoCo's feature set:
62+
63+
* running a Kubernetes pod inside of a confidential virtual machine (VM) leveraging k8s `RuntimeClass`es
64+
* attestable [pod configuration policies](https://github.com/kata-containers/kata-containers/blob/main/docs/how-to/how-to-use-the-kata-agent-policy.md)
65+
(pod Spec, CRI/runtime allow/denylist) and other init data to allow
66+
workload owners to control the trusted compute base (TCB) of the runtime environment
67+
* handling of encrypted and signed container images so that related secrets (image layer
68+
decryption keys) and integrity protected elements (image policies, trusted public keys)
69+
are provisioned after a successful remote attestation and processed inside the TEEs only
70+
* sealed Kubernetes Secrets (transparently decrypted for workloads) and protected volumes
71+
72+
#### Actors and Actions
73+
74+
[The project design overview](https://confidentialcontainers.org/docs/architecture/design-overview/) and
75+
[a detailed attestation flow](https://confidentialcontainers.org/docs/attestation/) are maintained
76+
on the project website and not repeated here.
77+
78+
#### Goals
79+
80+
The goal of the Confidential Containers project is to standardize confidential
81+
computing at the pod level and simplify its consumption in Kubernetes.
82+
83+
This enables Kubernetes users to deploy confidential container workloads using
84+
familiar workflows and tools without extensive knowledge of the underlying
85+
confidential computing technologies so that code integrity and data confidentiality
86+
are guaranteed.
87+
88+
Confidential Containers maps pods to confidential VMs, meaning that everything
89+
inside a pod is within their own TEE. CoCo infrastructure components inside the
90+
confidential VM are responsible for a) providing a secure runtime environment for
91+
the workload and its data, b) the necessary guardrails for protecting the API between
92+
the untrusted host (including the kubelet and CRI runtimes) and the trusted VM,
93+
and c) remote attestation functions.
94+
95+
The project also seeks to build tested reference use-cases to demonstrate the
96+
benefits of confidential computing to the ecosystem. The main focus is in trusted
97+
software supply chains and confidential AI (in different forms).
98+
99+
#### Non-goals
100+
101+
While the project provides many building blocks to make confidential container workload
102+
deployments easy, the users must understand the security requirements of their workloads
103+
(such as allowing exec'ing new processes, where the logs are written to etc.).
104+
105+
Moreover, running workloads in TEEs does not protect confidential data from adversaries
106+
inside the TEE (e.g., triggered by unpatched vulnerabilities in the container images).
107+
108+
Finally, confidential computing platforms usually do not protect against hardware
109+
side-channels. Neither does Confidential Containers. Also, confidential computing
110+
does not protect against denial of service. Since the untrusted host is in charge
111+
of scheduling, it can simply not run the guest and is true for Confidential Containers
112+
as well.
113+
114+
### Self-assessment use
115+
116+
This self-assessment is created by the Confidential Containers team to perform an internal analysis of the
117+
project's security. It is not intended to provide a security audit of Confidential Containers, or
118+
function as an independent assessment or attestation of Confidential Containers' security health.
119+
120+
This document serves to provide Confidential Containers users with an initial understanding of
121+
Confidential Containers' security, where to find existing security documentation, Confidential Containers plans for
122+
security, and general overview of Confidential Containers security practices, both for development of
123+
Confidential Containers as well as security of Confidential Containers.
124+
125+
This document provides the CNCF TAG-Security with an initial understanding of Confidential Containers
126+
to assist in a joint-assessment, necessary for projects under incubation. Taken
127+
together, this document and the joint-assessment serve as a cornerstone for if and when
128+
Confidential Containers seeks graduation and is preparing for a security audit.
129+
130+
### Security functions and features
131+
132+
* In confidential computing careful scrutiny is required whenever information
133+
crosses the boundary between the trusted and untrusted contexts. Secrets should not
134+
leave the enclave without protection and entities outside of the enclave should not be
135+
able to trigger malicious behavior inside it. In Confidential Containers there
136+
are APIs that cross the trust boundary. The main example is the API between the `Kata
137+
Agent` in the guest and the `Kata Shim` on the host. This API is protected with an
138+
[OPA policy](https://github.com/kata-containers/kata-containers/blob/main/docs/how-to/how-to-use-the-kata-agent-policy.md)
139+
running inside the guest that can block malicious requests by the host.
140+
141+
* Attestation is a crucial part of confidential computing and a direct requirement
142+
of many guest operations. For example, to unpack an encrypted container image, the
143+
guest must retrieve a secret key. Inside the guest the `confidential-data-hub`
144+
and `attestation-agent` handle operations involving secrets and attestation.
145+
146+
* When using Kata Containers container, images are pulled on the worker node with the
147+
help of a CRI runtime like containerd. The image rootfs bundles are exposed to the
148+
guest via filesystem passthrough (virtiofs, 9p). This is not suitable for confidential
149+
workloads because the container images are exposed to the untrusted host. With
150+
Confidential Containers images are pulled and unpacked inside of the guest. This
151+
requires additional components such as `image-rs` to be part of the guest rootfs and
152+
support from the CRI runtimes to make it possible to not do the image pull themselves.
153+
154+
### Project compliance
155+
156+
* Confidential Containers does not comply with any specific security standards.
157+
* It follows [Remote ATtestation ProcedureS (RATS) architecture](https://www.ietf.org/archive/id/draft-ietf-rats-architecture-22.html)
158+
principles and terminology for its attestation architecture.
159+
* It implements [KBS attestation protocol specification](https://github.com/confidential-containers/trustee/blob/main/kbs/docs/kbs_attestation_protocol.md)
160+
for the confidential VM (pod) and trusted key-broker-service communication.
161+
* Confidential Containers Trustee attestation tokens follow [EAT Attestation Result (EAR)](https://datatracker.ietf.org/doc/draft-fv-rats-ear/) message format.
162+
163+
### Secure development practices
164+
165+
* CoCo repositories are hosted on [Github](https://github.com/confidential-containers/)
166+
and code changes are submitted through pull-requests.
167+
* All changes must be reviewed and approved by two maintainers and the CI tests must pass
168+
before a pull-request can be merged to `main`.
169+
* The CI checks run by Github workflows include:
170+
* Developer Certificate of Origin (DCO) check to verify commits are signed-off correctly
171+
* code linter and formatting
172+
* code unit (e.g., `cargo test`) and e2e tests (e.g., running full e2e attestation with a workload in a k8s cluster on real TEEs)
173+
* CoCo uses `dependabot` to keep its Cargo and Go module dependencies up-to-date. Furthermore,
174+
some sub-project repositories have also enabled automatic updates of (pinned) Github actions.
175+
* The community [communication channels](https://github.com/confidential-containers/#join-the-community) include:
176+
* CNCF Slack: `#confidential-containers` (and sub-project specific channels with `#confidential-containers-` prefix).
177+
* Weekly community meeting and sub-project meetings.
178+
* Blog posts and other information (such as the design/architecture docs and guides) on the [project website](https://confidentialcontainers.org/).
179+
180+
### Security issue resolution
181+
182+
* Responsible Disclosures Process and Incident Response: Confidential Containers Github
183+
org-wide [security policy](https://github.com/confidential-containers/.github/blob/main/SECURITY.md)
184+
is available for each sub-project repository. It describes how the project vulnerabilities
185+
are reported, analyzed, patched, and informed.
186+
187+
### Appendix
188+
189+
* Known Issues Over Time: The project has published one [Security Advisory](https://github.com/confidential-containers/trustee/security/advisories/GHSA-7jc6-j236-vvjw).
190+
* [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/5719/badge)](https://www.bestpractices.dev/projects/5719)
191+
* Case Studies: The project maintains a list of [ADOPTERS](https://github.com/confidential-containers/confidential-containers/blob/main/ADOPTERS.md).
192+
Vendors/adopters have posted blogs and talked publicly (e.g., at KubeCon) about using CoCo
193+
in many use-cases. Moreover, the project itself runs a working group for
194+
[use-case driven development](https://docs.google.com/document/d/1LnGNeyUyPM61Iv4kBKFbfgmBr3RmxHYZ7Ev88obN0_E/edit?tab=t.0#heading=h.b0rnn2bw76n).
195+
* Related Projects / Vendors: Confidential Containers are connected to a wide array
196+
of projects. Some projects are directly implicated in the design of Confidential
197+
Containers such as [Kata Containers](https://katacontainers.io/). The support from
198+
container runtimes (containerd/CRI-O) and their add-ons (e.g., containerd snapshotters)
199+
are also critical. CoCo project is complementary (by enabling extra level of security)
200+
to many cloud-native projects and has no overlap with any other project given its feature
201+
set and capabilities. A more detailed [project alignment](https://github.com/confidential-containers/confidential-containers/blob/main/alignment.md)
202+
is available in the community repository.

0 commit comments

Comments
 (0)