Eseguire il push e il pull degli artefatti della supply chain usando Registro di sistema di Azure (anteprima)
Usare un Registro Azure Container per archiviare e gestire un grafico di artefatti della supply chain, incluse firme, fatture software di materiali (SBOM), risultati dell'analisi della sicurezza e altri tipi.
Per illustrare questa funzionalità, questo articolo illustra come usare il Registro OCI come interfaccia della riga di comando di Archiviazione (ORAS) per discover
push
e pull
un grafico degli artefatti della supply chain in un registro contenitori di Azure.
L'archiviazione di singoli artefatti OCI (radice) è descritta in Elementi OCI push e pull.
Per archiviare un grafico di artefatti, viene definito un riferimento a un subject
artefatto usando il manifesto dell'artefatto OCI, che fa parte della specifica di distribuzione OCI 1.1 non rilasciata.
Il supporto del manifesto degli artefatti OCI 1.1 è una funzionalità di anteprima di Registro Azure Container e soggetta a limitazioni.
Prerequisiti
- Registro Azure Container: creare un registro di contenitori nella sottoscrizione di Azure. Ad esempio usare il portale di Azure oppure l'interfaccia della riga di comando di Azure.
Vedere Limitazioni di anteprima per il supporto cloud di Azure. - Interfaccia della riga di comando di Azure: è necessaria la versione o una versione
2.29.1
successiva. Vedere Installare l'interfaccia della riga di comando di Azure per l'installazione e/o l'aggiornamento. - Interfaccia della riga di comando ORAS: è necessaria la versione
v0.16.0
. Vedere: Installazione di ORAS. - Docker (facoltativo): per completare la procedura dettagliata, viene fatto riferimento a un'immagine del contenitore.
È possibile usare Docker installato localmente per compilare ed eseguire il push di un'immagine del contenitore oppure usare
acr build
per la compilazione remota in Azure.
Anche se Docker Desktop non è obbligatorio, l'interfaccia dellaoras
riga di comando usa l'archivio credenziali desktop Docker per l'archiviazione delle credenziali. Se Docker Desktop è installato, deve essere in esecuzione peroras login
.
Limiti dell'anteprima
Il supporto del manifesto dell'artefatto OCI (specifica OCI 1.1) è disponibile in tutte le aree pubbliche di Azure. Microsoft Azure gestito da 21Vianet e cloud per enti pubblici non sono ancora supportati.
Configurare un registro
Configurare le variabili di ambiente per copiare/incollare facilmente i comandi nella shell. I comandi possono essere eseguiti in locale o in Azure Cloud Shell.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Eseguire l'autenticazione con l'identità singola di Microsoft Entra usando un token di Active Directory. Usare sempre "000..." per perché USER_NAME
il token viene analizzato tramite la PASSWORD
variabile .
# Login to Azure
az login
# Login to ACR, using a token based on your Azure identity
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
Nota
Registro Azure Container e ORAS supportano più opzioni di autenticazione per gli utenti e l'automazione del sistema. Questo articolo usa una singola identità usando un token di Azure. Per altre opzioni di autenticazione, vedere Eseguire l'autenticazione con un registro Azure Container
Accedere con ORAS
Specificare le credenziali per oras login
.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Eseguire il push di un'immagine del contenitore
In questo esempio viene associato un grafico di artefatti a un'immagine del contenitore.
Compilare ed eseguire il push di un'immagine del contenitore oppure ignorare questo passaggio se $IMAGE
fa riferimento a un'immagine esistente nel Registro di sistema.
az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main
Creare una firma di esempio per l'immagine del contenitore
echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json
Allegare una firma al Registro di sistema, come riferimento all'immagine del contenitore
Il oras attach
comando crea un riferimento tra il file (./signature.json
) e .$IMAGE
--artifact-type
fornisce elementi diversi, simili alle estensioni di file che consentono tipi di file diversi. È possibile allegare uno o più file specificando [file]:[mediaType]
.
oras attach $IMAGE \
--artifact-type signature/example \
./signature.json:application/json
Per altre informazioni su oras attach, vedere la documentazione di ORAS.
Collegare un artefatto multi-file come riferimento
Quando viene eseguito il push degli artefatti OCI in un registro con ORAS, ogni riferimento al file viene inserito come BLOB. Per eseguire il push di BLOB separati, fare riferimento ai file singolarmente o alla raccolta di file facendo riferimento a una directory.
Per altre informazioni su come eseguire il push di una raccolta di file, vedere Push di artefatti con più file.
Creare una documentazione relativa a un artefatto:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Allegare l'artefatto multi-file come riferimento a $IMAGE
:
Linux, WSL2 o macOS
oras attach $IMAGE \
--artifact-type readme/example \
./readme.md:application/markdown \
./details
Windows
.\oras.exe attach $IMAGE ^
--artifact-type readme/example ^
.\readme.md:application/markdown ^
.\details
Individuazione dei riferimenti agli artefatti
La specifica OCI v1.1 definisce un'API referrers per individuare i riferimenti a un subject
artefatto. Il oras discover
comando può visualizzare l'elenco di riferimenti all'immagine del contenitore.
Usando oras discover
, visualizzare il grafico degli artefatti ora archiviati nel Registro di sistema.
oras discover -o tree $IMAGE
L'output mostra l'inizio di un grafico di artefatti, in cui la firma e la documentazione vengono visualizzate come elementi figlio dell'immagine del contenitore.
myregistry.azurecr.io/net-monitor:v1
├── signature/example
│ └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
└── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...
Creazione di grafici profondi di artefatti
La specifica OCI v1.1 consente grafici profondi, abilitando la fattura software firmata dei materiali (SBOM) e altri tipi di artefatti.
Creare un esempio di SBOM
echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json
Collegare un esempio SBOM all'immagine nel Registro di sistema
Linux, WSL2 o macOS
oras attach $IMAGE \
--artifact-type sbom/example \
./sbom.json:application/json
Windows
.\oras.exe attach $IMAGE ^
--artifact-type sbom/example ^
./sbom.json:application/json
Firmare SBOM
Gli artefatti di cui viene eseguito il push come riferimenti, in genere non hanno tag perché sono considerati parte dell'artefatto subject
. Per eseguire il push di una firma in un artefatto figlio di un altro artefatto, usare con --artifact-type
il oras discover
filtro per trovare il digest.
SBOM_DIGEST=$(oras discover -o json \
--artifact-type sbom/example \
$IMAGE | jq -r ".manifests[0].digest")
Creare una firma di un S SBOM
echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json
Allegare la firma SBOM
oras attach $IMAGE@$SBOM_DIGEST \
--artifact-type 'signature/example' \
./sbom-signature.json:application/json
Visualizzare il grafico
oras discover -o tree $IMAGE
Genera l'output seguente:
myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│ └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│ └── signature/example
│ └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│ └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
└── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5
Alzare di livello il grafico
Un flusso di lavoro DevOps tipico promuoverà gli artefatti dallo sviluppo tramite la gestione temporanea, ai flussi di lavoro della supply chain sicura dell'ambiente di produzione promuovere il contenuto pubblico in ambienti protetti privatamente. In entrambi i casi è consigliabile alzare di livello le firme, gli SBOM, analizzare i risultati e altri artefatti correlati con l'artefatto radice per avere un grafico completo delle dipendenze.
Usando il oras copy
comando è possibile alzare di livello un grafico filtrato di elementi tra registri.
Copiare l'immagine net-monitor:v1
e gli artefatti correlati in sample-staging/net-monitor:v1
:
TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG
Output di oras copy
:
Copying 6bdea3cdc730 sbom-signature.json
Copying 78e159e81c6b sbom.json
Copied 6bdea3cdc730 sbom-signature.json
Copied 78e159e81c6b sbom.json
Copying 7cf1385c7f4d signature.json
Copied 7cf1385c7f4d signature.json
Copying 3e797ecd0697 details
Copying 2fdeac43552b readme.md
Copied 3e797ecd0697 details
Copied 2fdeac43552b readme.md
Copied demo42.myregistry.io/net-monitor:v1 => myregistry.azurecr.io/sample-staging/net-monitor:v1
Digest: sha256:ff858b2ea3cdf4373cba65d2ca6bcede4da1d620503a547cab5916614080c763
Individuare il grafico dell'artefatto alzato di livello
oras discover -o tree $TARGET_REPO:$TAG
Output di oras discover
:
myregistry.azurecr.io/sample-staging/net-monitor:v1
├── sbom/example
│ └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│ └── signature/example
│ └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│ └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
└── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5
Eseguire il pull di un artefatto a cui si fa riferimento
Per eseguire il pull di un artefatto di riferimento specifico, il digest di riferimento viene individuato con il oras discover
comando :
DOC_DIGEST=$(oras discover -o json \
--artifact-type 'readme/example' \
$TARGET_REPO:$TAG | jq -r ".manifests[0].digest")
Creare una directory pulita per il download
mkdir ./download
Eseguire il pull dei documenti nella directory di download
oras pull -o ./download $TARGET_REPO@$DOC_DIGEST
Visualizzare la documentazione
tree ./download
Output di tree
:
./download
├── details
│ ├── readme-details.md
│ └── readme-more-details.md
└── readme.md
Visualizzare il repository e l'elenco di tag
Il manifesto dell'artefatto OCI consente il push, il pull e la copia dei grafici degli artefatti senza dover assegnare tag. I manifesti degli artefatti consentono a un elenco di tag di concentrarsi sugli elementi che gli utenti pensano, invece delle firme e degli SBOM associati alle immagini del contenitore, ai grafici Helm e ad altri artefatti.
Visualizzare un elenco di tag
oras repo tags $REGISTRY/$REPO
Visualizzare un elenco di manifesti
Un repository può avere un elenco di manifesti contrassegnati e senza tag. Usando l'interfaccia della az acr manifest
riga di comando, visualizzare l'elenco completo dei manifesti:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME \
--output jsonc
Si noti che i manifesti dell'immagine del contenitore hanno "tags"
, mentre i tipi di riferimento ("mediaType": "application/vnd.oci.artifact.manifest.v1+json"
) non lo sono.
Nell'output la firma non è contrassegnata, ma viene rilevata come oci.artifact.manifest
riferimento all'immagine del contenitore:
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"writeEnabled": true
},
"createdTime": "2023-01-10T17:58:28.4403142Z",
"digest": "sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5",
"imageSize": 80,
"lastUpdateTime": "2023-01-10T17:58:28.4403142Z",
"mediaType": "application/vnd.oci.artifact.manifest.v1+json"
}
Eliminare tutti gli artefatti nel grafico
Il supporto per la specifica OCI v1.1 consente di eliminare il grafico degli artefatti associati all'artefatto radice. Usare il oras delete
comando per eliminare il grafico degli artefatti (firma, SBOM e firma di SBOM).
oras manifest delete -f $REGISTRY/$REPO:$TAG
oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG
Visualizzare i manifesti rimanenti
Eliminando l'artefatto radice, vengono eliminati anche tutti gli artefatti correlati lasciando un ambiente pulito:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME -o jsonc
Output:
2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.
Riepilogo
In questo articolo viene creato un grafico degli artefatti della supply chain, individuati, alzati di livello e trascinati fornendo la gestione del ciclo di vita degli artefatti creati e dipendenti.
Passaggi successivi
- Altre informazioni sull'interfaccia della riga di comando di ORAS
- Altre informazioni sul manifesto dell'artefatto OCI per informazioni su come eseguire il push, l'individuazione, il pull e la copia di un grafico degli artefatti della supply chain