Artefacten van supply chain pushen en ophalen met behulp van Azure Registry (preview)

Gebruik een Azure-containerregister voor het opslaan en beheren van een grafiek met toeleveringsketenartefacten, waaronder handtekeningen, softwarefactuur van materialen (SBOM), resultaten van beveiligingsscans en andere typen.

Graph of artifacts, including a container image, signature and signed software bill of materials

Om deze mogelijkheid te demonstreren, laat dit artikel zien hoe u de OCI Registry as Storage (ORAS) CLI gebruikt voor pushen discoverpull een grafiek van toeleveringsketenartefacten naar een Azure-containerregister. Het opslaan van afzonderlijke (hoofd) OCI-artefacten wordt behandeld in Push- en pull-OCI-artefacten.

Voor het opslaan van een grafiek met artefacten wordt een verwijzing naar een subject artefact gedefinieerd met behulp van het OCI-artefactmanifest, dat deel uitmaakt van de distributiespecificatie van de voorlopige versie van OCI 1.1. Ondersteuning voor OCI 1.1 Artifact Manifest is een ACR Preview-functie en is onderhevig aan beperkingen.

Vereisten

  • Azure-containerregister: maak een containerregister in uw Azure-abonnement. Gebruik bijvoorbeeld De Azure-portal of de Azure CLI.
    Bekijk preview-beperkingen voor Azure-cloudondersteuning.
  • Azure CLI : versie 2.29.1 of hoger is vereist. Zie Azure CLI installeren voor installatie en/of upgrade.
  • ORAS CLI : versie v0.16.0 is vereist. Zie: ORAS-installatie.
  • Docker (optioneel): er wordt verwezen naar een containerinstallatiekopieën om het overzicht te voltooien. U kunt Docker gebruiken die lokaal is geïnstalleerd om een containerinstallatiekopieën te bouwen en te pushen of acr build om extern te bouwen in Azure.
    Docker Desktop is niet vereist, maar de oras cli maakt gebruik van het docker-bureaubladreferentiearchief voor het opslaan van referenties. Als Docker Desktop is geïnstalleerd, moet deze worden uitgevoerd voor oras login.

Preview-beperkingen

Ondersteuning voor OCI Artifact Manifest (OCI 1.1-specificatie) is beschikbaar in alle openbare Azure-regio's. Microsoft Azure beheerd door 21Vianet- en overheidsclouds wordt nog niet ondersteund.

Een register configureren

Configureer omgevingsvariabelen om opdrachten eenvoudig te kopiëren/plakken in uw shell. De opdrachten kunnen lokaal of in De Azure Cloud Shell worden uitgevoerd.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG

Verifieer met uw afzonderlijke Microsoft Entra-identiteit met behulp van een AD-token. Gebruik altijd '000...' als USER_NAME het token wordt geparseerd via de PASSWORD variabele.

# 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)

Notitie

ACR en ORAS ondersteunen meerdere verificatieopties voor gebruikers en systeemautomatisering. In dit artikel wordt gebruikgemaakt van een afzonderlijke identiteit, met behulp van een Azure-token. Zie Verifiëren met een Azure-containerregister voor meer verificatieopties

Aanmelden met ORAS

Geef de referenties op voor oras login.

oras login $REGISTRY \
  --username $USER_NAME \
  --password $PASSWORD

Een containerinstallatiekopieën pushen

In dit voorbeeld wordt een grafiek met artefacten gekoppeld aan een containerinstallatiekopieën.

Bouw en push een containerinstallatiekopieën of sla deze stap over als $IMAGE deze verwijst naar een bestaande installatiekopieën in het register.

az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main

Een voorbeeldhandtekening maken voor de containerinstallatiekopieën

echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json

Voeg een handtekening toe aan het register als verwijzing naar de containerinstallatiekopieën

Met de oras attach opdracht maakt u een verwijzing tussen het bestand (./signature.json) naar de $IMAGE. De --artifact-type functie biedt voor het onderscheiden van artefacten, vergelijkbaar met bestandsextensies die verschillende bestandstypen inschakelen. Een of meer bestanden kunnen worden bijgevoegd door op te [file]:[mediaType]geven.

oras attach $IMAGE \
    --artifact-type signature/example \
    ./signature.json:application/json

Zie de ORAS-documentatie voor meer informatie over oras-bijlage.

Een artefact met meerdere bestanden toevoegen als verwijzing

Wanneer OCI-artefacten worden gepusht naar een register met ORAS, wordt elke bestandsreferentie gepusht als een blob. Als u afzonderlijke blobs wilt pushen, verwijst u naar de bestanden afzonderlijk of verzameling bestanden door te verwijzen naar een map.
Zie Artefacten pushen met meerdere bestanden voor meer informatie over het pushen van een verzameling bestanden.

Maak een aantal documentatie over een artefact:

echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md

Voeg het artefact met meerdere bestanden toe als verwijzing naar $IMAGE:

Linux, WSL2 of 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

Artefactverwijzingen detecteren

De OCI v1.1-specificatie definieert een verwijzings-API voor het detecteren van verwijzingen naar een subject artefact. Met oras discover de opdracht kunt u de lijst met verwijzingen naar de containerinstallatiekopieën weergeven.

Bekijk met behulp oras discovervan de grafiek van artefacten die nu zijn opgeslagen in het register.

oras discover -o tree $IMAGE

In de uitvoer ziet u het begin van een grafiek met artefacten, waarbij de handtekening en documenten worden weergegeven als onderliggende elementen van de containerinstallatiekopieën.

myregistry.azurecr.io/net-monitor:v1
├── signature/example
│   └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
    └── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...

Een diepe grafiek van artefacten maken

De OCI v1.1-specificatie maakt diepe grafieken mogelijk, waardoor ondertekende softwarefactuur van materialen (SBOM) en andere artefacttypen mogelijk is.

Een voorbeeld-SBOM maken

echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json

Een voorbeeld-SBOM koppelen aan de installatiekopieën in het register

Linux, WSL2 of 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

De SBOM ondertekenen

Artefacten die als verwijzingen worden gepusht, hebben doorgaans geen tags omdat ze worden beschouwd als onderdeel van het subject artefact. Als u een handtekening wilt pushen naar een artefact dat een onderliggend element van een ander artefact is, gebruikt u de oras discover functie met --artifact-type filteren om de samenvatting te vinden.

SBOM_DIGEST=$(oras discover -o json \
                --artifact-type sbom/example \
                $IMAGE | jq -r ".manifests[0].digest")

Een handtekening van een SBOM maken

echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json

De SBOM-handtekening bijvoegen

oras attach $IMAGE@$SBOM_DIGEST \
  --artifact-type 'signature/example' \
  ./sbom-signature.json:application/json

De grafiek weergeven

oras discover -o tree $IMAGE

Hiermee wordt de volgende uitvoer gegenereerd:

myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│   └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│       └── signature/example
│           └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│   └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
    └── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5

De grafiek promoveren

Een typische DevOps-werkstroom promoot artefacten van dev via fasering naar de productieomgeving Veilige supply chain-werkstromen bevorderen openbare inhoud naar privé beveiligde omgevingen. In beide gevallen wilt u de handtekeningen, SBOM's, scanresultaten en ander gerelateerd artefact met het hoofdartefact promoveren om een volledige grafiek met afhankelijkheden te hebben.

Met behulp van de oras copy opdracht kunt u een gefilterde grafiek van artefacten in registers promoveren.

Kopieer de net-monitor:v1 installatiekopie en de gerelateerde artefacten naar sample-staging/net-monitor:v1:

TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG

De uitvoer van 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

De grafiek met gepromoveerde artefacten ontdekken

oras discover -o tree $TARGET_REPO:$TAG

Uitvoer van 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

Een artefact waarnaar wordt verwezen ophalen

Als u een specifiek artefact wilt ophalen waarnaar wordt verwezen, wordt de samenvatting van de verwijzing gedetecteerd met de oras discover opdracht:

DOC_DIGEST=$(oras discover -o json \
              --artifact-type 'readme/example' \
              $TARGET_REPO:$TAG | jq -r ".manifests[0].digest")

Een schone map maken om te downloaden

mkdir ./download

Haal de documenten naar de downloadmap

oras pull -o ./download $TARGET_REPO@$DOC_DIGEST

De documenten weergeven

tree ./download

De uitvoer van tree:

./download
├── details
│   ├── readme-details.md
│   └── readme-more-details.md
└── readme.md

De opslagplaats en tagvermelding weergeven

Met het OCI-artefactmanifest kunnen artefactgrafieken worden gepusht, gedetecteerd, opgehaald en gekopieerd zonder tags toe te wijzen. Met artefactmanifesten kan een tagvermelding zich richten op de artefacten die gebruikers bedenken, in plaats van de handtekeningen en SBOM's die zijn gekoppeld aan de containerinstallatiekopieën, Helm-grafieken en andere artefacten.

Een lijst met tags weergeven

oras repo tags $REGISTRY/$REPO

Een lijst met manifesten weergeven

Een opslagplaats kan een lijst met manifesten bevatten die zowel zijn getagd als niet-gemarkeerd. Bekijk met behulp van de az acr manifest CLI de volledige lijst met manifesten:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME \
  --output jsonc

Let op de manifesten voor containerinstallatiekopieën, "tags"terwijl de verwijzingstypen ("mediaType": "application/vnd.oci.artifact.manifest.v1+json") dat niet doen.

In de uitvoer wordt de handtekening niet gemarkeerd, maar bijgehouden als verwijzing oci.artifact.manifest naar de containerinstallatiekopieën:

{
  "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"
}

Alle artefacten in de grafiek verwijderen

Ondersteuning voor de OCI v1.1-specificatie maakt het mogelijk om de grafiek te verwijderen van artefacten die zijn gekoppeld aan het hoofdartefact. Gebruik de oras delete opdracht om de grafiek van artefacten (handtekening, SBOM en de handtekening van de SBOM) te verwijderen.

oras manifest delete -f $REGISTRY/$REPO:$TAG

oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG

De resterende manifesten weergeven

Door het hoofdartefact te verwijderen, worden alle gerelateerde artefacten ook verwijderd, waardoor een schone omgeving wordt achtergelaten:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME -o jsonc

Uitvoer:

2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.

Samenvatting

In dit artikel wordt een grafiek gemaakt van toeleveringsketenartefacten, gedetecteerd, gepromoveerd en opgehaald met levenscyclusbeheer van de artefacten waarvan u bouwt en afhankelijk bent.

Volgende stappen

  • Meer informatie over de ORAS CLI
  • Meer informatie over het OCI-artefactmanifest voor het pushen, detecteren, ophalen, kopiëren van een grafiek van toeleveringsketenartefacten