Firma di immagini per la sicurezza

Scopri come firmare le immagini memorizzate in Container Registry.

Per motivi di conformità e sicurezza, gli amministratori di sistema spesso desiderano distribuire il software in un sistema di produzione solo quando sono soddisfatti che:

  • Il software proviene da una fonte affidabile.

  • Il software non è stato modificato da quando è stato pubblicato, compromettendo la sua integrità.

Per soddisfare questi requisiti, puoi firmare le immagini memorizzate in Oracle Cloud Infrastructure Registry (noto anche come Container Registry). Le immagini firmate forniscono un modo per verificare sia la fonte di un'immagine che la sua integrità.

Container Registry consente agli utenti o ai sistemi di eseguire il push delle immagini nel registro e di firmarle utilizzando una chiave di cifratura master ottenuta da Oracle Cloud Infrastructure Vault, creando una firma immagine. Una firma immagine associa un'immagine firmata a una particolare chiave di cifratura master utilizzata per firmare l'immagine. Un'immagine può avere più firme, ognuna creata utilizzando una chiave di cifratura master diversa.

Gli utenti o i sistemi che estraggono un'immagine firmata da Container Registry possono essere sicuri sia che l'origine dell'immagine sia attendibile, sia che l'integrità dell'immagine non sia stata compromessa. Per migliorare ulteriormente la conformità e la sicurezza, i client possono essere configurati in modo da estrarre solo le immagini firmate dal registro.

Ad un livello elevato, questi sono i passi da seguire per memorizzare le immagini firmate in Container Registry:

  • Crea l'immagine sul tuo computer o nel tuo sistema CI/CD.

  • Contrassegnare e inviare l'immagine a Container Registry.

  • Se non si dispone dell'accesso a una chiave di cifratura master in Oracle Cloud Infrastructure Vault, ottenere l'accesso a una chiave esistente o creare una nuova chiave.

  • Firma l'immagine utilizzando l'interfaccia CLI di Container Registry, creando una firma immagine che associa l'immagine alla chiave di cifratura master e alla versione della chiave nel servizio Vault.

Firma di un'immagine e creazione di una firma immagine

Dopo aver creato un'immagine e averla inviata a Container Registry, puoi firmare l'immagine utilizzando una chiave di cifratura master ottenuta da Oracle Cloud Infrastructure Vault, creando una firma dell'immagine. Si noti che una firma immagine è associata all'OCID di un'immagine, rendendola specifica per un particolare push dell'immagine.

Per firmare un'immagine e creare una firma immagine:

  1. Creare un'immagine sul proprio computer o nel sistema CI/CD (ad esempio, utilizzando il comando docker build).

  2. Eseguire il push dell'immagine in Container Registry. Seguire le istruzioni in Push delle immagini mediante l'interfaccia CLI Docker per:

    1. Eseguire il login a Container Registry utilizzando il comando docker login.

    2. Contrassegnare l'immagine da sottoporre a PUSH utilizzando il comando docker tag. Ad esempio:

      docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
    3. Eseguire il PUSH dell'immagine in Container Registry utilizzando il comando docker push. Ad esempio:

      docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
  3. Ottenere l'OCID dell'immagine utilizzando la console (vedere Recupero dei dettagli di un'immagine) o l'interfaccia CLI (utilizzare il comando oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>).

  4. Se non si dispone già dell'accesso a una chiave asimmetrica RSA in Oracle Cloud Infrastructure Vault, ottenere l'accesso a una chiave asimmetrica RSA esistente o creare una nuova chiave di cifratura master come chiave asimmetrica RSA (vedere Creazione di una chiave di cifratura master).

    Si noti che l'uso di chiavi simmetriche AES per firmare le immagini non è supportato. Per ulteriori informazioni sui diversi tipi di chiave, vedere Panoramica del vault.

  5. Prendere nota sia dell'OCID della chiave di cifratura master che dell'OCID della versione della chiave memorizzata in Oracle Cloud Infrastructure Vault. Vedere Lista delle chiavi di cifratura principali.

  6. Firma l'immagine sottoposta a push in Container Registry utilizzando la chiave master e la versione della chiave nel servizio Vault, creando una firma immagine, immettendo:

    oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json>
    Dove:
    • --compartment-id <compartment-ocid> è l'OCID del compartimento a cui appartiene il repository dell'immagine. Ad esempio, --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa

    • --kms-key-id <key-ocid> è l'OCID della chiave di cifratura master da utilizzare per firmare l'immagine. Ad esempio, --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj

    • --kms-key-version-id <key-version-ocid> è l'OCID della versione della chiave da utilizzare per firmare l'immagine. Ad esempio, --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb

    • --signing-algorithm <signing-algorithm> è uno dei seguenti algoritmi da utilizzare per firmare l'immagine:

      • SHA_224_RSA_PKCS_PSS

      • SHA_256_RSA_PKCS_PSS

      • SHA_384_RSA_PKCS_PSS

      • SHA_512_RSA_PKCS_PSS

      L'algoritmo da scegliere dipende dal tipo di chiave di cifratura master.

      Ad esempio, --signing-algorithm SHA_224_RSA_PKCS_PSS

    • --image-id <image-ocid> è l'OCID dell'immagine da firmare. Ad esempio, --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks

    • --description <signature-description> è il testo facoltativo scelto per descrivere l'immagine. La descrizione viene inclusa come parte della firma e viene visualizzata nella console. Ad esempio, --description "Image for UAT testing"

    • --metadata <image-metadata-json> è un'informazione facoltativa scelta sull'immagine, in un formato JSON valido (solo caratteri alfanumerici, senza spazi vuoti o caratteri di escape). Ad esempio, --metadata {"buildnumber":"8447"}

    Ad esempio:

    oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}

    L'immagine specificata è ora firmata. Quando si visualizza la lista di immagini in un repository nella console, accanto al nome dell'immagine viene visualizzato il testo "(Signed)".

Visualizzazione delle immagini firmate

È possibile utilizzare la console per visualizzare le immagini firmate in un repository.

Per visualizzare le immagini firmate:

  1. Nella pagina della lista Container Registry, selezionare il repository che si desidera utilizzare dalla lista Repository e immagini. Per informazioni su come trovare la pagina della lista o il repository, vedere Elenco dei repository.

    Viene visualizzata la sezione Dettagli del repository.

  2. Selezionare il repository nella lista Repository e immagini una seconda volta.

    Le immagini nel repository, inclusi gli identificativi di versione, sono elencate nel repository nella lista Repository e immagini.

    Il testo "(Signed)" appare accanto alle immagini che sono state firmate.

  3. (Facoltativo) Dall'elenco, selezionare un'immagine firmata e selezionare la scheda Firme per visualizzare le firme create al momento della firma dell'immagine.

Utilizzo delle firme delle immagini

Una firma immagine associa un'immagine alla chiave master (ottenuta dal servizio Vault) utilizzata per firmare l'immagine. Un'immagine può avere più firme, ognuna creata utilizzando una chiave di cifratura master diversa.

Dopo aver firmato un'immagine in Container Registry e aver creato una firma immagine, è possibile:

  • Visualizzare i dettagli della firma.

  • Verificare la firma con il servizio Vault per confermare che la chiave di cifratura master utilizzata per firmare l'immagine sia ancora valida e disponibile.

  • Aggiungere alla firma tag in formato libero e tag definite.

  • Eliminare la firma per indicare che l'immagine non deve più essere considerata attendibile.

Per visualizzare, verificare, contrassegnare o eliminare la firma o le firme create al momento della firma di un'immagine:

  1. Nella pagina della lista Container Registry, selezionare il repository che si desidera utilizzare dalla lista Repository e immagini. Per informazioni su come trovare la pagina della lista o il repository, vedere Elenco dei repository.

    Viene visualizzata la sezione Dettagli del repository.

  2. Selezionare il repository nella lista Repository e immagini una seconda volta.

    Le immagini nel repository, inclusi gli identificativi di versione, sono elencate nel repository nella lista Repository e immagini.

    Il testo "(Signed)" appare accanto alle immagini che sono state firmate.

  3. Dall'elenco, selezionare un'immagine firmata e selezionare la scheda Firme per visualizzare i dettagli delle firme create al momento della firma dell'immagine:

    • Descrizione: descrizione della firma specificata al momento della firma dell'immagine.

    • Risposta di verifica: il risultato dell'ultimo tentativo di verificare la firma dell'immagine con il servizio Vault.

    • Tag: il numero di tag in formato libero o definite applicate alla firma dell'immagine.

    • Data: quando l'immagine è stata firmata e la firma dell'immagine è stata creata.

  4. (Facoltativo) Per visualizzare la chiave principale, la versione della chiave e l'algoritmo di firma per una determinata firma, selezionare Visualizza dettagli chiave dal menu Azioni per la firma.

  5. (Facoltativo) Per verificare una particolare firma con il servizio Vault, selezionare Verifica firma dal menu Azioni per la firma.

    Il servizio Vault controlla che l'origine dell'immagine abbia accesso a una chiave privata valida quando l'immagine è stata sottoposta a PUSH e che l'immagine non sia stata modificata dopo il PUSH. Se entrambe le condizioni vengono soddisfatte, la firma viene visualizzata con stato Verificato. Gli utenti o i sistemi che estraggono l'immagine dal registro possono essere sicuri sia che la fonte dell'immagine sia attendibile, sia che l'integrità dell'immagine non sia stata compromessa.

    Se la verifica dell'immagine non riesce, verificare di avere accesso alla chiave master e che non sia stata eliminata.

  6. (Facoltativo) Per aggiungere una tag in formato libero o una tag definita a una firma alla quale non è stata ancora applicata alcuna tag, selezionare Aggiungi tag dal menu Azioni per la firma.

    Se alla firma sono già state applicate una o più tag, selezionare Visualizza tag dal menu Azioni per la firma, quindi selezionare Aggiungi tag nella finestra di dialogo Visualizza tag. Per ulteriori informazioni, vedere Applicazione di tag in formato libero e tag definite a repository, immagini e firme di immagini.

  7. (Facoltativo) Per eliminare una particolare firma, selezionare Elimina firma dal menu Azioni per la firma.

    La firma viene eliminata e non viene più visualizzata nella scheda Firme. Se l'immagine non ha altre firme, il testo "(Signed)" non viene più visualizzato accanto al nome dell'immagine nella lista delle immagini nel repository.

Uso dell'interfaccia CLI

Per un elenco completo dei flag e delle opzioni variabili per i comandi CLI, vedere Command Line Reference.

Per firmare un'immagine e creare una firma immagine

Utilizzare il comando oci artifact container image-signature sign-upload e i parametri richiesti per firmare un'immagine e creare una firma immagine:

oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json> [OPTIONS]
Ad esempio:
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}

Per verificare un'immagine firmata utilizzando una firma immagine

Utilizzare il comando oci artifact container image-signature get-verify e i parametri richiesti per verificare un'immagine firmata utilizzando una firma immagine:

oci artifacts container image-signature get-verify --compartment-id <compartment-ocid> --repo-name <repository-name> --image-digest <image-digest> --trusted-keys <key-ocid> --compartment-id-in-subtree true|false [OPTIONS]

Ad esempio:

oci artifacts container image-signature get-verify --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --repo-name project01/acme-web-app --image-digest sha256:da1f_____31fd --trusted-keys ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --compartment-id-in-subtree false