teepot/packages/tdx_google/container.nix
Harald Hoyer a5cf220c57
feat(tdx_google): add support for attestation in container
- Mount `/sys/kernel/config` to enable attestation for TDX containers.
- Ensures compatibility with TDX guest measurements during runtime.
2025-02-20 12:14:10 +01:00

42 lines
1.2 KiB
Nix

{ lib
, modulesPath
, pkgs
, ...
}: {
virtualisation.docker.enable = true;
systemd.services.docker_start_container = {
description = "The main application container";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" "docker.service" "vector.service" "chronyd.service" "metadata.service" ];
requires = [ "network-online.target" "docker.service" "vector.service" "metadata.service" ];
serviceConfig = {
Type = "exec";
User = "root";
EnvironmentFile = "-/run/env/env";
};
path = [ pkgs.docker pkgs.teepot.teepot.tdx_extend ];
script = ''
set -eu -o pipefail
DIGEST=''${CONTAINER_DIGEST#sha256:}
echo "Measuring $DIGEST" >&2
test -c /dev/tdx_guest && tdx-extend --digest "$DIGEST" --rtmr 3
# /sys/kernel/config is needed for attestation
docker run -d --rm \
--name tdx_container \
--env "GOOGLE_METADATA=1" \
--network=host \
--init \
--privileged \
-v /sys/kernel/config:/sys/kernel/config \
"sha256:$DIGEST"
exec docker wait tdx_container
'';
postStop = lib.mkDefault ''
shutdown --reboot +5
'';
};
}