Add the HashiCorp Vault demo
Signed-off-by: Kailun Qin <kailun.qin@intel.com>
This commit is contained in:
parent
47349c8d1b
commit
0f23ddb14e
30
.github/workflows/demo_test.yml
vendored
30
.github/workflows/demo_test.yml
vendored
@ -479,3 +479,33 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
sleep ${{ env.nap_time }};
|
sleep ${{ env.nap_time }};
|
||||||
docker exec enclave_ra_tls_test bash -c "/opt/enclave-tls/bin/enclave-tls-client"
|
docker exec enclave_ra_tls_test bash -c "/opt/enclave-tls/bin/enclave-tls-client"
|
||||||
|
|
||||||
|
vault_test:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Get occlum version
|
||||||
|
run: echo "OCCLUM_VERSION=$(grep "Version =" src/pal/include/occlum_version.h | awk '{print $4}')" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Create container
|
||||||
|
run: docker run -itd --name=vault_test -v $GITHUB_WORKSPACE:/root/occlum occlum/occlum:${{ env.OCCLUM_VERSION }}-ubuntu18.04
|
||||||
|
|
||||||
|
- name: Build dependencies
|
||||||
|
run: docker exec vault_test bash -c "cd /root/occlum; make submodule"
|
||||||
|
|
||||||
|
- name: Make install
|
||||||
|
run: docker exec vault_test bash -c "cd /root/occlum; OCCLUM_RELEASE_BUILD=y make install"
|
||||||
|
|
||||||
|
- name: Download and build HashiCorp Vault
|
||||||
|
run: docker exec vault_test bash -c "cd /root/occlum/demos/golang/vault && ./prepare_vault.sh"
|
||||||
|
|
||||||
|
- name: Run the Vault server on Occlum
|
||||||
|
run: docker exec vault_test bash -c "cd /root/occlum/demos/golang/vault && SGX_MODE=SIM ./run_occlum_vault_server.sh"
|
||||||
|
|
||||||
|
- name: Run the Vault client
|
||||||
|
run: |
|
||||||
|
sleep ${{ env.nap_time }};
|
||||||
|
docker exec vault_test bash -c "cd /root/occlum/demos/golang/vault && ./run_occlum_vault_test.sh"
|
||||||
|
19
demos/golang/vault/README.md
Normal file
19
demos/golang/vault/README.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Run HashiCorp Vault with Occlum
|
||||||
|
|
||||||
|
This project demonstrates how Occlum enables [HashiCorp Vault](https://github.com/hashicorp/vault) in SGX enclaves.
|
||||||
|
|
||||||
|
Step 1: Download Vault source code and build the Vault executable
|
||||||
|
```
|
||||||
|
./prepare_vault.sh
|
||||||
|
```
|
||||||
|
Once completed, the resulting Vault source code can be found in the `source_code` directory with the built binary located in `./source_code/bin`.
|
||||||
|
|
||||||
|
Step 2: Run Vault server in `dev` mode with a custom initial root token inside SGX enclave with Occlum
|
||||||
|
```
|
||||||
|
./run_occlum_vault_server.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Step 3: In another terminal, run Vault `kv` CLI for interacting with Vault's key/value secrets engine
|
||||||
|
```
|
||||||
|
./run_occlum_vault_test.sh
|
||||||
|
```
|
19
demos/golang/vault/prepare_vault.sh
Executable file
19
demos/golang/vault/prepare_vault.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
src_dir="./source_code"
|
||||||
|
vault="$src_dir/bin/vault"
|
||||||
|
|
||||||
|
if [ -f "$vault" ]; then
|
||||||
|
echo "Warning: the current working directory has Vault already downloaded and built"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# download the source code of Vault v1.7.0
|
||||||
|
wget https://github.com/hashicorp/vault/archive/refs/tags/v1.7.0.tar.gz
|
||||||
|
mkdir -p $src_dir && tar -xvzf v1.7.0.tar.gz -C $src_dir --strip-components=1
|
||||||
|
|
||||||
|
# build Vault executable
|
||||||
|
pushd $src_dir
|
||||||
|
occlum-go build -o bin/vault
|
||||||
|
popd
|
33
demos/golang/vault/run_occlum_vault_server.sh
Executable file
33
demos/golang/vault/run_occlum_vault_server.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
vault="./source_code/bin/vault"
|
||||||
|
|
||||||
|
if [ ! -f $vault ];then
|
||||||
|
echo "Error: cannot stat file '$vault'"
|
||||||
|
echo "Please see README and build it using Occlum Golang toolchain"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1. Init Occlum Workspace
|
||||||
|
rm -rf occlum_instance
|
||||||
|
occlum new occlum_instance
|
||||||
|
cd occlum_instance
|
||||||
|
new_json="$(jq '.resource_limits.user_space_size = "2560MB" |
|
||||||
|
.resource_limits.kernel_space_heap_size="320MB" |
|
||||||
|
.resource_limits.kernel_space_stack_size="10MB" |
|
||||||
|
.process.default_stack_size = "40MB" |
|
||||||
|
.process.default_heap_size = "320MB" |
|
||||||
|
.process.default_mmap_size = "960MB" ' Occlum.json)" && \
|
||||||
|
echo "${new_json}" > Occlum.json
|
||||||
|
|
||||||
|
# 2. Copy executable into Occlum Workspace and build
|
||||||
|
cp ../source_code/bin/vault image/bin
|
||||||
|
occlum build
|
||||||
|
|
||||||
|
# 3. Run the Hashicorp Vault server listening on "127.0.0.1:8200"
|
||||||
|
echo -e "${BLUE}occlum run /bin/vault server -dev -dev-no-store-token -dev-root-token-id mytoken${NC}"
|
||||||
|
time occlum run /bin/vault server -dev -dev-no-store-token -dev-root-token-id mytoken &
|
23
demos/golang/vault/run_occlum_vault_test.sh
Executable file
23
demos/golang/vault/run_occlum_vault_test.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
vault="./source_code/bin/vault"
|
||||||
|
|
||||||
|
if [ ! -f $vault ];then
|
||||||
|
echo "Error: cannot stat file '$vault'"
|
||||||
|
echo "Please see README and build it using Occlum Golang toolchain"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# "127.0.0.1:8200" is the address bound to in "dev" mode
|
||||||
|
export VAULT_ADDR=http://127.0.0.1:8200
|
||||||
|
export VAULT_TOKEN=mytoken
|
||||||
|
|
||||||
|
echo -e "${BLUE}$vault kv put secret/creds passcode=occlum${NC}"
|
||||||
|
$vault kv put secret/creds passcode=occlum
|
||||||
|
|
||||||
|
echo -e "${BLUE}$vault kv get secret/creds${NC}"
|
||||||
|
$vault kv get secret/creds
|
Loading…
Reference in New Issue
Block a user