Creazione di attestazioni con Voucher

Questo tutorial descrive come configurare e utilizzare Coupon per creare attestazioni di Autorizzazione binaria.

Panoramica dei coupon

Il coupon è uno strumento open source che esegue una serie di controlli immagini container prima di creare Autorizzazione binaria attestazioni delle immagini. Il coupon ha un cliente e un componente del server. Esegui Voucher Client come passaggio aggiuntivo nel di Cloud Shell, dopo il passaggio che crea l'immagine. Quando il cliente del coupon viene eseguito, invia l'immagine a Voucher Server, che esegue controlli. Sei tu a definire i controlli eseguiti dal voucher, insieme ad altri criteri, nel File di configurazione del server voucher.

Questo tutorial mostra come utilizzare il controllo snakeoil del coupon per testare le vulnerabilità nelle immagini. Puoi attivare il controllo nel file di configurazione Impostare l'opzione fail-on su una soglia di vulnerabilità, come mostrato più avanti questo tutorial.

Al termine del controllo snakeoil, se tutte le vulnerabilità identificate scendere al di sotto della soglia, il server voucher crea Autorizzazione binaria dell'immagine. Se una delle vulnerabilità identificate soddisfa o la soglia, il server coupon non crea un'attestazione.

Al momento del deployment dell'immagine container, senza un'attestazione verificata, L'applicazione di Autorizzazione binaria impedisce il deployment dell'immagine.

Obiettivi

In questa guida imparerai a:

  1. Configura il server coupon in Cloud Run.
  2. Configura il client coupon.
  3. Utilizza il coupon nelle pipeline di compilazione di esempio.

Costi

Questa guida utilizza i seguenti prodotti Google Cloud.

  • Container Registry
  • Artifact Analysis
  • Cloud Build
  • Cloud Key Management Service
  • Cloud Run

Utilizza il Calcolatore prezzi per generare una stima dei costi. in base all'utilizzo previsto.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Enable the Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Enable the Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Ti consigliamo di configurare Autorizzazione binaria con Google Kubernetes Engine. Questo tutorial descrive come creare un'attestazione. Per usare la fase di deployment per verificare l'attestazione ed eseguire il deployment immagine, è necessario configurare Autorizzazione binaria. Assicurati di configurare per richiedere attestazioni. Puoi configurare il criterio nella console Google Cloud oppure nella riga di comando.
  13. Specifica il tuo progetto Google Cloud in una variabile di ambiente.

      export PROJECT_ID=PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

  14. Imposta l'ID progetto per i comandi gcloud:

    gcloud config set project ${PROJECT_ID}

  15. Specifica il numero del progetto in una variabile di ambiente per i passaggi futuri:

    export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" \
      --format='value(project_number)')

Configura il server dei coupon

Nei passaggi successivi, configurerai il server coupon.

Crea una chiave di firma di Cloud Key Management Service

In questa sezione devi creare la chiave che il Voucher Server utilizza per creare un Attestazione di Autorizzazione binaria.

  1. Crea un keyring:

    gcloud kms keyrings create KEY_RING\
       --location global
    

    Sostituisci KEY_RING con un nome di keyring, ad esempio voucher-key-ring.

  2. Crea una chiave di firma:

    gcloud kms keys create KEY_NAME \
      --keyring KEY_RING \
      --location global \
      --purpose "asymmetric-signing" \
      --default-algorithm "rsa-sign-pkcs1-4096-sha512"
    

    Sostituisci KEY_NAME con il nome di una chiave, ad esempio voucher-key.

  3. Archivia la versione della chiave di Cloud Key Management Service ID risorsa:

    export KMS_RESOURCE_ID=projects/$PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
    
  4. Concedi il ruolo cloudkms.signer a Account di servizio del motore di runtime di Compute Engine.

    In questo passaggio, concedi il ruolo cloudkms.signer al l'account di servizio che esegue Voucher Server. Ciò consente a Voucher Server di firmare le attestazioni con le chiavi di Cloud Key Management Service. Per farlo, esegui il comando seguente comando:

    gcloud kms keys add-iam-policy-binding\
      KEY_NAME --keyring=KEY_RING\
      --location=global\
      --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com\
      --role=roles/cloudkms.signer
    

Crea la nota Artifact Analysis

In questa sezione creerai la nota.

  1. Memorizza l'ID nota:

    export NOTE_ID=snakeoil
    
  2. Archivia l'URI della nota:

    export NOTE_URI=projects/$PROJECT_ID/notes/$NOTE_ID
    
  3. Crea payload di richieste:

    cat > /tmp/note_payload.json << EOM
    {
      "name": "${NOTE_URI}",
      "attestation": {
        "hint": {
          "human_readable_name": "voucher note for snakeoil check"
        }
      }
    }
    EOM
    
  4. Crea la nota:

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $(gcloud --project ${PROJECT_ID} auth print-access-token)"  \
      -H "x-goog-user-project: ${PROJECT_ID}" \
      --data-binary @/tmp/note_payload.json  \
    "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/?noteId=${NOTE_ID}"
    

Creare e configurare il server coupon

In questa configurazione una tantum, ottieni, configuri e crei l'immagine del server dei coupon. Quindi lo archivierai in Container Registry.

  1. Clona il repository Voucher:

    git clone https://github.com/grafeas/voucher.git
    cd voucher/
    

    Questo repository contiene:

    • Codice sorgente per creare il server voucher.
    • Codice sorgente per creare un client coupon.
    • Esempi di utilizzo del coupon.
  2. Aggiorna il file di configurazione di Voucher Server.

    Linux

    Crea il file di configurazione di Voucher Server da un modello, sostituendo e con i valori definiti sopra. Tu sì eseguendo questo comando:

     cat tutorials/cloudrun/config.toml.template \
        | sed -e "s?<PROJECT_ID>?${PROJECT_ID}?g" \
        | sed -e "s?<KMS_KEY_NAME>?${KMS_RESOURCE_ID}?g" \
          > tutorials/cloudrun/config.toml
    

    Altro sistema operativo

    1. Modifica il file tutorials/cloudrun/config.toml.template.

      • Sostituisci <PROJECT_ID> con il valore del campo ${PROJECT_ID}.
      • Sostituisci <KMS_KEY_NAME> con il valore del campo ${KMS_RESOURCE_ID}.
    2. Salva il file come tutorials/cloudrun/config.toml.

  3. Visualizza il file di configurazione di Voucher Server:

    cat tutorials/cloudrun/config.toml
    

    Verrà visualizzato un output contenente quanto segue:

    failon = "high"
    

    Tieni presente che nel file di configurazione, l'opzione failon è impostata su high. Questa impostazione configura il server coupon in modo che esegua un controllo di vulnerabilità un'immagine. Se l'immagine contiene vulnerabilità con gravità HIGH, la verifica ha esito negativo e il server voucher non crea Autorizzazione binaria l'attestazione. Per ulteriori informazioni sulle impostazioni di fail-on, vedi Fail-On: errore in caso di vulnerabilità.

  4. Crea e carica l'immagine del container Voucher Server:

    In questa sezione esegui la pipeline Cloud Build che crea l'immagine del container del server dei coupon. La build carica anche il server voucher in gcr.io/$PROJECT_ID/voucher-server.

    gcloud  builds submit --config ./tutorials/cloudrun/cloudbuild-server.yaml
    

Esegui il deployment del server coupon in Cloud Run

  1. Seleziona una regione.

    Per visualizzare un elenco delle regioni disponibili, consulta Visualizzare un elenco delle regioni disponibili. Crea una variabile per memorizzare la regione selezionata:

    export REGION=REGION
    

    Sostituisci REGION con il nome della regione in cui prevedi di eseguire il deployment del server dei coupon.

  2. Esegui il deployment del server coupon in Cloud Run.

    gcloud run deploy --image gcr.io/${PROJECT_ID}/voucher-server \
      --platform managed voucher-server \
      --region ${REGION} \
      --no-allow-unauthenticated
    

    L'output visualizzato sarà simile al seguente:

    Service [voucher-server] revision [voucher-server-00001-caw] has been deployed and is serving 100 percent of traffic.
    Service URL: https://voucher-server-4wjtm2amga-uc.a.run.app
    
  3. Memorizza l'URL del servizio Voucher Server:

    export SERVER_SERVICE_URL=$(gcloud run services describe voucher-server --platform managed --region ${REGION} --format='value(status.url)')
    

Configurare il client per i coupon

Nei passaggi successivi, configuri il client coupon.

  1. Crea l'account di servizio callback per il client coupon:

    gcloud iam service-accounts create INVOKER_ACCOUNT_NAME
    

    Sostituisci INVOKER_ACCOUNT_NAME con un nome per il servizio richiamar come voucher-invoker.

  2. Specifica l'account di servizio:

    export INVOKER_SERVICE_ACCOUNT=INVOKER_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com
    
  3. Concedi il ruolo run.invoker all'account di servizio callback per il progetto.

    Concedi all'account di servizio fetchr l'autorizzazione per richiamare il server voucher su in Cloud Run. Per farlo, inserisci il seguente comando:

    gcloud run services add-iam-policy-binding voucher-server \
      --member serviceAccount:$INVOKER_SERVICE_ACCOUNT \
      --role roles/run.invoker \
      --platform managed \
      --region ${REGION}
    
  4. Concedi il ruolo iam.serviceAccountTokenCreator a per l'account di servizio Invoryr per Cloud Build.

    In questa sezione, concedi all'account di servizio Cloud Build l'autorizzazione per impersonare l'account di servizio dell'invoker in modo che il client dei coupon abbia l'autorizzazione per inviare richieste al server dei coupon durante la compilazione. Per farlo, inserisci seguente comando:

    gcloud iam service-accounts add-iam-policy-binding $INVOKER_SERVICE_ACCOUNT \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/iam.serviceAccountTokenCreator
    

Usa il coupon per verificare la presenza di vulnerabilità nelle immagini

In questa sezione eseguirai due pipeline di Cloud Build di esempio. In entrambe le pipeline, crei un'immagine e poi utilizzi Voucher per verificarne la presenza di vulnerabilità.

Caso di errore

In questa sezione la pipeline di build di esempio non riesce a creare un'attestazione. L'immagine creata in base a Debian 9 contiene almeno una vulnerabilità di gravità HIGH. L'opzione fail-on nel server dei coupon config.toml è impostata per non riuscire sulle vulnerabilità con gravità HIGH. In questo caso, Il server coupon non crea un'attestazione di Autorizzazione binaria.

  1. Esegui la pipeline di build:

    gcloud builds submit \
      --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT \
      --config=tutorials/cloudrun/examples/cloudbuild-bad.yaml tutorials/cloudrun/examples
    
  2. Cerca nel log dell'ultima compilazione i risultati relativi al coupon snakeoil:

    Console

    1. Prendi nota dell'ID build dell'ultima build.

    2. Nella console Google Cloud, vai alla pagina Cronologia build.

      Vai a Cronologia build

    3. In Crea, fai clic sull'elemento che contiene i primi caratteri. dell'ID build.

    4. Fai clic su Visualizza Raw.

    5. Cerca snakeoil utilizzando il browser.

      L'output visualizzato sarà simile al seguente:

      "name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
      

    gcloud

    1. Salva l'ID build dalla build:

      export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
      
    2. Cerca nel log di build inserendo il comando seguente:

       gcloud builds log ${BUILD_ID} | grep "snakeoil"
      

      L'output è simile al seguente:

      "name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
      

Caso di successo

In questa sezione, la pipeline di build di esempio riesce a creare un'attestazione. Tutte le vulnerabilità identificate sono classificate come inferiori a fail-on in modo che il controllo superi il controllo e la pipeline crea l'attestazione.

  1. Esegui la pipeline:

    gcloud builds submit\
      --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT\
      --config=tutorials/cloudrun/examples/cloudbuild-good.yaml tutorials/cloudrun/examples
    
  2. Cerca i risultati del coupon snakeoil nel log dell'ultima build:

    Console

    1. Prendi nota dell'ID build dell'ultima build.

    2. Nella console Google Cloud, vai alla pagina Cronologia build.

      Vai a Cronologia build

    3. In Crea, fai clic sull'elemento che contiene i primi caratteri. dell'ID build.

    4. Fai clic su Visualizza Raw.

    5. Cerca snakeoil utilizzando il browser.

      L'output visualizzato sarà simile al seguente:

      "name":"snakeoil","success":true,"attested":true
      

    gcloud

    1. Salva l'ID build dall'ultima build:

      export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
      
    2. Cerca nel log di build inserendo il comando seguente:

       gcloud builds log ${BUILD_ID} | grep "snakeoil"
      

      L'output è il seguente:

      "name":"snakeoil","success":true,"attested":true
      

Esegui la pulizia

Per pulire le risorse utilizzate in questo documento, puoi eliminare il progetto come che segue:

gcloud projects delete ${PROJECT_ID}

Crea un attestatore

Per creare un criterio che richiede le attestazioni che crei utilizzando descritto in questa guida, devi prima creare un attestatore.

Per creare un attestatore:

  1. Recupera il materiale della chiave pubblica dalla chiave Cloud KMS che hai create in precedenza in questa guida:

    gcloud kms keys versions get-public-key 1 \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location global \
    --output-file OUTPUT_PATH
    
    • KEY_NAME: nome della chiave
    • KEY_RING: nome del keyring
    • OUTPUT_PATH: un percorso file, ad esempio my-key.pem
  2. Crea un attestatore utilizzando il materiale della chiave pubblica nel file e nella nota creato in precedenza in questa guida. Puoi creare un attestatore tramite la console Google Cloud o gcloud CLI.

  3. Crea un criterio che richieda attestazioni e fornisca l'attestatore creati in questa sezione. Puoi creare un criterio tramite la console Google Cloud oppure gcloud CLI

Crea un'attestazione

Per creare un'attestazione utilizzando l'attestatore, vedi Creare un'attestazione utilizzando Cloud KMS.

Passaggi successivi