Azure 'da özel bir kapsayıcı kayıt defteri kullanarak gönderme ve çekme tedarik zinciri yapıları (Önizleme)

İmzalar, yazılım ağaçları (SBoM), güvenlik taraması sonuçları veya diğer türler dahil olmak üzere yapıların bir grafiğini depolamak ve yönetmek için bir Azure Container Registry kullanın.

bir kapsayıcı görüntüsü, imza ve imzalı yazılım ürün reçeteleri dahil olmak üzere yapıtlar Graph

bu özelliği göstermek için, bu makalede, bir Azure container registry 'ye yapıt grafiği göndermek ve çekmek üzere ocı kayıt defterinin Depolama (oras) aracı olarak nasıl kullanılacağı gösterilmektedir.

oras Artifacts desteği önizleme özelliğidir ve sınırlamalaratabidir. Premium hizmet katmanında kullanılabilen bölge artıklığıgerektirir. Kayıt defteri hizmeti katmanları ve limitleri hakkında bilgi için bkz. Azure Container Registry hizmet katmanları.

Önkoşullar

  • daha oras clı -oras clı, bir oras Artifacts etkinleştirilmiş kayıt defterine gönderimi, bulmayı, yapıları çekmeyi sağlar.
  • Azure CLI -bir kimlik oluşturmak, depoları listelemek ve silmek IÇIN Azure CLI 'nin yerel yüklemesi gerekir. Sürüm 2.29.1 veya üzeri önerilir. az --version Sürümü bulmak için ' i çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • Docker (isteğe bağlı) -izlenecek yolu tamamlamak için bir kapsayıcı resmine başvurulur. Bir kapsayıcı görüntüsü oluşturmak ve göndermek veya var olan bir kapsayıcı görüntüsüne başvurmak için yerel olarak yüklenen Docker 'ı kullanabilirsiniz. Docker macOS, Windows veya Linux'ta Docker'ı kolayca yapılandırmanızı sağlayan paketler sağlar.

Önizleme sınırlamaları

oras Artifacts desteği, kullanılabilirlik alanı desteğiyle Orta Güney ABD bölgeyle sınırlıdır.

  • Coğrafi olarak çoğaltılan kayıt defterleri, başvurulan yapıtları diğer bölgelere çoğaltmayacaktır. ek bölgeler Artifacts oras desteklediğinde, başvurulan yapıtlar çoğaltılır.

ORAS yüklemesi

İşletim sisteminiz için bir önizleme ve sürüm sürümü indirin ve yükleyin. işletim sisteminiz için dosyanın nasıl ayıklanıp yükleneceğine ilişkin daha fazla bilgi için bkz. oras GitHub deposundan bir Alpha. 1 preview derlemesi

Özel bir kayıt defteri yapılandırma

Komutları kabuğa kolayca kopyalamak/yapıştırmak için ortam değişkenlerini yapılandırın. Komutlar Azure Cloud Shell çalıştırılabilir

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

Kaynak grubu oluşturma

Gerekirse, kayıt defteri için bir kaynak grubu oluşturmak için az Group Create komutunu çalıştırın.

az group create --name $ACR_NAME --location southcentralus

Yapı etkin kayıt defteri oluşturma

oras için önizleme desteği Artifacts, Orta Güney ABD bölgesinde Premium bir hizmet katmanı gerektiren bölge yedekliliği gerektirir. bir oras Artifacts etkinleştirilmiş kayıt defteri oluşturmak için az acr create komutunu çalıştırın. az acr createDaha fazla kayıt defteri seçeneği için komut yardımına bakın.

az acr create \
  --resource-group $ACR_NAME \
  --name $ACR_NAME \
  --zone-redundancy enabled \
  --sku Premium \
  --output jsonc

Komut çıkışında, zoneRedundancy kayıt defteri için özelliği aklınızda. Etkinleştirildiğinde, kayıt defteri bölge yedekli ve ORAS yapıtı etkindir:

{
  [...]
  "zoneRedundancy": "Enabled",
}

Azure CLI'de oturum açma

Kapsayıcı kayıt defterinden yapıtları göndermek ve çekmek için kimliğinizi kullanarak Azure CLı 'Da oturum açın .

Ardından, kayıt defterine erişmek için az ACR oturum açma Azure CLI komutunu kullanın.

az login
az acr login --name $ACR_NAME

Not

az acr login, dosyasında Azure Active Directory belirteç ayarlamak için docker istemcisini kullanır docker.config . Tek tek kimlik doğrulama akışının tamamlanabilmesi için Docker istemcisinin yüklü ve çalışıyor olması gerekir.

ORAS ile oturum açın

Bu bölüm, kayıt defterinde oturum açma seçeneklerini gösterir. Ortamınız için uygun yöntemi seçin.

oras loginKayıt defteriyle kimlik doğrulaması yapmak için ' i çalıştırın. Hizmet sorumlusu kimlik bilgileri, Kullanıcı kimliği veya depo kapsamlı belirteç (Önizleme) gibi senaryonuz için uygun kayıt defteri kimlik bilgilerini geçirebilirsiniz.

  • Bir AD belirteci kullanmak için bireysel Azure AD kimliğiniz ile kimlik doğrulaması yapın.

    USER_NAME="00000000-0000-0000-0000-000000000000"
    PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
    
  • AD tabanlı olmayan belirteçleri kullanmak için, Depo kapsamlı bir belirteç (Önizleme) ile kimlik doğrulaması yapın.

    USER_NAME="oras-token"
    PASSWORD=$(az acr token create -n $USER_NAME \
                      -r $ACR_NAME \
                      --repository $REPO content/write \
                      --only-show-errors \
                      --query "credentials.passwords[0].value" -o tsv)
    
  • kayıt defterine çekme ve anında iletme izinleri (acrpush rolü) ile Azure Active Directory hizmet sorumlusu ile kimlik doğrulaması yapın.

    SERVICE_PRINCIPAL_NAME="oras-sp"
    ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
    PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME \
              --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
               --role acrpush \
              --query "password" --output tsv)
    USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
    

ORAS ile oturum açın

Kimlik bilgilerini sağlayın oras login .

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

STDIN 'den parolayı okumak için kullanın --password-stdin .

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

Bu örnek, bir yapıt grafiğini bir kapsayıcı görüntüsü ile ilişkilendirir. Bir kapsayıcı görüntüsü oluşturun ve gönderin veya özel kayıt defterindeki var olan bir görüntüye başvurun.

docker build -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main
docker push $IMAGE

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

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

Kapsayıcı resmine başvuru olarak kayıt defterine bir imza gönderin

ORAS komutu, imzayı bir depoya gönderir ve parametresi aracılığıyla başka bir yapıya başvuruda bulunuyor subject . , --artifact-type Farklı dosya türlerini etkinleştiren dosya uzantılarına benzer yapıtları farklılaştırmayı sağlar. Bir veya daha fazla dosya, file:mediaType

oras push $REGISTRY/$REPO \
    --artifact-type 'signature/example' \
    --subject $IMAGE \
    ./signature.json:application/json

Oras Push hakkında daha fazla bilgi için bkz. oras belgeleri.

Çoklu dosya yapıtı bir başvuru olarak gönderin

Yapıt etrafında bazı belgeler oluşturma

echo 'Readme Content' > readme.md
echo 'Detailed Content' > readme-details.md

Çoklu dosya yapıtı bir başvuru olarak gönderin

oras push $REGISTRY/$REPO \
    --artifact-type 'readme/example' \
    --subject $IMAGE \
    ./readme.md:application/markdown \
    ./readme-details.md:application/markdown

Yapıt başvuruları bulunuyor

oras Artifacts belirtimi, bir yapıtın başvurularını bulmak için [başvuranlar apı] [oras-Artifacts-başvuranlar] tanımlar subject . oras discoverKomut, kapsayıcı görüntüsüne başvuruların listesini gösterebilir.

Kullanarak oras discover , artık kayıt defterinde depolanan yapıtların grafiğini görüntüleyin

oras discover -o tree $IMAGE

Çıktı, imza ve belgelerin kapsayıcı görüntüsünün alt öğesi olarak görüntülendiği yapıtlar 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 ayrıntılı bir grafiğini oluşturma

oras Artifacts belirtimi, daha derin grafikler sunarak imzalı yazılım reçetelerini (sbom) ve diğer yapıt türlerini etkinleştirir.

Örnek bir SBoM oluşturma

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

Kayıt defterine örnek bir SBoM gönderin

oras push $REGISTRY/$REPO \
  --artifact-type 'sbom/example' \
  --subject $IMAGE \
  ./sbom.json:application/json

SBoM 'ı imzala

başvuru olarak gönderilen Artifacts, genellikle, konu yapıtı 'nin bir parçası olarak kabul edildiği için etiketlere sahip değildir. Bir imzayı başka bir yapıtın alt öğesi olan bir yapıya göndermek için, oras discover --artifact-type Özeti bulmak için ile birlikte filtresini kullanın.

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

Bir SBoM imzası oluşturma

echo '{"artifact": "'$REGISTRY/${REPO}@$SBOM_DIGEST'", "signature": "pat hancock"}' > sbom-signature.json

SBoM imzasını gönder

oras push $REGISTRY/$REPO \
  --artifact-type 'signature/example' \
  --subject $REGISTRY/$REPO@$SBOM_DIGEST \
  ./sbom-signature.json:application/json

Grafiği görüntüle

oras discover -o tree $IMAGE

Aşağıdaki çıktıyı üretir:

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

Başvurulan bir yapıtı çekme

Başvurulan bir türü çekmek için, başvuru özeti komutla birlikte bulunur oras discover

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

İndirme için temiz dizin oluşturma

mkdir ./download

Belgeleri indirme dizinine çekme

oras pull -a -o ./download $REGISTRY/$REPO@$DOC_DIGEST

Belgeleri görüntüleme

ls ./download

Depoyu ve etiket listesini görüntüleyin

oras Artifacts, yapıt grafiklerinin etiket atamaya gerek kalmadan gönderilme, keşfedilebilir, çekilme ve kopyalanabilir olmasını sağlar. Bu, kapsayıcı görüntüleri, HELI grafikleri ve diğer yapıtlar ile ilişkili imzalara ve SBOM 'Ların aksine, bir etiket listesinin kullanıcılara düşündüğünü sağlar.

Etiketlerin listesini görüntüleme

az acr repository show-tags \
  -n $ACR_NAME \
  --repository $REPO \
  -o jsonc

Bildirimlerin listesini görüntüleme

Bir depoda hem etiketli hem de etiketsiz bir bildirim listesi bulunabilir

az acr repository show-manifests \
  -n $ACR_NAME \
  --repository $REPO \
  --detail -o jsonc

Kapsayıcı görüntüsü bildirimlerinin olduğunu aklınızda "tags":

{
  "architecture": "amd64",
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": true
  },
  "configMediaType": "application/vnd.docker.container.image.v1+json",
  "createdTime": "2021-11-12T00:18:54.5123449Z",
  "digest": "sha256:a0fc570a245b09ed752c42d600ee3bb5b4f77bbd70d8898780b7ab4...",
  "imageSize": 2814446,
  "lastUpdateTime": "2021-11-12T00:18:54.5123449Z",
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "os": "linux",
  "tags": [
    "v1"
  ]
}

İmza etiketsiz, ancak oras.artifact.manifest kapsayıcı resmine başvuru olarak izleniyor

{
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": true
  },
  "createdTime": "2021-11-12T00:19:10.987156Z",
  "digest": "sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcbcc0b0d...",
  "imageSize": 85,
  "lastUpdateTime": "2021-11-12T00:19:10.987156Z",
  "mediaType": "application/vnd.cncf.oras.artifact.manifest.v1+json"
}

Grafikteki tüm yapıtları Sil

oras Artifacts belirtimi için destek, kök yapıtıyla ilişkili yapıtların grafiğin silinmesine izin vermez. İmza, SBoM ve SBoM imzasını silmek için az ACR Repository Delete komutunu kullanın.

az acr repository delete \
  -n $ACR_NAME \
  -t ${REPO}:$TAG -y

Kalan bildirimleri görüntüleyin

az acr repository show-manifests \
  -n $ACR_NAME \
  --repository $REPO \
  --detail -o jsonc

Sonraki adımlar

  • ORAS CLI hakkında daha fazla bilgi edinin
  • tedarik zinciri yapıtlarının bir grafiğini gönderme, keşfetme, çekme ve kopyalama hakkında daha fazla bilgi Artifacts