Azure Kayıt Defteri'ni kullanarak tedarik zinciri yapıtlarını gönderme ve çekme (Önizleme)

İmzalar, yazılım malzeme listesi (SBOM), güvenlik taraması sonuçları ve diğer türler de dahil olmak üzere tedarik zinciri yapıtlarının grafiğini depolamak ve yönetmek için Bir Azure kapsayıcı kayıt defteri kullanın.

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

Bu özelliği göstermek için, bu makalede OCI Kayıt Defteri'nin için Depolama (ORAS) CLI pushdiscover olarak nasıl kullanılacağı ve pull Azure kapsayıcı kayıt defterine tedarik zinciri yapıtlarının grafiği gösterilir. Tek tek (kök) OCI Yapıtlarının depolanması, gönderme ve çekme OCI yapıtları kapsamındadır.

Yapıt grafiğini depolamak için, yayın öncesi OCI 1.1 Dağıtım belirtiminin bir parçası olan OCI Yapıt Bildirimi kullanılarak bir subject yapıta başvuru tanımlanır. OCI 1.1 Yapıt Bildirimi desteği bir ACR önizleme özelliğidir ve sınırlamalara tabidir.

Ön koşullar

Önizleme sınırlamaları

OCI Yapıt Bildirimi desteği (OCI 1.1 belirtimi) tüm Azure genel bölgelerinde kullanılabilir. 21Vianet tarafından sağlanan Microsoft Azure ve kamu bulutları henüz desteklenmemektedir.

Kayıt defterini yapılandırma

Ortam değişkenlerini, komutları kolayca kopyalayıp kabuğunuza yapıştıracak şekilde yapılandırın. Komutlar yerel olarak veya Azure Cloud Shell'de çalıştırılabilir.

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

AD belirteci kullanarak bireysel Microsoft Entra kimliğinizle kimlik doğrulaması. Belirteç değişken aracılığıyla PASSWORD ayrıştırıldığından USER_NAME her zaman için "000..." kullanın.

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

Dekont

ACR ve ORAS, kullanıcılar ve sistem otomasyonu için birden çok kimlik doğrulama seçeneğini destekler. Bu makalede Azure belirteci kullanılarak tek tek kimlik kullanılır. Daha fazla kimlik doğrulama seçeneği için bkz. Azure kapsayıcı kayıt defteriyle kimlik doğrulaması

ORAS ile oturum açma

kimlik bilgilerini adresine oras loginsağlayın.

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

Kapsayıcı görüntüsü gönderme

Bu örnek, yapıtların grafiğini bir kapsayıcı görüntüsüyle ilişkilendirir.

Kapsayıcı görüntüsü oluşturup gönderin veya kayıt defterinde var olan bir görüntüye başvuruda bulunursa $IMAGE bu adımı atlayın.

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

Kapsayıcı görüntüsüne örnek imza oluşturma

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

Kapsayıcı görüntüsüne başvuru olarak kayıt defterine imza ekleme

komutu, oras attach dosyası (./signature.json) arasında öğesine $IMAGEbir başvuru oluşturur. , --artifact-type farklı dosya türlerini etkinleştiren dosya uzantılarına benzer şekilde yapıtları ayırt etmek için sağlar. belirterek [file]:[mediaType]bir veya daha fazla dosya eklenebilir.

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

Oras ekleme hakkında daha fazla bilgi için ORAS belgelerine bakın.

Çok dosyalı yapıtı başvuru olarak ekleme

OCI yapıtları ORAS ile bir kayıt defterine gönderildiğinde, her dosya başvurusu blob olarak gönderilir. Ayrı bloblar göndermek için dosyalara tek tek veya bir dizine başvurarak dosya koleksiyonuna başvurun.
Bir dosya koleksiyonunu gönderme hakkında daha fazla bilgi için bkz . Yapıtları birden çok dosyayla gönderme.

Yapıtla ilgili bazı belgeler oluşturun:

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

Çok dosyalı yapıtı öğesine $IMAGEbaşvuru olarak ekleyin:

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

Yapıt başvurularını bulma

OCI v1.1 Belirtimi, bir yapıt başvurularını bulmak için başvuranlar subject API'sini tanımlar. komutu, oras discover kapsayıcı görüntüsüne yapılan başvuruların listesini gösterebilir.

kullanarak oras discoverartık kayıt defterinde depolanan yapıtların grafiğini görüntüleyin.

oras discover -o tree $IMAGE

Çıktı, imzanın ve belgelerin kapsayıcı görüntüsünün alt öğeleri olarak görüntülendiği yapıt grafiğinin başlangıcını gösterir.

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

Yapıtların derin graflarını oluşturma

OCI v1.1 Belirtimi, ayrıntılı grafiklere olanak tanıyarak imzalı yazılım ürün reçetesini (SBOM) ve diğer yapıt türlerini etkinleştirir.

Örnek SBOM oluşturma

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

Kayıt defterindeki görüntüye örnek bir SBOM ekleme

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

SBOM'yi imzalama

Başvuru olarak gönderilen yapıtların genellikle yapıtın parçası subject olarak kabul edildiği için etiketleri yoktur. başka bir yapıtın alt öğesi olan bir yapıta imza göndermek için özetini oras discover bulmak için ile --artifact-type filtrelemesini kullanın.

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

SBOM imzası oluşturma

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

SBOM imzasını ekleme

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

Grafiği görüntüleme

oras discover -o tree $IMAGE

Aşağıdaki çıkışı oluşturur:

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

Grafiği yükseltme

Tipik bir DevOps iş akışı, geliştirmeden hazırlamaya kadar yapıtları üretim ortamına yükseltecek Güvenli tedarik zinciri iş akışları, genel içeriği özel olarak güvenli ortamlara yükseltecektir. Her iki durumda da imzaları, SBOM'ları, tarama sonuçlarını ve kök yapıtla ilgili diğer yapıtları yükselterek bağımlılıkların eksiksiz bir grafiğine sahip olmak istersiniz.

oras copy komutunu kullanarak kayıt defterleri arasında filtrelenmiş yapıt grafiğini yükseltebilirsiniz.

net-monitor:v1 Görüntüyü kopyalayın ve ilgili yapıtları öğesine sample-staging/net-monitor:v1kopyalayın:

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

çıktısı 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

Yükseltilen yapıt grafını keşfedin

oras discover -o tree $TARGET_REPO:$TAG

çıktısı 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

Başvurulan yapıtı çekme

Başvuruda bulunılan belirli bir yapıtı çekmek için, başvuru özeti komutuyla oras discover bulunur:

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

İndirme için temiz bir dizin oluşturma

mkdir ./download

Belgeleri indirme dizinine çekme

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

Belgeleri görüntüleme

tree ./download

çıktısı tree:

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

Depoyu ve etiket listesini görüntüleme

OCI Yapıt Bildirimi, etiket atamak zorunda kalmadan yapıt grafiklerinin gönderilmesini, bulunmasını, çekilmesini ve kopyalanmasına olanak tanır. Yapıt bildirimleri, kapsayıcı görüntüleri, helm grafikleri ve diğer yapıtlarla ilişkili imzalar ve SBOM'lar yerine, etiket listesinin kullanıcıların düşündüğü yapıtlara odaklanmasını sağlar.

Etiket listesini görüntüleme

oras repo tags $REGISTRY/$REPO

Bildirimlerin listesini görüntüleme

Bir depo hem etiketli hem de etiketsiz bildirimlerin bir listesine sahip olabilir. CLI kullanarak az acr manifest bildirimlerin tam listesini görüntüleyin:

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

Kapsayıcı görüntüsü bildirimlerinde "tags", başvuru türleri ("mediaType": "application/vnd.oci.artifact.manifest.v1+json") yoktur.

Çıktıda imza etiketsizdir, ancak kapsayıcı görüntüsüne başvuru oci.artifact.manifest olarak izlenir:

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

Grafikteki tüm yapıtları silme

OCI v1.1 Belirtimi desteği, kök yapıtla ilişkili yapıtların grafiğinin silinmesini sağlar. Yapıtların grafiğini oras delete (imza, SBOM ve SBOM imzası) silmek için komutunu kullanın.

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

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

Kalan bildirimleri görüntüleme

Kök yapıt silinerek, tüm ilgili yapıtlar temiz bir ortamdan ayrılarak da silinir:

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

Çıkış:

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

Özet

Bu makalede, oluşturduğunuz ve bağlı olduğunuz yapıtların yaşam döngüsü yönetimini sağlayan tedarik zinciri yapıtlarının grafiği oluşturulur, keşfedilir, yükseltilir ve çekilir.

Sonraki adımlar