Mendorong dan menarik artefak rantai pasokan menggunakan Azure Registry (Pratinjau)

Gunakan registri kontainer Azure untuk menyimpan dan mengelola grafik artefak rantai pasokan, termasuk tanda tangan, tagihan perangkat lunak bahan (SBOM), hasil pemindaian keamanan, dan jenis lainnya.

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

Untuk menunjukkan kemampuan ini, artikel ini menunjukkan cara menggunakan OCI Registry sebagai CLI Penyimpanan (ORAS) ke push, discover dan pull grafik artefak rantai pasokan ke registri kontainer Azure. Menyimpan Artefak OCI individu (root) tercakup dalam artefak Push dan pull OCI.

Untuk menyimpan grafik artefak, referensi ke subject artefak didefinisikan menggunakan Manifes Artefak OCI, yang merupakan bagian dari spesifikasi Distribusi OCI 1.1 pra-rilis. Dukungan Manifes Artefak OCI 1.1 adalah fitur pratinjau ACR dan tunduk pada batasan.

Prasyarat

  • Azure Container Registry - Membuat registri kontainer pada langganan Azure Anda. Misalnya, gunakan portal Microsoft Azure atau Azure CLI.
    Lihat Batasan pratinjau untuk dukungan cloud Azure.
  • Azure CLI - Versi atau yang 2.29.1 lebih baru diperlukan. Lihat Menginstal Azure CLI untuk penginstalan dan/atau peningkatan.
  • ORAS CLI - Versi v0.16.0 diperlukan. Lihat: Penginstalan ORAS.
  • Docker (Opsional) - Untuk menyelesaikan panduan, gambar kontainer dirujuk. Anda dapat menggunakan Docker yang diinstal secara lokal untuk membangun dan mendorong gambar kontainer, atau menggunakan acr build untuk membangun dari jarak jauh di Azure.
    Meskipun Docker Desktop tidak diperlukan, oras cli menggunakan penyimpanan kredensial desktop Docker untuk menyimpan kredensial. Jika Docker Desktop diinstal, Docker Desktop harus berjalan untuk oras login.

Batasan pratinjau

Dukungan Manifes Artefak OCI (spesifikasi OCI 1.1) tersedia di semua wilayah publik Azure. Microsoft Azure yang dioperasikan oleh 21Vianet dan cloud pemerintah belum didukung.

Mengonfigurasi registri

Konfigurasikan variabel lingkungan untuk menyalin/menempelkan perintah dengan mudah ke dalam shell Anda. Perintah dapat dijalankan secara lokal atau di Azure Cloud Shell.

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

Autentikasi dengan identitas Microsoft Entra individual Anda menggunakan token AD. Selalu gunakan "000..." untuk USER_NAME saat token diurai melalui PASSWORD variabel.

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

Catatan

ACR dan ORAS mendukung beberapa opsi autentikasi untuk pengguna dan otomatisasi sistem. Artikel ini menggunakan identitas individual, menggunakan token Azure. Untuk opsi autentikasi lainnya, lihat Mengautentikasi dengan registri kontainer Azure

Masuk dengan ORAS

Berikan kredensial ke oras login.

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

Mendorong gambar kontainer

Contoh ini mengaitkan grafik artefak dengan gambar kontainer.

Buat dan dorong gambar kontainer, atau lewati langkah ini jika $IMAGE mereferensikan gambar yang ada di registri.

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

Membuat tanda tangan sampel ke gambar kontainer

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

Melampirkan tanda tangan ke registri, sebagai referensi ke gambar kontainer

Perintah oras attach membuat referensi antara file (./signature.json) ke $IMAGE. --artifact-type menyediakan artefak pembeda, mirip dengan ekstensi file yang memungkinkan jenis file yang berbeda. Satu atau beberapa file dapat dilampirkan dengan menentukan [file]:[mediaType].

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

Untuk informasi lebih lanjut tentang pelampiran oras, lihat dokumentasi ORAS.

Melampirkan artefak multi-file sebagai referensi

Ketika artefak OCI didorong ke registri dengan ORAS, setiap referensi file didorong sebagai blob. Untuk mendorong blob terpisah, referensikan file satu per satu, atau kumpulan file dengan mereferensikan direktori.
Untuk informasi selengkapnya cara mendorong kumpulan file, lihat Mendorong artefak dengan beberapa file.

Buat beberapa dokumentasi sekeliling artefak:

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

Lampirkan artefak multi-file sebagai referensi ke $IMAGE:

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

Menemukan referensi artefak

Spesifikasi OCI v1.1 mendefinisikan API perujuk untuk menemukan referensi ke subject artefak. Perintah oras discover dapat menampilkan daftar referensi ke gambar kontainer.

Menggunakan oras discover, lihat grafik artefak yang sekarang disimpan dalam registri.

oras discover -o tree $IMAGE

Output menunjukkan awal dari grafik artefak, di mana tanda tangan dan dokumen dianggap sebagai turunan dari gambar kontainer.

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

Membuat grafik artefak mendalam

Spesifikasi OCI v1.1 memungkinkan grafik mendalam, memungkinkan tagihan perangkat lunak bahan (SBOM) yang ditandatangani dan jenis artefak lainnya.

Membuat sampel SBOM

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

Melampirkan sampel SBOM ke gambar di registri

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

Menandatangani SBOM

Artefak yang didorong sebagai referensi, biasanya tidak memiliki tag karena dianggap sebagai bagian subject dari artefak. Untuk mendorong tanda tangan ke artefak yang merupakan turunan dari artefak lain, gunakan oras discover dengan penyaringan --artifact-type untuk menemukan digest.

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

Membuat tanda tangan SBOM

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

Melampirkan tanda tangan SBOM

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

Lihat grafik

oras discover -o tree $IMAGE

Menghasilkan output berikut:

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

Mempromosikan grafik

Alur kerja DevOps yang khas akan mempromosikan artefak dari dev through staging, ke lingkungan produksi Alur kerja rantai pasokan aman mempromosikan konten publik ke lingkungan yang diamankan secara privat. Dalam kedua kasus, Anda ingin mempromosikan tanda tangan, SBOM, hasil pemindaian, dan artefak terkait lainnya dengan artefak akar untuk memiliki grafik dependensi yang lengkap.

oras copy Dengan menggunakan perintah , Anda dapat mempromosikan grafik artefak yang difilter di seluruh registri.

net-monitor:v1 Salin gambar, dan artefak terkait ke sample-staging/net-monitor:v1:

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

Output dari 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

Menemukan grafik artefak yang dipromosikan

oras discover -o tree $TARGET_REPO:$TAG

Output dari 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

Tarik artefak yang direferensikan

Untuk menarik artefak referensi tertentu, hash referensi ditemukan dengan oras discover perintah :

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

Buat direktori bersih untuk pengunduhan

mkdir ./download

Tarik dokumen ke dalam direktori unduhan

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

Lihat dokumen

tree ./download

Output dari tree:

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

Lihat repositori dan daftar tag

Manifes Artefak OCI memungkinkan grafik artefak didorong, ditemukan, ditarik, dan disalin tanpa harus menetapkan tag. Manifes artefak memungkinkan daftar tag untuk fokus pada artefak yang dipikirkan pengguna, dibandingkan dengan tanda tangan dan SBOM yang terkait dengan gambar kontainer, bagan helm, dan artefak lainnya.

Lihat daftar tag

oras repo tags $REGISTRY/$REPO

Lihat daftar manifes

Repositori dapat memiliki daftar manifes yang ditandai dan tidak diberi tag. az acr manifest Menggunakan CLI, lihat daftar lengkap manifes:

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

Perhatikan bahwa manifes gambar kontainer memiliki "tags", sementara jenis referensi ("mediaType": "application/vnd.oci.artifact.manifest.v1+json") tidak.

Dalam output, tanda tangan tidak diberi tag, tetapi dilacak sebagai oci.artifact.manifest referensi ke gambar kontainer:

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

Menghapus semua artefak di grafik

Dukungan untuk Spesifikasi OCI v1.1 memungkinkan penghapusan grafik artefak yang terkait dengan artefak akar. oras delete Gunakan perintah untuk menghapus grafik artefak (tanda tangan, SBOM, dan tanda tangan SBOM).

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

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

Lihat manifes yang tersisa

Dengan menghapus artefak akar, semua artefak terkait juga dihapus meninggalkan lingkungan yang bersih:

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.

Ringkasan

Dalam artikel ini, grafik artefak rantai pasokan dibuat, ditemukan, dipromosikan, dan ditarik memberikan manajemen siklus hidup artefak yang Anda bangun dan andalkan.

Langkah berikutnya

  • Pelajari selengkapnya tentang CLI ORAS
  • Pelajari selengkapnya tentang Manifes Artefak OCI untuk cara mendorong, menemukan, menarik, menyalin grafik artefak rantai pasokan