mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-06-23 04:10:25 +00:00
NOISSUE - Update documentation for vTPM changes (#408)
* change readme according to vTPM changes * rebase
This commit is contained in:
committed by
GitHub
parent
293c65a3aa
commit
ebc8f1bba4
+14
-7
@@ -22,14 +22,11 @@ Agent is started automatically in the VM when launched but requires configuratio
|
||||
For attested TLS, you will have to calculate the VM's measurement, which can be done using cli. This information is also contained in the Attestation Policy file.
|
||||
|
||||
```bash
|
||||
# Define the path to the OVMF, KERNEL, INITRD and CMD Kernel line arguments.
|
||||
OVMF_CODE="/home/cocosai/ovmf/Build/AmdSev/DEBUG_GCC5/FV/OVMF.fd"
|
||||
INITRD="/home/cocosai/initramfs.cpio.gz"
|
||||
KERNEL="/home/cocosai/bzImage"
|
||||
LINE="earlyprintk=serial console=ttyS0"
|
||||
# Define the path to the IGVM file that contains the vTPM and the OVMF.
|
||||
IGVM="<path to the IGVM file>"
|
||||
|
||||
# Call sev-snp-measure
|
||||
./build/cocos-cli sevsnpmeasure --mode snp --vcpus 4 --vcpu-type EPYC-v4 --ovmf $OVMF_CODE --kernel $KERNEL --initrd $INITRD --append "$LINE"
|
||||
# Call igvmmeasure
|
||||
./build/cocos-cli igvmmeasure $IGVM
|
||||
```
|
||||
|
||||
To speed up the verification process of attested TLS, download the ARK and ASK certificates using the CLI tool. The CLI tool will download the certificates under your home directory in the `.cocos` directory.
|
||||
@@ -48,6 +45,10 @@ export AGENT_GRPC_URL=localhost:7002
|
||||
cd scripts/attestation_policy
|
||||
make
|
||||
sudo ./target/release/attestation_policy --policy 196608 # Default value of the policy should be 196608
|
||||
|
||||
# In order to include the golden (good) PCR values in the attestation policy, call the attestation policy script with the "--pcr" option.
|
||||
sudo ./target/release/attestation_policy --policy 196608 --pcr ./pcr_values.json
|
||||
|
||||
# The output file attestation_policy.json will be generated in the directory from which the executable has been called.
|
||||
cd ../..
|
||||
|
||||
@@ -81,6 +82,12 @@ export AGENT_GRPC_ATTESTED_TLS=true
|
||||
# Product name must be Milan or Genoa
|
||||
./build/cocos-cli attestation validate '<attesation>' --report_data '<report_data>' --product <product_name>
|
||||
|
||||
# Other options for attestation validation using the CLI are:
|
||||
# validate <attestationreportfilepath> --report_data <reportdata> --product <product data> //default
|
||||
# validate --mode snp <attestationreportfilepath> --report_data <reportdata> --product <product data>
|
||||
# validate --mode vtpm <attestationreportfilepath> --nonce <noncevalue> --format <formatvalue> --output <outputvalue>
|
||||
# validate --mode snp-vtpm <attestationreportfilepath> --nonce <noncevalue> --format <formatvalue> --output <outputvalue>
|
||||
|
||||
# Run the CLI program with algorithm input
|
||||
./build/cocos-cli algo test/manual/algo/lin_reg.py <private_key_file_path> -a python -r test/manual/algo/requirements.py
|
||||
# 2023/09/21 10:43:53 Uploading algorithm binary: test/manual/algo/lin_reg.bin
|
||||
|
||||
+213
-31
@@ -38,31 +38,121 @@ python3 test/manual/algo/lin_reg.py predict results.zip test/manual/data
|
||||
|
||||
This will make inference on the results of the linear regression model.
|
||||
|
||||
To run the examples in the secure VM (SVM) by the Agent, you can use the following command:
|
||||
To run the examples in the confidential VM (CVM) or a regular VM by the Agent, you can use the following command:
|
||||
|
||||
```bash
|
||||
go run ./test/computations/main.go ./test/manual/algo/lin_reg.py public.pem false ./test/manual/data/iris.csv
|
||||
go run ./test/cvms/main.go ./test/manual/algo/lin_reg.py public.pem false ./test/manual/data/iris.csv
|
||||
```
|
||||
|
||||
This command is run from the root directory of the project. This will start the computation server.
|
||||
This command is run from the root directory of the project. This will start the CVM server.
|
||||
|
||||
In another window, you can run the following command:
|
||||
For a regular VM, in another window, run the following command:
|
||||
```bash
|
||||
sudo find / -name OVMF_CODE.fd
|
||||
# => /usr/share/OVMF/OVMF_CODE.fd
|
||||
OVMF_CODE=/usr/share/OVMF/OVMF_CODE.fd
|
||||
|
||||
sudo find / -name OVMF_VARS.fd
|
||||
# => /usr/share/OVMF/OVMF_VARS.fd
|
||||
|
||||
# Create a local copy of OVMF_VARS.
|
||||
cp /usr/share/OVMF/OVMF_VARS.fd .
|
||||
|
||||
OVMF_VARS=./OVMF_VARS.fd
|
||||
|
||||
# Create a directory for the environment file and the certificates for cloud certificates.
|
||||
mkdir env
|
||||
mkdir certs
|
||||
|
||||
# Enter the env directory and create the environemnt file.
|
||||
cd env
|
||||
touch environment
|
||||
|
||||
# Define Computations endpoint URL for agent.
|
||||
# Make sure the Computation endpoint is running (like Cocos Prism).
|
||||
echo AGENT_CVM_GRPC_URL=localhost:7001 >> ./environment
|
||||
# Define log level for the agent.
|
||||
echo AGENT_LOG_LEVEL=debug >> ./environment
|
||||
cd ..
|
||||
|
||||
KERNEL=<path to kernel built with HAL>
|
||||
INITRD=<path to initial RAM file system built with HAL>
|
||||
APPEND="earlyprintk=serial console=ttyS0"
|
||||
QEMU_BIN=<path to QEMU binary>
|
||||
ENV_PATH=./env
|
||||
CERTH_PATH=./certs
|
||||
|
||||
$QEMU_BIN -enable-kvm \
|
||||
-smp 4 \
|
||||
-m 8G,slots=5,maxmem=10G \
|
||||
-cpu EPYC-v4 \
|
||||
-machine q35 \
|
||||
-no-reboot \
|
||||
-drive if=pflash,format=raw,unit=0,file=$OVMF_CODE,readonly=on \
|
||||
-drive if=pflash,format=raw,unit=1,file=$OVMF_VARS \
|
||||
-netdev user,id=vmnic,hostfwd=tcp::7020-:7002 \
|
||||
-device virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic \
|
||||
-initrd $INITRD \
|
||||
-kernel $KERNEL -append $APPEND \
|
||||
-nographic \
|
||||
-monitor pty \
|
||||
-monitor unix:monitor,server,nowait \
|
||||
-fsdev local,id=env_fs,path=$ENV_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=env_fs,mount_tag=env_share \
|
||||
-fsdev local,id=cert_fs,path=$CERTH_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=cert_fs,mount_tag=certs_share
|
||||
```
|
||||
|
||||
For a CVM, in another window, run the following command:
|
||||
|
||||
```bash
|
||||
sudo \
|
||||
MANAGER_QEMU_SMP_MAXCPUS=4 \
|
||||
MANAGER_GRPC_URL=localhost:7001 \
|
||||
MANAGER_LOG_LEVEL=debug \
|
||||
MANAGER_QEMU_USE_SUDO=false \
|
||||
MANAGER_QEMU_ENABLE_SEV=false \
|
||||
MANAGER_QEMU_SEV_CBITPOS=51 \
|
||||
MANAGER_QEMU_ENABLE_SEV_SNP=false \
|
||||
MANAGER_QEMU_OVMF_CODE_FILE=/usr/share/edk2/x64/OVMF_CODE.fd \
|
||||
MANAGER_QEMU_OVMF_VARS_FILE=/usr/share/edk2/x64/OVMF_VARS.fd \
|
||||
go run main.go
|
||||
# Create a directory for the environment file and the certificates for cloud certificates.
|
||||
mkdir env
|
||||
mkdir certs
|
||||
|
||||
# Enter the env directory and create the environemnt file.
|
||||
cd env
|
||||
touch environment
|
||||
|
||||
# Define Computations endpoint URL for agent.
|
||||
# Make sure the Computation endpoint is running (like Cocos Prism).
|
||||
echo AGENT_CVM_GRPC_URL=localhost:7001 >> ./environment
|
||||
# Define log level for the agent.
|
||||
echo AGENT_LOG_LEVEL=debug >> ./environment
|
||||
cd ..
|
||||
|
||||
KERNEL=<path to kernel built with HAL>
|
||||
INITRD=<path to initial RAM file system built with HAL>
|
||||
APPEND="earlyprintk=serial console=ttyS0"
|
||||
IGVM=<path to IGVM file>
|
||||
QEMU_BIN=<path to QEMU binary>
|
||||
ENV_PATH=./env
|
||||
CERTH_PATH=./certs
|
||||
|
||||
$QEMU_BIN -enable-kvm \
|
||||
-enable-kvm \
|
||||
-cpu EPYC-v4 \
|
||||
-machine q35 \
|
||||
-smp 4,maxcpus=16 \
|
||||
-m 8G,slots=5,maxmem=30G \
|
||||
-netdev user,id=vmnic,hostfwd=tcp::7020-:7002 \
|
||||
-device virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic,romfile= \
|
||||
-machine confidential-guest-support=sev0,memory-backend=ram1,igvm-cfg=igvm0 \
|
||||
-object memory-backend-memfd,id=ram1,size=8G,share=true,prealloc=false,reserve=false \
|
||||
-object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1 \
|
||||
-object igvm-cfg,id=igvm0,file=$IGVM \
|
||||
-initrd $INITRD \
|
||||
-kernel $KERNEL -append $APPEND \
|
||||
-nographic \
|
||||
-monitor pty \
|
||||
-monitor unix:monitor,server,nowait \
|
||||
-fsdev local,id=env_fs,path=$ENV_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=env_fs,mount_tag=env_share \
|
||||
-fsdev local,id=cert_fs,path=$CERTH_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=cert_fs,mount_tag=certs_share
|
||||
```
|
||||
|
||||
This command is run from the [manager main directory](../../../cmd/manager/). This will start the manager. Make sure you have already built the [qemu image](../../../hal/linux/README.md).
|
||||
Make sure you have already built the [qemu image](../../../hal/linux/README.md) and the IGVM file from the COCONUT-SVSM [repository](https://github.com/coconut-svsm/svsm/blob/main/Documentation/docs/installation/INSTALL.md).
|
||||
|
||||
In another window, you can run the following command:
|
||||
|
||||
@@ -125,29 +215,121 @@ docker build -t linreg .
|
||||
docker save linreg > linreg.tar
|
||||
```
|
||||
|
||||
To run the examples in the secure VM (SVM) by the Agent, you can use the following command in cocos root directory `/cocos`:
|
||||
To run the examples in the confidential VM (CVM) or a regular VM by the Agent, you can use the following command:
|
||||
|
||||
```bash
|
||||
go run ./test/computations/main.go ./test/manual/algo/linreg.tar public.pem false ./test/manual/data/iris.csv
|
||||
go run ./test/cvms/main.go ./test/manual/algo/lin_reg.py public.pem false ./test/manual/data/iris.csv
|
||||
```
|
||||
|
||||
In another window, you can run the following command in the `cmd/manager` directory:
|
||||
This command is run from the root directory of the project. This will start the CVM server.
|
||||
|
||||
For a regular VM, in another window, run the following command:
|
||||
```bash
|
||||
sudo find / -name OVMF_CODE.fd
|
||||
# => /usr/share/OVMF/OVMF_CODE.fd
|
||||
OVMF_CODE=/usr/share/OVMF/OVMF_CODE.fd
|
||||
|
||||
sudo find / -name OVMF_VARS.fd
|
||||
# => /usr/share/OVMF/OVMF_VARS.fd
|
||||
|
||||
# Create a local copy of OVMF_VARS.
|
||||
cp /usr/share/OVMF/OVMF_VARS.fd .
|
||||
|
||||
OVMF_VARS=./OVMF_VARS.fd
|
||||
|
||||
# Create a directory for the environment file and the certificates for cloud certificates.
|
||||
mkdir env
|
||||
mkdir certs
|
||||
|
||||
# Enter the env directory and create the environemnt file.
|
||||
cd env
|
||||
touch environment
|
||||
|
||||
# Define Computations endpoint URL for agent.
|
||||
# Make sure the Computation endpoint is running (like Cocos Prism).
|
||||
echo AGENT_CVM_GRPC_URL=localhost:7001 >> ./environment
|
||||
# Define log level for the agent.
|
||||
echo AGENT_LOG_LEVEL=debug >> ./environment
|
||||
cd ..
|
||||
|
||||
KERNEL=<path to kernel built with HAL>
|
||||
INITRD=<path to initial RAM file system built with HAL>
|
||||
APPEND="earlyprintk=serial console=ttyS0"
|
||||
QEMU_BIN=<path to QEMU binary>
|
||||
ENV_PATH=./env
|
||||
CERTH_PATH=./certs
|
||||
|
||||
$QEMU_BIN -enable-kvm \
|
||||
-smp 4 \
|
||||
-m 8G,slots=5,maxmem=10G \
|
||||
-cpu EPYC-v4 \
|
||||
-machine q35 \
|
||||
-no-reboot \
|
||||
-drive if=pflash,format=raw,unit=0,file=$OVMF_CODE,readonly=on \
|
||||
-drive if=pflash,format=raw,unit=1,file=$OVMF_VARS \
|
||||
-netdev user,id=vmnic,hostfwd=tcp::7020-:7002 \
|
||||
-device virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic \
|
||||
-initrd $INITRD \
|
||||
-kernel $KERNEL -append $APPEND \
|
||||
-nographic \
|
||||
-monitor pty \
|
||||
-monitor unix:monitor,server,nowait \
|
||||
-fsdev local,id=env_fs,path=$ENV_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=env_fs,mount_tag=env_share \
|
||||
-fsdev local,id=cert_fs,path=$CERTH_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=cert_fs,mount_tag=certs_share
|
||||
```
|
||||
|
||||
For a CVM, in another window, run the following command:
|
||||
|
||||
```bash
|
||||
sudo \
|
||||
MANAGER_QEMU_SMP_MAXCPUS=4 \
|
||||
MANAGER_GRPC_URL=localhost:7001 \
|
||||
MANAGER_LOG_LEVEL=debug \
|
||||
MANAGER_QEMU_USE_SUDO=false \
|
||||
MANAGER_QEMU_ENABLE_SEV=false \
|
||||
MANAGER_QEMU_SEV_CBITPOS=51 \
|
||||
MANAGER_QEMU_ENABLE_SEV_SNP=false \
|
||||
MANAGER_QEMU_OVMF_CODE_FILE=/usr/share/edk2/x64/OVMF_CODE.fd \
|
||||
MANAGER_QEMU_OVMF_VARS_FILE=/usr/share/edk2/x64/OVMF_VARS.fd \
|
||||
go run main.go
|
||||
# Create a directory for the environment file and the certificates for cloud certificates.
|
||||
mkdir env
|
||||
mkdir certs
|
||||
|
||||
# Enter the env directory and create the environemnt file.
|
||||
cd env
|
||||
touch environment
|
||||
|
||||
# Define Computations endpoint URL for agent.
|
||||
# Make sure the Computation endpoint is running (like Cocos Prism).
|
||||
echo AGENT_CVM_GRPC_URL=localhost:7001 >> ./environment
|
||||
# Define log level for the agent.
|
||||
echo AGENT_LOG_LEVEL=debug >> ./environment
|
||||
cd ..
|
||||
|
||||
KERNEL=<path to kernel built with HAL>
|
||||
INITRD=<path to initial RAM file system built with HAL>
|
||||
APPEND="earlyprintk=serial console=ttyS0"
|
||||
IGVM=<path to IGVM file>
|
||||
QEMU_BIN=<path to QEMU binary>
|
||||
ENV_PATH=./env
|
||||
CERTH_PATH=./certs
|
||||
|
||||
$QEMU_BIN -enable-kvm \
|
||||
-enable-kvm \
|
||||
-cpu EPYC-v4 \
|
||||
-machine q35 \
|
||||
-smp 4,maxcpus=16 \
|
||||
-m 8G,slots=5,maxmem=30G \
|
||||
-netdev user,id=vmnic,hostfwd=tcp::7020-:7002 \
|
||||
-device virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic,romfile= \
|
||||
-machine confidential-guest-support=sev0,memory-backend=ram1,igvm-cfg=igvm0 \
|
||||
-object memory-backend-memfd,id=ram1,size=8G,share=true,prealloc=false,reserve=false \
|
||||
-object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1 \
|
||||
-object igvm-cfg,id=igvm0,file=$IGVM \
|
||||
-initrd $INITRD \
|
||||
-kernel $KERNEL -append $APPEND \
|
||||
-nographic \
|
||||
-monitor pty \
|
||||
-monitor unix:monitor,server,nowait \
|
||||
-fsdev local,id=env_fs,path=$ENV_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=env_fs,mount_tag=env_share \
|
||||
-fsdev local,id=cert_fs,path=$CERTH_PATH,security_model=mapped \
|
||||
-device virtio-9p-pci,fsdev=cert_fs,mount_tag=certs_share
|
||||
```
|
||||
|
||||
This command is run from the [manager main directory](../../../cmd/manager/). This will start the manager. Make sure you have already built the [qemu image](../../../hal/linux/README.md).
|
||||
Make sure you have already built the [qemu image](../../../hal/linux/README.md) and the IGVM file from the COCONUT-SVSM [repository](https://github.com/coconut-svsm/svsm/blob/main/Documentation/docs/installation/INSTALL.md).
|
||||
|
||||
In another window, specify what kind of algorithm you want the Agent to run (docker):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user