Crittografia delle immagini per la riservatezza dei contenuti in Container Registry
È possibile proteggere la riservatezza delle immagini di IBM Cloud® Container Registry e garantire che gli host non affidabili non possano eseguire le immagini.
Creare un'immagine crittografata in modo che chi non ha la chiave privataUn modello algoritmico utilizzato per crittografare messaggi che possono essere decrittografati solo mediante la chiave pubblica corrispondente. Inoltre, la chiave privata viene utilizzata per decrittografare i messaggi crittografati con la chiave pubblica corrispondente. La chiave privata è conservata sul sistema dell'utente e protetta da password. non possa accedere al contenuto. Crea l'immagine crittografata utilizzando una coppia di chiavi pubblica-privata RSA per crittografare e decrittografare l'immagine. Una chiave pubblica non è un segreto e chiunque può usarla per crittografare un'immagine. Una chiave privata è un segreto e solo gli utenti che dispongono di tale chiave privata possono utilizzarla per decrittografare l'immagine.
La crittografia è supportata in IBM Cloud Container Registry ed è conforme ai seguenti standard:
Per ulteriori informazioni sulla crittografia delle immagini, vedi Immagini container crittografate per la sicurezza delle immagini container a riposo e Avanzamento della conformità e della sicurezza delle immagini tramite Container Image Encryption.
Prima di iniziare
- Completa le istruzioni in Introduzione a IBM Cloud Container Registry.
- Assicurati di avere la versione più recente del plug-in CLI
container-registry
per la CLI IBM Cloud, consulta Aggiornamento del plug-incontainer-registry
. - Assicurati di avere uno spazio dei nomi privato in cui eseguire il push della tua immagine crittografata, vedi Configura uno spazio dei nomi.
- Installare Buildah versione 1.15, o successiva, in modo da poter creare immagini criptate. Buildah funziona solo nell'ambiente Linux®. In alternativa a Linux®, si può usare una macchina virtuale o un'immagine Docker per eseguire Buildah per costruire le immagini.
- Installa Podman.
Crea la coppia di chiavi pubblica-privata
Crea una coppia di chiavi pubblica-privata utilizzando i comandi OpenSSL.
-
Creare una directory di lavoro, ad esempio
USER_KEYS
, in cui memorizzare le chiavi e passare a tale directory:mkdir USER_KEYS; cd USER_KEYS
-
Utilizzare OpenSSL per creare una chiave privata, dove
USER_KEY
è il nome dell'identità della chiave:openssl genrsa --out USER_KEYPrivate.pem
-
Crea una chiave pubblica:
openssl rsa -in USER_KEYPrivate.pem -pubout -out USER_KEYPub.pem
Per utilizzare la chiave privata in produzione, devi archiviare e proteggere in modo sicuro la chiave privata in un archivio appropriato. Potresti anche voler gestire la chiave pubblica allo stesso modo. Per ulteriori informazioni, vedi Archiviazione delle chiavi.
-
Elenca le chiavi per assicurarti che siano state create:
ls -l
-
Per utilizzare questa coppia di chiavi per crittografare le immagini, visualizza la chiave pubblica immettendo il seguente comando
cat
:cat USER_KEYPub.pem
Ottieni una risposta simile al seguente output:
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8Ny7dCWQ8Pdq1ddYSwk QOCB3lUEZVEyj9StX3jnISF/rxIsUZzJfbOrQN0fGkm+1sCCtltgQdztTjito8Fh DGflqQBSmV40XP3iZnNUJDrHuAol463Z/BuxxFXL3ry6rTosLGfrRwdQjxp8RSsn WyIIO2rmcqXZYe4SCtiMjMejLlTIDWLIMdYL3d6hA4DpgDLoh6EPmhKMVVwRt5b0 ew5eMLcDuq6ButOM5yv4zYVHNrajY41NK+abSlFb6wzMg2AUDiC/MxV1LRq6mpyZ GJllx3LS1M1j7fDO3pmh/M0X7yD/4RgHwFaW4/4CQBw3fyxrOv0pZzZay+o -----END PUBLIC KEY-----
Crittografa l'immagine
Crittografare l'immagine utilizzando la chiave pubblica e quindi creare un'immagine del contenitore utilizzando un file DockerUn file di testo che contiene le istruzioni per creare un'immagine Docker..
-
Accedere alla directory in cui sono archiviate le applicazioni, ad esempio
MY_APP
.cd MY_APP
-
Crea il Dockerfile immettendo il seguente comando:
cat << EOF >> Dockerfile FROM nginx:latest RUN echo "some secret" > /secret-file EOF
-
Usare Buildah per creare un'immagine non criptata eseguendo il seguente comando, dove
NAMESPACE
è il proprio spazio dei nomi:buildah bud -t us.icr.io/NAMESPACE/MY_APP .
us.icr.io/NAMESPACE/MY_APP
è impegnato nell'archivio immagini locale. -
Crittografare l'immagine utilizzando la chiave pubblica e caricare l'immagine nel registro eseguendo i seguenti comandi e specificando il protocollo JSON Web Encryption (
jwe
) per crittografare l'immagine, doveUSER_KEYS/USER_KEYPub.pem
è la chiave di crittografia.buildah push --encryption-key jwe:..USER_KEYS/USER_KEYPub.pem us.icr.io/NAMESPACE/MY_APP
Buildah versione 1.15, o successive, utilizza le credenziali di accesso Docker per l'autenticazione. Se queste credenziali non funzionano o se desideri utilizzare una chiave APIUn codice univoco utilizzato per autenticare e autorizzare le richieste API. Il codice viene passato a un'API per identificare l'applicazione o l'utente chiamante e per tracciare e controllare l'utilizzo dell'API., puoi fornire l'opzione
—-creds <username>
, dove<username>
è il nome utente. Se si utilizza l'opzione—-creds <username>
, quando richiesto, immettere la password della credenziale di registro.Si ottiene una risposta che informa che il manifest è stato scritto nella destinazione dell'immagine, che è il registro.
-
Controlla il tuo registro per assicurarti che l'immagine sia presente.
Esegui il pull dell'immagine e decrittografala
Esegui il pull dell'immagine dal registro e decrittografala utilizzando la chiave privata.
-
Per assicurarti di eseguire il pull dal registro e di non utilizzare la cache locale, rimuovi l'immagine localmente:
buildah rmi -f us.icr.io/NAMESPACE/MY_APP
-
(Facoltativo) Puoi provare ad eseguire il pull dell'immagine senza fornire la chiave di decrittografia per confermare che l'immagine non può essere decrittografata:
buildah pull us.icr.io/NAMESPACE/MY_APP
L'output contiene un messaggio simile al seguente:
...<truncated>... Error decrypting layer sha256:ab4ea03582e08a8e8fc35b778cc6f1a1fa797469fa9cc61cee85f703b316bb12: missing private key needed for decryption ERRO exit status 125
-
Utilizzare Buildah per estrarre l'immagine con la chiave di decrittazione, dove
USER_KEYS/USER_KEYPrivate.pem
è la chiave di decrittazione eus.icr.io/NAMESPACE/MY_APP
è il registro:buildah pull --decryption-key ../USER_KEYS/USER_KEYPrivate.pem us.icr.io/NAMESPACE/MY_APP
L'immagine crittografata viene recuperata dal registro, decrittografata e archiviata nell'archivio immagini locale.
-
Conferma che l'immagine è archiviata eseguendo Podman:
podman run -it us.icr.io/NAMESPACE/MY_APP /bin/bash
Archiviazione delle chiavi
Per utilizzare la chiave privata in produzione, devi archiviare e proteggere in modo sicuro la chiave privata. Potresti anche voler gestire la chiave pubblica allo stesso modo per controllare chi può creare le immagini. È possibile utilizzare IBM Key Protect per conservare e proteggere le chiavi.
IBM Key Protect memorizza le chiavi simmetriche anziché le chiavi PKI asimmetriche utilizzate per la crittografia dell'immagine. Puoi aggiungere le tue chiavi separatamente come due chiavi standard IBM Key Protect utilizzando il dashboard, la
CLI o l'API. IBM Key Protect richiede che vengano importati solo i dati Base64. Per ottenere i dati puri di Base64, è possibile codificare i file PEM eseguendo "openssl enc -base64 -A -in USER_KEYPrivate.pem -out USER_KEYPrivate.b64"
prima di caricare il contenuto di Base64 e invertire l'azione per ottenere nuovamente la chiave utilizzabile eseguendo "openssl enc -base64 -A -d -in USER_KEYPrivate..b64 -out USER_KEYPrivate.pem"
.
Per ulteriori informazioni su come utilizzare IBM Key Protect per archiviare e proteggere le tue chiavi, consulta Come portare le tue chiavi di crittografia nel cloud e Importazione delle tue proprie chiavi.
In alternativa, puoi proteggere le tue chiavi nel tuo archivio utilizzando una chiave root IBM Key Protect per impacchettarle. Questa azione significa che devi spacchettarle di nuovo utilizzando IBM Key Protect e la chiave root valida.
Ad esempio, per avvolgere le chiavi utilizzando la CLI, eseguire il comando "ibmcloud kp key wrap ROOT_KEY_ID -p <base64 encoded image key>"
e per decomprimere le chiavi, eseguire il comando "ibmcloud kp key unwrap ROOT_KEY_ID -p <base64 cyphertext>
,
dove ROOT_KEY_ID
è l'ID della chiave principale che si sta utilizzando.
Per ulteriori informazioni su come proteggere le tue chiavi nel tuo archivio utilizzando una chiave root IBM Key Protect per impacchettarle, vedi Impacchettamento delle chiavi.
Le immagini crittografate non vengono sottoposte a scansione dal Vulnerability Advisor.
Passi successivi
Esegui la tua immagine crittografata in un cluster Red Hat® OpenShift® on IBM Cloud® utilizzando il componente aggiuntivo cluster Image Key Synchronizer.