Firma di risorse utente non immagine
La suite di strumenti DevSecOps offre la possibilità di firmare artefatti non di tipo immagine, limitatamente a formati di file quali tar e zip. Questo processo implica l'utilizzo di uno script insieme allo script di
firma predefinito. Se è necessario firmare risorse utente diverse dai file tar e zip, è necessario fornire un'implementazione personalizzata dello script. Utilizza la proprietà di testo " skip-sign-artifact-type " per escludere la firma delle immagini per i tipi di artefatti specificati (ad es.: log; report; documentazione).
L'ambiente di runtime richiesto deve essere disponibile all'interno dell'immagine per supportare il processo di firma.
Prima di iniziare
Prima di iniziare con la firma della risorsa utente non immagine, è necessario disporre dei seguenti prerequisiti.
-
Per firmare una risorsa utente, è necessario disporre della chiave privata GPG. Per generare una chiave, puoi utilizzare la documentazione.
-
Il file
.pipline-config.yamldeve essere aggiornato con la seguente configurazione dello stage.sign-artifact: image: icr.io/continuous-delivery/pipeline/image-signing:1.0.0@sha256:e9d8e354668ba3d40be2aaee08298d2aa7f0e1c8a1829cca4094ec93830e3e6a image_pull_policy: IfNotPresent abort_on_failure: false dind: true script: | #!/usr/bin/env bash source ${COMMONS_PATH}/sign-artifact/sign-artifacts.sh -
Per impostazione predefinita, lo script sign-artifacts può firmare tutti gli artefatti elencati nella raccolta
list_artifacts. Assicurarsi che le risorse utente siano correttamente memorizzate e integrate.-
Assicurarsi di memorizzare le risorse utente create nel runtime della pipeline Cocoa. Questo obiettivo può essere raggiunto in uno dei due modi seguenti.
-
Utilizzare lo strumento
save_fileper salvare il file tar della risorsa utente, che consente il richiamo nelle fasi successive.save_file "${APP_NAME}" "${APP_NAME}-${VERSION}.tgz" -
Archivia le risorse utente in un'ubicazione designata, con il nome della risorsa utente che corrisponde al nome della tua applicazione.
location="$(basename $(pwd))"
-
-
Integrare la risorsa utente salvata nel runtime Cocoa utilizzando il seguente codesnippet come guida.
save_artifact "${APP_NAME}" \ type=tar \ "name=${APP_NAME}-${VERSION}.tgz" \ "digest=${DIGEST}" \ "location=${location}" \ "provenance=${APP_NAME}-${VERSION}.tgz@${DIGEST}"
-
Firma di risorse utente non immagine
Lo script predefinito utilizza il client GPG per la firma. Durante questa fase, tutte le risorse utente vengono sottoposte al processo di firma. Dopo che la risorsa utente è stata firmata, lo script memorizza sia la risorsa utente che la firma nel runtime della pipeline Cocoa.
Passi post - firma
Per richiamare la risorsa utente firmata e la firma corrispondente, è possibile utilizzare il seguente approccio.
signed_artifact=$(mktemp)
if load_file "${artifact}_signed_artifact" >"${signed_artifact}" 2> /dev/null; then
echo "Loaded the signed artifact ${artifact} from load_file at the ${signed_artifact}"
else
artifact_location="$(load_artifact "$artifact" "location")"
cp "${WORKSPACE}/${artifact_location}/${name}" "${signed_artifact}"
echo "Loaded the artifact at the ${WORKSPACE}/${artifact_location}/${name}"
fi
artifact_signature=$(mktemp)
if load_file "${artifact}_signature" >"${artifact_signature}" 2> /dev/null; then
echo "Loaded the signature of ${artifact} from load_file at the ${artifact_signature}"
fi
Se hai bisogno di conservare il manufatto firmato, puoi utilizzare una soluzione di archiviazione a tua scelta oppure puoi utilizzare IBM Cloud Object Storage. Il seguente frammento di codice mostra un esempio di come caricare i manufatti firmati e le firme su Cloud Object Storage e aggiornare il proprio archivio di inventario.
# Upload the artifact and signature to Cloud Object Storage.
namespace="$(get_env pipeline_namespace)"
local cos_params=(
--pipeline-run-id="${PIPELINE_RUN_ID}"
--namespace="${namespace}"
--backend cos
)
# Upload the artifact
artifact_cos_url=$(cocoa artifact upload "${signed_artifact}" "${cos_params[@]}")
# Upload the artifact
artifact_signature_cos_url=$(cocoa artifact upload "${artifact_signature}" "${cos_params[@]}")
APP_ARTIFACTS='{ "app": "'${APP_NAME}'", "artifact_url": "'${artifact_cos_url}'", "artifact_signature": "'${artifact_signature_cos_url}'" }'
cocoa inventory add \
--artifact="${name}@${digest}" \
--name="${APP_REPO_NAME}" \
--app-artifacts="${APP_ARTIFACTS}" \
--signature="${signature}" \
--provenance="${name}@${digest}" \
--sha256="${digest}" \
--type=$type" \
"${params[@]}"