Sdílet prostřednictvím


Správa artefaktů OCI a artefaktů dodavatelského řetězce pomocí ORAS

Azure Container Registry (ACR) pomáhá spravovat artefakty open container initiative (OCI) i artefakty dodavatelského řetězce. V tomto článku se dozvíte, jak používat ACR ke správě artefaktů OCI a artefaktů dodavatelského řetězce efektivně. Naučte se ukládat, spravovat a načítat artefakty OCI i graf artefaktů dodavatelského řetězce, včetně podpisů, faktur softwaru (SBOM), výsledků kontroly zabezpečení a dalších typů.

Tento článek je rozdělený do dvou hlavních částí:

Požadavky

  • Registr kontejnerů Azure – Vytvořte registr kontejnerů ve svém předplatném Azure. Použijte například Azure Portal nebo Azure CLI.
  • Azure CLI – Vyžaduje se verze 2.29.1 nebo novější. Viz Instalace Azure CLI pro instalaci nebo upgrade.
  • Rozhraní příkazového řádku ORAS – Vyžaduje se verze v1.1.0 nebo novější verze. Viz: Instalace ORAS.
  • Docker (volitelné) – K dokončení návodu se odkazuje na image kontejneru. Docker nainstalovaný místně můžete použít k sestavení a nasdílení image kontejneru nebo k acr build vzdálenému sestavení v Azure.
    I když se Desktop Dockeru nevyžaduje, oras rozhraní příkazového řádku využívá úložiště přihlašovacích údajů desktopového Dockeru k ukládání přihlašovacích údajů. Pokud je nainstalovaný Docker Desktop, musí být spuštěn pro oras login.

Konfigurace registru

Pokud chcete nakonfigurovat prostředí pro snadné provádění příkazů, postupujte takto:

  1. Nastavte proměnnou ACR_NAME na název registru.
  2. Nastavte proměnnou REGISTRY na $ACR_NAME.azurecr.iohodnotu .
  3. Nastavte proměnnou REPO na název úložiště.
  4. Nastavte proměnnou TAG na požadovanou značku.
  5. Nastavte proměnnou IMAGE na $REGISTRY/${REPO}:$TAGhodnotu .

Nastavení proměnných prostředí

Nakonfigurujte název registru, přihlašovací údaje, název úložiště a značku pro nasdílení a vyžádání artefaktů. Následující příklad používá net-monitor název a v1 značku úložiště. Nahraďte názvem a značkou vlastního úložiště.

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

Přihlášení k registru

Ověřte se pomocí služby ACR, abyste mohli načíst a odeslat image kontejneru.

az login  
az acr login -n $REGISTRY  

Pokud Docker není k dispozici, můžete k ověřování využít token AD. Ověřování pomocíindividuální identity Microsoft Entra pomocí tokenu AD. Vždy použijte hodnotu 000 pro token, USER_NAME protože se token parsuje prostřednictvím PASSWORD proměnné.

# Login to Azure
az login

Přihlášení pomocí ORAS

Zadejte přihlašovací údaje pro oras login.

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

Toto nastavení umožňuje bezproblémově nasdílení a načítání artefaktů do a ze služby Azure Container Registry. Upravte proměnné podle potřeby pro vaši konkrétní konfiguraci.

Nabízení a vyžádání artefaktů OCI pomocí ORAS

Registr kontejnerů Azure můžete použít k ukládání a správě artefaktů Open Container Initiative (OCI) imagí kontejnerů Dockeru a OCI.

Abychom si ukázali tuto funkci, v této části se dozvíte, jak pomocí rozhraní příkazového řádku OCI Jako úložiště (ORAS) nasdílit a vyžádat artefakty OCI do a z registru kontejneru Azure. Různé artefakty OCI v registru kontejneru Azure můžete spravovat pomocí různých nástrojů příkazového řádku odpovídajících jednotlivým artefaktům.

Poznámka:

ACR a ORAS podporují více možností ověřování pro uživatele a automatizaci systému. Tento článek používá jednotlivé identity pomocí tokenu Azure. Další možnosti ověřování najdete v tématu Ověřování pomocí registru kontejneru Azure.

Nasdílení artefaktu

Jediný artefakt souboru, který nemá nadřazený subject objekt, může být cokoli z image kontejneru, chartu Helmu, souboru readme pro úložiště. Referenční artefakty můžou být cokoli od podpisu, softwarového vyúčtování materiálů, sestav skenování nebo jiných vyvíjejících se typů. Referenční artefakty popsané v tématu Připojení, vložení a přijetí změn artefaktů dodavatelského řetězce jsou artefakty , které odkazují na jiný artefakt.

Nasdílení artefaktu s jedním souborem

V tomto příkladu vytvořte obsah, který představuje soubor Markdown:

echo 'Readme Content' > readme.md

Následující krok nasdílí readme.md soubor do <myregistry>.azurecr.io/samples/artifact:readmesouboru .

  • Registr je identifikován plně kvalifikovaným názvem <myregistry>.azurecr.io registru (malými písmeny), za kterým následuje obor názvů a úložiště: /samples/artifact.
  • Artefakt je označený :readme, aby ho jednoznačně identifikoval z jiných artefaktů uvedených v úložišti (:latest, :v1, :v1.0.1).
  • Nastavení --artifact-type readme/example rozlišuje artefakt od image kontejneru, která používá application/vnd.oci.image.config.v1+json.
  • Identifikuje ./readme.md soubor nahraný a :application/markdown představuje IANA mediaType souboru.
    Další informace najdete v tématu Pokyny pro autory artefaktů OCI.

oras push Pomocí příkazu nasdílejte soubor do registru.

Linux, WSL2 nebo macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example \
    ./readme.md:application/markdown

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown

Výstup úspěšného nasdílení změn je podobný následujícímu výstupu:

Uploading 2fdeac43552b readme.md
Uploaded  2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1

aec5d9dcf7748dd702682d53

Nasdílení artefaktu s více soubory

Když se artefakty OCI nasdílí do registru s ORAS, každý odkaz na soubor se odešle jako objekt blob. Pokud chcete odeslat samostatné objekty blob, odkazujte na soubory jednotlivě nebo na kolekci souborů odkazováním na adresář.
Další informace o tom, jak odeslat kolekci souborů, naleznete v tématu Odesílání artefaktů s více soubory.

Vytvořte pro úložiště určitou dokumentaci:

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

Nasdílení artefaktu s více soubory:

Linux, WSL2 nebo macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example\
    ./readme.md:application/markdown\
    ./details

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown ^
    .\details

Zjištění manifestu

Pokud chcete zobrazit manifest vytvořený jako výsledek oras push, použijte oras manifest fetch:

oras manifest fetch --pretty $REGISTRY/samples/artifact:readme

Výstup je podobný tomuto:

{
  "mediaType": "application/vnd.oci.artifact.manifest.v1+json",
  "artifactType": "readme/example",
  "blobs": [
    {
      "mediaType": "application/markdown",
      "digest": "sha256:2fdeac43552b71eb9db534137714c7bad86b53a93c56ca96d4850c9b41b777fc",
      "size": 15,
      "annotations": {
        "org.opencontainers.image.title": "readme.md"
      }
    },
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "digest": "sha256:0d6c7434a34f6854f971487621426332e6c0fda08040b9e6cc8a93f354cee0b1",
      "size": 189,
      "annotations": {
        "io.deis.oras.content.digest": "sha256:11eceb2e7ac3183ec9109003a7389468ec73ad5ceaec0c4edad0c1b664c5593a",
        "io.deis.oras.content.unpack": "true",
        "org.opencontainers.image.title": "details"
      }
    }
  ],
  "annotations": {
    "org.opencontainers.artifact.created": "2023-01-10T14:44:06Z"
  }
}

Stažení artefaktu

Vytvořte čistý adresář pro stahování.

mkdir ./download

Spuštěním oras pull příkazu stáhněte artefakt z registru.

oras pull -o ./download $REGISTRY/samples/artifact:readme

Zobrazení natažených souborů

tree ./download

Odebrání artefaktu (volitelné)

Pokud chcete odebrat artefakt z registru, použijte oras manifest delete příkaz.

 oras manifest delete $REGISTRY/samples/artifact:readme

Připojení, nabízení a vyžádání artefaktů dodavatelského řetězce pomocí ORAS

Abychom si ukázali tuto funkci, tento článek ukazuje, jak používat rozhraní příkazového řádku OCI Registry jako úložiště (ORAS) k pushdiscovera pull graf artefaktů dodavatelského řetězce do registru kontejnerů Azure. Ukládání jednotlivých artefaktů OCI (předmětu) se vztahuje na artefakty OCI push a pull OCI.

Pokud chcete uložit graf artefaktů, definuje se odkaz na subject artefakt pomocí manifestu image OCI, který je součástí předběžné specifikace distribuce OCI 1.1.

Nasdílení image kontejneru

Přidružení grafu artefaktů k imagi kontejneru pomocí Azure CLI:

Pokud odkazujete na existující image v registru, můžete sestavit a odeslat image kontejneru nebo tento krok $IMAGE přeskočit.

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

Připojení podpisu

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

Připojení podpisu k registru jako odkazu na image kontejneru

Příkaz oras attach vytvoří odkaz mezi souborem (./signature.json) na $IMAGE. Poskytuje --artifact-type pro odlišování artefaktů, podobně jako u přípon souborů, které umožňují různé typy souborů. Jeden nebo více souborů lze připojit zadáním [file]:[mediaType].

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

Další informace o připojení oras najdete v dokumentaci k ORAS.

Připojení artefaktu s více soubory jako odkazu

Když se artefakty OCI nasdílí do registru s ORAS, každý odkaz na soubor se odešle jako objekt blob. Pokud chcete odeslat samostatné objekty blob, odkazujte na soubory jednotlivě nebo na kolekci souborů odkazováním na adresář.
Další informace o tom, jak odeslat kolekci souborů, naleznete v tématu Odesílání artefaktů s více soubory.

Zjišťování odkazů na artefakty

Specifikace OCI v1.1 definuje referenční rozhraní API pro zjišťování odkazů na subject artefakt. Příkaz oras discover může zobrazit seznam odkazů na image kontejneru.

Zobrazení oras discovergrafu artefaktů, které jsou nyní uloženy v registru, pomocí .

oras discover -o tree $IMAGE

Výstup ukazuje začátek grafu artefaktů, kde se podpis a dokumenty zobrazují jako podřízené položky image kontejneru.

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

Vytváření grafů artefaktů

Specifikace OCI v1.1 umožňuje hloubkové grafy, povolení podepsaných softwarových faktur materiálů (SBOM) a dalších typů artefaktů.

Tady je postup vytvoření a připojení SBOM k registru:

Vytvoření ukázkového SBOM

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

Připojení ukázkového SBOM k imagi v registru

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

Podepsání SBOM

Důležité

Microsoft doporučuje použít zabezpečený kryptografický podpisový nástroj, jako je notace , podepsat obrázek a vygenerovat podpis pro podepisování SBOM.

Artefakty, které se nasdílí jako odkazy, obvykle nemají značky, protože jsou považovány za součást artefaktu subject . Pokud chcete podpis odeslat do artefaktu, který je podřízeným jiným artefaktem, použijte oras discover--artifact-type k vyhledání hodnot hash funkci filtrování. Tento příklad používá jednoduchý podpis JSON pro demonstrační účely.

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

Vytvořte podpis SBOM.

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

Připojení podpisu SBOM

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

Zobrazení grafu

oras discover -o tree $IMAGE

Generuje následující výstup:

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

Zvýšení úrovně grafu artefaktů

Typický pracovní postup DevOps podporuje artefakty z vývoje prostřednictvím přípravy až po produkční prostředí. Pracovní postupy zabezpečeného dodavatelského řetězce propagují veřejný obsah na soukromě zabezpečená prostředí. V obou případech chcete zvýšit úroveň podpisů, SBOM, skenovat výsledky a další související artefakty s artefaktem předmětu tak, aby měly úplný graf závislostí.

oras copy Pomocí příkazu můžete zvýšit úroveň filtrovaného grafu artefaktů napříč registry.

net-monitor:v1 Zkopírujte obrázek a související artefakty dosample-staging/net-monitor:v1:

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

Výstup :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

Zjištění grafu upřednostněných artefaktů

oras discover -o tree $TARGET_REPO:$TAG

Výstup :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

Načítání odkazovaných artefaktů

Pokud chcete vyžádat konkrétní odkazovaný artefakt, zjistí se hodnota hash odkazu pomocí oras discover příkazu:

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

Vytvoření čistého adresáře pro stahování

mkdir ./download

Stažení dokumentů do adresáře pro stahování

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

Zobrazení dokumentace

tree ./download

Výstup :tree

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

Zobrazení úložiště a výpisu značek

ORAS umožňuje odesílat, zjišťovat, natahovat a kopírovat grafy artefaktů, aniž by bylo nutné přiřazovat značky. Umožňuje také výpis značek zaměřit se na artefakty, o které si uživatelé myslí, a ne na podpisy a SBOM, které jsou přidružené k imagím kontejnerů, chartům helmu a dalším artefaktům.

Zobrazení seznamu značek

oras repo tags $REGISTRY/$REPO

Odstranění všech artefaktů v grafu

Podpora specifikace OCI v1.1 umožňuje odstranit graf artefaktů přidružených k artefaktu předmětu. oras manifest delete Pomocí příkazu odstraňte graf artefaktů (podpis, SBOM a podpis SBOM).

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

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

Seznam manifestů můžete zobrazit, abyste potvrdili odstranění artefaktu předmětu a všechny související artefakty opustily čisté prostředí.

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

Výstup:

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

Shrnutí

V tomto článku jste zjistili, jak pomocí služby Azure Container Registry ukládat, spravovat a načítat artefakty OCI i artefakty dodavatelského řetězce. Použili jste rozhraní příkazového řádku ORAS k nasdílení a vyžádání artefaktů do služby Azure Container Registry nebo z něj. Také jste zjistili manifest nasdílených artefaktů a zobrazili jste graf artefaktů připojených k imagi kontejneru.

Další kroky