[kata-dev] Kata with AMD Secure Encrypted Virtualization (SEV)

Larrew, Jesse Jesse.Larrew at amd.com
Thu Feb 22 03:55:23 UTC 2018


> -----Original Message-----
> 
> On Thu, Feb 22, 2018 at 6:06 AM, Larrew, Jesse <Jesse.Larrew at amd.com>
> wrote:
> > Hi all,
> >
> > The virtualization instructions in the latest AMD EPYC server processors
> have been enhanced with a memory encryption feature that could provide
> projects like Kata Containers with unique security capabilities compared to
> their non-virtualized counterparts. We call this feature Secure Encrypted
> Virtualization (or SEV) and would be interested in collaborating with the Kata
> Container community to enable support for containers with encrypted
> memory.
> >
> > In short, we've added an inline AES engine to our memory controller that
> encrypts data written to system DRAM and decrypts data read from DRAM.
> The encryption keys are generated from a TRNG in the onboard AMD Secure
> Processor (SP) and programmed into the memory controller as needed in a
> manner that is never visible to software. Additionally, our virtualization
> instructions have been enhanced to be able to associate a VM ASID with a
> unique encryption key, so each VM (or container) can keep the contents of
> its memory confidential from the host and/or other tenant VMs/containers.
> The guest kernel can choose which pages to encrypt and which to share with
> the host by setting a bit in the guest page tables, which puts the guest in
> complete control of the visibility of their data in the cloud. More information
> can be found in our Memory Encryption whitepaper [1] and in the
> Architecture Programmer's Manual [2].
> >
> > Linux kernel support for SEV has been merged into the 4.15 and upcoming
> 4.16 kernels. OVMF BIOS support has been merged as well. The qemu
> changes are still being upstreamed, but the patches are available for testing
> on github [3].
> >
> > With the above support in place, we have developed a proof-of-concept
> demo that is based on Clear Containers. Since the Clear Containers project
> had already done the heavy lifting to run container workloads inside of a VM,
> it was rather straightforward to add support to encrypt those VMs using SEV.
> The required changes are summarized below:
> >         * Container kernel:
> >                 - Add SEV support patches from the Linux kernel repo in [3].
> >                 - Force virtio to use the DMA API (and hence SWIOTLB) when
> adding/removing buffers to/from the virtio ring buffer.
> >                 - SEV requires a memory copy in order to perform the encryption,
> so zero-copy solutions using DAX for the container initial user space will not
> work.
> >                         + Build in a small initramfs to use as the guest kernel initial user
> space.
> >                         + Include the updated container agent binary and supporting
> libs (~14MB total).
> >         * Container agent:
> >                 - Update the agent not to use the pivot_root() method from the
> initramfs environment, and perform the pivot to the container workload
> filesystem manually instead.
> >         * Container runtime:
> >                 - Add the new qemu command line options for starting an SEV
> guest.
> >         * Qemu-lite:
> >                 - Add the SEV support patches from the qemu repo in [3].
> >
> Hi Jesse,
> 
> Thanks for the proposal! SEV matches greatly with the Kata Container
> threat model and can be quite useful in a cloud environment.
> 
> I have one question though -- how does it handle qemu vm clone?
> 
> Cheers,
> Tao
> 

Hi Tao,

I’m not familiar with qemu VM clone. Is there any documentation or source files I could browse to learn more?

Sincerely,
Jesse


More information about the kata-dev mailing list