Skip to content

Commit 230c2b6

Browse files
authored
refactor(e2e): harden supply chain and binary verification logic (#139)
- Add --strict to sha256sum checks for Helm and Kubectl to prevent silent failures on malformed hashes. - Refactor RKE2 installation to eliminate the "pipe-to-shell" pattern and use systemctl enable --now. - Move AWS CLI GPG public key from an inline Makefile string to a standalone file (awscli-publickey.pub). - Implement GPG signature verification for AWS CLI downloads to ensure artifact authenticity. - Update RKE2 wait logic and environment configuration for better E2E reliability. - Lower release.yml's top level permissions Signed-off-by: Andy Pitcher <andy.pitcher@suse.com>
1 parent aa30124 commit 230c2b6

4 files changed

Lines changed: 58 additions & 12 deletions

File tree

.github/workflows/release.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ on:
55
tags:
66
- v*
77

8+
permissions: {}
9+
810
jobs:
911
build:
1012
runs-on: ubuntu-latest

hack/e2e/setup-vm.sh

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ function installDependencies(){
7676
local HELM_SHA256="${!HELM_SHA256_VAR}"
7777
local HELM_FILE="helm-${HELM_VERSION}-linux-${ARCH}.tar.gz"
7878
curl -fsSLO "https://get.helm.sh/${HELM_FILE}"
79-
echo "${HELM_SHA256} ${HELM_FILE}" | sha256sum -c -
79+
echo "${HELM_SHA256} ${HELM_FILE}" | sha256sum -c - --strict
8080
tar xzf "${HELM_FILE}"
8181
install -o root -g root -m 0755 linux-${ARCH}/helm /usr/local/bin/helm
8282
rm -rf linux-${ARCH} "${HELM_FILE}"
@@ -86,21 +86,22 @@ function installDependencies(){
8686
local KUBECTL_SHA256_VAR="KUBECTL_SHA256_${ARCH}"
8787
local KUBECTL_SHA256="${!KUBECTL_SHA256_VAR}"
8888
curl -fsSLO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${ARCH}/kubectl"
89-
echo "${KUBECTL_SHA256} kubectl" | sha256sum -c -
89+
echo "${KUBECTL_SHA256} kubectl" | sha256sum -c - --strict
9090
install -o root -g root -m 0755 kubectl /usr/bin/kubectl
9191
rm -f kubectl
9292
kubectl version --client=true
9393
}
9494

9595
function installRKE2(){
96-
echo "> Installing RKE2 ${INSTALL_RKE2_VERSION}"
97-
curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION="${INSTALL_RKE2_VERSION}" sh -
96+
echo "> Installing RKE2 ${INSTALL_RKE2_VERSION} for ${ARCH}"
97+
curl -sfL https://get.rke2.io -o install.sh
98+
INSTALL_RKE2_VERSION="${INSTALL_RKE2_VERSION}" sh install.sh
99+
rm -f install.sh
98100
# RKE2 install script does not install the SELinux policy by default for tumbleweed; manual setup required.
99101
if isSUSE; then
100102
sudo zypper -n install rke2-selinux
101103
fi
102-
systemctl start rke2-server.service
103-
systemctl enable rke2-server.service
104+
systemctl enable --now rke2-server.service
104105

105106
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
106107
echo "export KUBECONFIG=/etc/rancher/rke2/rke2.yaml" >> ~/.bashrc

hack/make/awscli-publickey.pub

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
Comment: Sourced from https://awscli.amazonaws.com/awscli-exe-linux-x86_64.sig
3+
4+
mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
5+
ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
6+
PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
7+
TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
8+
gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
9+
C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
10+
94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
11+
lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
12+
fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
13+
EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
14+
XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
15+
tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4CGwMF
16+
CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQT7Xbd/1cEYuAURraimMQrMRnJHXAUC
17+
aGveYQUJDMpiLAAKCRCmMQrMRnJHXKBYD/9Ab0qQdGiO5hObchG8xh8Rpb4Mjyf6
18+
0JrVo6m8GNjNj6BHkSc8fuTQJ/FaEhaQxj3pjZ3GXPrXjIIVChmICLlFuRXYzrXc
19+
Pw0lniybypsZEVai5kO0tCNBCCFuMN9RsmmRG8mf7lC4FSTbUDmxG/QlYK+0IV/l
20+
uJkzxWa+rySkdpm0JdqumjegNRgObdXHAQDWlubWQHWyZyIQ2B4U7AxqSpcdJp6I
21+
S4Zds4wVLd1WE5pquYQ8vS2cNlDm4QNg8wTj58e3lKN47hXHMIb6CHxRnb947oJa
22+
pg189LLPR5koh+EorNkA1wu5mAJtJvy5YMsppy2y/kIjp3lyY6AmPT1posgGk70Z
23+
CmToEZ5rbd7ARExtlh76A0cabMDFlEHDIK8RNUOSRr7L64+KxOUegKBfQHb9dADY
24+
qqiKqpCbKgvtWlds909Ms74JBgr2KwZCSY1HaOxnIr4CY43QRqAq5YHOay/mU+6w
25+
hhmdF18vpyK0vfkvvGresWtSXbag7Hkt3XjaEw76BzxQH21EBDqU8WJVjHgU6ru+
26+
DJTs+SxgJbaT3hb/vyjlw0lK+hFfhWKRwgOXH8vqducF95NRSUxtS4fpqxWVaw3Q
27+
V2OWSjbne99A5EPEySzryFTKbMGwaTlAwMCwYevt4YT6eb7NmFhTx0Fis4TalUs+
28+
j+c7Kg92pDx2uQ==
29+
=OBAt
30+
-----END PGP PUBLIC KEY BLOCK-----

hack/make/tools.mk

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
1+
MKFILE_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
12
TOOLS_BIN := $(shell mkdir -p build/tools && realpath build/tools)
3+
ARCH := $(shell uname -m | sed 's/arm64/aarch64/')
4+
5+
# renovate-local: awscli-exe-linux-x86_64=2.34.30
6+
AWSCLI_VERSION := 2.34.30
7+
AWSCLI_PUB_KEY := $(MKFILE_DIR)/awscli-publickey.pub
28

39
AWSCLI = $(TOOLS_BIN)/aws/dist/aws
4-
$(AWSCLI): ## Download awscliv2 if not yet downloaded.
5-
curl "https://awscli.amazonaws.com/awscli-exe-linux-$(shell uname -m).zip" -o "$(TOOLS_BIN)/awscliv2.zip"
6-
cd $(TOOLS_BIN) && unzip -q $(TOOLS_BIN)/awscliv2.zip
7-
rm $(TOOLS_BIN)/awscliv2.zip
10+
$(AWSCLI): ## Download, verify, and install awscliv2.
11+
@mkdir -p $(TOOLS_BIN)
12+
@echo "Downloading AWS CLI v$(AWSCLI_VERSION) for ${ARCH}"
13+
curl -sL "https://awscli.amazonaws.com/awscli-exe-linux-$(ARCH)-$(AWSCLI_VERSION).zip" -o "$(TOOLS_BIN)/awscliv2.zip"
14+
curl -sL "https://awscli.amazonaws.com/awscli-exe-linux-$(ARCH)-$(AWSCLI_VERSION).zip.sig" -o "$(TOOLS_BIN)/awscliv2.sig"
15+
@echo "Verifying GPG signature using $(AWSCLI_PUB_KEY)"
16+
gpg --import $(AWSCLI_PUB_KEY)
17+
gpg --verify $(TOOLS_BIN)/awscliv2.sig $(TOOLS_BIN)/awscliv2.zip
18+
cd $(TOOLS_BIN) && unzip -q awscliv2.zip
19+
@rm $(TOOLS_BIN)/awscliv2.zip $(TOOLS_BIN)/awscliv2.sig
20+
@echo "AWS CLI installed to $(AWSCLI)"
821

922
GH = $(shell which gh)
1023
$(GH):
11-
echo "GitHub CLI gh was not found. To install use your package manager."
12-
exit 1
24+
@echo "GitHub CLI gh was not found. To install use your package manager."
25+
@exit 1

0 commit comments

Comments
 (0)