Aracılığıyla paylaş


ORAS ile OCI Yapıtlarını ve Tedarik Zinciri Yapıtlarını Yönetme

Azure container registry (ACR), hem Open container initiative (OCI) yapıtlarını hem de tedarik zinciri yapıtlarını yönetmenize yardımcı olur. Bu makale, OCI yapıtlarını ve tedarik zinciri yapıtlarını etkili bir şekilde yönetmek için ACR'yi kullanma konusunda size yol gösterir. İmzalar, yazılım malzeme listesi (SBOM), güvenlik taraması sonuçları ve diğer türler dahil olmak üzere hem OCI yapıtlarını hem de tedarik zinciri yapıtlarının grafiğini depolamayı, yönetmeyi ve almayı öğrenin.

Bu makale iki ana bölüme ayrılmıştır:

Önkoşullar

  • Azure kapsayıcısı kayıt defteri -Azure aboneliğinizde bir kapsayıcı kayıt defteri oluşturun. Örneğin, Azure portalını veya Azure CLI'yı kullanın.
  • Azure CLI - Sürüm 2.29.1 veya üzeri gereklidir. Yükleme ve/veya yükseltme için bkz . Azure CLI'yi yükleme.
  • ORAS CLI - Sürüm v1.1.0 veya sonraki bir sürüm gereklidir. Bkz. ORAS yüklemesi.
  • Docker (İsteğe bağlı) - İzlenecek yolu tamamlamak için bir kapsayıcı görüntüsüne başvurulur. Yerel olarak yüklenen Docker'ı kullanarak bir kapsayıcı görüntüsü derleyebilir ve gönderebilirsiniz ya da Azure'da uzaktan derlemek için kullanabilirsinizacr build.
    Docker Desktop gerekli olmasa da cli, oras kimlik bilgilerini depolamak için Docker masaüstü kimlik bilgisi depounu kullanır. Docker Desktop yüklüyse, için oras loginçalışıyor olmalıdır.

Kayıt defterini yapılandırma

Ortamınızı kolay komut yürütme için yapılandırmak için şu adımları izleyin:

  1. Değişkenini ACR_NAME kayıt defterinizin adı olarak ayarlayın.
  2. değişkenini REGISTRY olarak $ACR_NAME.azurecr.ioayarlayın.
  3. REPO Değişkeni deponuzun adı olarak ayarlayın.
  4. TAG Değişkeni istediğiniz etikete ayarlayın.
  5. değişkenini IMAGE olarak $REGISTRY/${REPO}:$TAGayarlayın.

Ortam değişkenlerini belirleme

Yapıtları göndermek ve çekmek için bir kayıt defteri adı, oturum açma kimlik bilgileri, bir depo adı ve etiket yapılandırın. Aşağıdaki örnekte depo adı ve v1 etiketi kullanılmaktadırnet-monitor. değerini kendi deponuzun adı ve etiketiyle değiştirin.

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

Kayıt defterinde oturum açma

Kapsayıcı görüntülerini çekmenize ve göndermenize olanak sağlamak için ACR ile kimlik doğrulamasından geçin.

az login  
az acr login -n $REGISTRY  

Docker kullanılamıyorsa, kimlik doğrulaması için sağlanan AD belirtecini kullanabilirsiniz. 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

ORAS ile oturum açma

kimlik bilgilerini adresine oras loginsağlayın.

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

Bu kurulum, Azure Container Registry'nize sorunsuz bir şekilde yapıt göndermenizi ve çekmenizi sağlar. Değişkenleri özel yapılandırmanız için gerektiği gibi ayarlayın.

ORAS ile OCI Yapıtlarını Gönderme ve Çekme

Open Container Initiative (OCI) yapıtlarının yanı sıra Docker ve OCI kapsayıcı görüntülerini depolamak ve yönetmek için bir Azure kapsayıcı kayıt defteri kullanabilirsiniz.

Bu özelliği göstermek için bu bölümde OCI Kayıt Defteri'ni Depolama (ORAS) CLI olarak kullanarak Bir Azure kapsayıcı kayıt defterine OCI yapıtlarını gönderme ve çekme işlemleri gösterilmektedir. Azure kapsayıcı kayıt defterindeki çeşitli OCI yapıtlarını, her yapıta uygun farklı komut satırı araçlarını kullanarak yönetebilirsiniz.

Not

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ı.

Yapıt gönderme

Üst öğesi olmayan subject tek bir dosya yapıtı, bir kapsayıcı görüntüsünden, helm grafiğinden, depo için bir benioku dosyasından herhangi bir şey olabilir. Başvuru yapıtları bir imzadan, yazılım malzeme faturasından, tarama raporlarından veya diğer gelişen türlerden herhangi bir şey olabilir. Ekleme, gönderme ve çekme tedarik zinciri yapıtları bölümünde açıklanan başvuru yapıtları , başka bir yapıta başvuran yapıtlardır.

Tek Dosyalı Yapıt Gönderme

Bu örnekte, markdown dosyasını temsil eden içerik oluşturun:

echo 'Readme Content' > readme.md

Aşağıdaki adım dosyayı adresine <myregistry>.azurecr.io/samples/artifact:readmeiletirreadme.md.

  • Kayıt defteri, tam kayıt defteri adıyla <myregistry>.azurecr.io (tümü küçük harfle) ve ardından ad alanı ve depoyla tanımlanır: /samples/artifact.
  • Yapıt, depoda ():latest, :v1, :v1.0.1 listelenen diğer yapıtlardan benzersiz olarak tanımlamak için etiketlenmiştir:readme.
  • Ayarı --artifact-type readme/example , yapıtı kullanan application/vnd.oci.image.config.v1+jsonbir kapsayıcı görüntüsünden ayırt eder.
  • karşıya ./readme.md yüklenen dosyayı tanımlar ve :application/markdown dosyasının IANA'sını mediaType temsil eder.
    Daha fazla bilgi için bkz . OCI Yapıt Yazarları Kılavuzu.

oras push Dosyayı kayıt defterinize göndermek için komutunu kullanın.

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

Başarılı bir gönderimin çıktısı aşağıdaki çıkışa benzer:

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

aec5d9dcf7748dd702682d53

Çok dosyalı yapıt gönderme

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.

Depo için 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ı gönderme:

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

Bildirimi keşfedin

sonucu oras pusholarak oluşturulan bildirimi görüntülemek için kullanın oras manifest fetch:

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

Çıktı şuna benzer olacaktır:

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

Yapıt çekme

İndirme için temiz bir dizin oluşturun.

mkdir ./download

oras pull Yapıtı kayıt defterinizden çekmek için komutunu çalıştırın.

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

Çekilen dosyaları görüntüleme

tree ./download

Yapıtı kaldırma (isteğe bağlı)

Yapıtı kayıt defterinizden kaldırmak için komutunu kullanın oras manifest delete .

 oras manifest delete $REGISTRY/samples/artifact:readme

ORAS ile tedarik zinciri yapıtlarını ekleme, gönderme ve çekme

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

Yapıtların grafiğini depolamak için, yayın öncesi OCI 1.1 Dağıtım belirtiminin bir parçası olan OCI görüntü bildirimi kullanılarak bir subject yapıta başvuru tanımlanır.

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

Azure CLI kullanarak yapıt grafiğini kapsayıcı görüntüsüyle ilişkilendirmek için:

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

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

İmza Ekleme

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ı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ıt grafikleri 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.

Kayıt defterine SBOM oluşturma ve ekleme burada açıklanabilir:

Ö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

Önemli

Microsoft, görüntüyü imzalamak ve SBOM'ları imzalamak için imza oluşturmak için Notation gibi güvenli bir şifreleme imzalama aracı kullanmanızı önerir.

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. Bu örnek, tanıtım amacıyla basit bir JSON imzası kullanır.

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

SBOM imzası oluşturun.

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

Yapıt Grafını Yükseltme

Tipik bir DevOps iş akışı, geliştirme aşamasından üretim ortamına kadar yapıtları yükseltmektedir. Güvenli tedarik zinciri iş akışları, genel içeriği özel olarak güvenli ortamlara yükseltmektedir. Her iki durumda da konu yapıtı ile imzaları, SBOM'ları, tarama sonuçlarını ve diğer ilgili yapıtları yükselterek bağımlılıkların eksiksiz bir grafiğine sahip olmak istiyorsunuz.

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

net-monitor:v1 Görüntüyü 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şvuruda Belirtilen Yapıtları Ç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

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

Etiket listesini görüntüleme

oras repo tags $REGISTRY/$REPO

Grafikteki tüm yapıtları silme

OCI v1.1 Belirtimi desteği, konu yapıtı ile ilişkili yapıtların grafiğinin silinmesini sağlar. Yapıtların grafiğini oras manifest 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

Konu yapıtının silinmesini onaylamak için bildirimlerin listesini ve temiz bir ortamdan çıkan tüm ilgili yapıtları görüntüleyebilirsiniz.

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

Çıktı:

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

Özet

Bu makalede, hem OCI yapıtlarını hem de tedarik zinciri yapıtlarını depolamak, yönetmek ve almak için Azure Container Registry'yi kullanmayı öğrendiniz. Bir Azure Container Registry'ye yapıt göndermek ve bu kayıttan yapıtları çekmek için ORAS CLI kullandınız. Ayrıca, gönderilen yapıtların bildirimini keşfettiniz ve kapsayıcı görüntüsüne eklenmiş yapıtların grafiğini görüntülediyseniz.

Sonraki adımlar