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:
- ORAS ile OCI yapıtlarını gönderme ve çekme
- ORAS ile tedarik zinciri yapıtlarını ekleme, gönderme ve çekme
Ö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. CLI,
oras
kimlik bilgilerini depolamak için Docker masaüstü kimlik bilgisi depounu kullanır. 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
.
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:
- Değişkenini
ACR_NAME
kayıt defterinizin adı olarak ayarlayın. - değişkenini
REGISTRY
olarak$ACR_NAME.azurecr.io
ayarlayın. REPO
Değişkeni deponuzun adı olarak ayarlayın.TAG
Değişkeni istediğiniz etikete ayarlayın.- değişkenini
IMAGE
olarak$REGISTRY/${REPO}:$TAG
ayarlayı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
Bu kurulum, Azure Container Registry'nize sorunsuz bir şekilde yapıt göndermenizi ve çekmenizi sağlar. Artık ORAS komutu kullanılarak oras login
ek kimlik doğrulaması olmadan ACR ile kullanılabilir.
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. tarafından az acr login
kullanılan belirteç üç saat geçerlidir.
Not
ACR ve ORAS, kullanıcılar ve sistem otomasyonu için birden çok kimlik doğrulama seçeneğini destekler. Bu makalede, tanıtım kolaylığı için bireysel 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 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 OCI yapıtlarını Bir Azure kapsayıcı kayıt defterine/kayıt defterinden 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.
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:readme
iletirreadme.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ı kullananapplication/vnd.oci.image.config.v1+json
bir 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 push
olarak 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 depolama (ORAS) CLI push
discover
olarak , ve pull
bir Azure kapsayıcı kayıt defterine tedarik zinciri yapıtları 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 $IMAGE
bir 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 discover
artı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:v1
kopyalayı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
- İmzaları, yazılım malzeme faturalarını ve diğer başvuru türlerini ilişkilendiren Yapıt Başvuruları hakkında bilgi edinin.
- Bir yapıt için bildirim yapılandırma da dahil olmak üzere ORAS Projesi hakkında daha fazla bilgi edinin.
- Yeni yapıt türleri hakkında başvuru bilgileri için OCI Artifacts depoyu ziyaret edin.