إدارة OCI Artifacts و Supply Chain Artifacts باستخدام ORAS

يساعدك سجل حاويات Azure (ACR) على إدارة كل من البيانات الاصطناعية لمبادرة الحاوية المفتوحة (OCI) وبيانات سلسلة التوريد الاصطناعية. ترشدك هذه المقالة إلى كيفية استخدام ACR لإدارة بيانات OCI الاصطناعية وسلسلة التوريد بشكل فعال. تعلم كيفية تخزين وإدارة واسترداد كل من عناصر OCI ورسم بياني للبيانات الاصطناعية لسلسلة التوريد، بما في ذلك التواقيع وفاتورة البرامج للمواد (SBOM) ونتائج فحص الأمان وأنواع أخرى.

تنقسم هذه المقالة إلى قسمين رئيسيين:

المتطلبات الأساسية

  • سجل حاوية Azure - أنشئ سجل حاوية في اشتراك Azure الخاص بك. على سبيل المثال، استخدم مدخل Azure أو Azure CLI.
  • Azure CLI - الإصدار أو الإصدار 2.29.1 الأحدث مطلوب. راجع تثبيت Azure CLI للتثبيت و/أو الترقية.
  • ORAS CLI - الإصدار v1.1.0 أو الإصدار الأحدث مطلوب. راجع: تثبيت ORAS.
  • Docker (اختياري) - لإكمال المعاينة، تتم الإشارة إلى صورة حاوية. يمكنك استخدام Docker المثبت محليا لإنشاء صورة حاوية ودفعها، أو استخدام acr build للبناء عن بعد في Azure.
    في حين أن Docker Desktop غير مطلوب، oras يستخدم cli مخزن بيانات اعتماد سطح المكتب Docker لتخزين بيانات الاعتماد. إذا تم تثبيت Docker Desktop، يجب أن يكون قيد التشغيل ل oras login.

قم بتكوين التسجيل

لتكوين بيئتك لتنفيذ الأمر بسهولة، اتبع الخطوات التالية:

  1. ACR_NAME تعيين المتغير إلى اسم السجل الخاص بك.
  2. REGISTRY تعيين المتغير إلى $ACR_NAME.azurecr.io.
  3. REPO تعيين المتغير إلى اسم المستودع الخاص بك.
  4. تعيين المتغير إلى العلامة TAG المطلوبة.
  5. IMAGE تعيين المتغير إلى $REGISTRY/${REPO}:$TAG.

تعيين متغيرات البيئة

تكوين اسم التسجيل وبيانات اعتماد تسجيل الدخول واسم المستودع والعلامة لدفع البيانات الاصطناعية وسحبها. يستخدم net-monitor المثال التالي اسم المستودع وعلامة v1 . استبدل باسم المستودع الخاص بك وعلامة .

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

تسجيل الدخول إلى التسجيل

المصادقة باستخدام ACR، للسماح لك بسحب ودفع صور الحاوية.

az login  
az acr login -n $REGISTRY  

إذا لم يكن Docker متوفرا، يمكنك استخدام رمز AD المميز المقدم للمصادقة. المصادقة باستخدامهوية Microsoft Entra الفردية باستخدام رمز AD المميز. استخدم دائما "000..." ل USER_NAME حيث يتم تحليل الرمز المميز من خلال PASSWORD المتغير .

# Login to Azure
az login

تسجيل الدخول مع ORAS

قم بتوفير بيانات الاعتماد إلى oras login.

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

يمكنك هذا الإعداد من دفع البيانات الاصطناعية وسحبها بسلاسة من وإلى Azure Container Registry. اضبط المتغيرات حسب الحاجة للتكوين المحدد.

دفع وسحب OCI Artifacts باستخدام ORAS

يمكنك استخدام سجل حاوية Azure لتخزين وإدارة البيانات الاصطناعية لمبادرة الحاوية المفتوحة (OCI) بالإضافة إلى صور حاوية Docker وOCI.

لتوضيح هذه الإمكانية، يوضح هذا القسم كيفية استخدام OCI Registry as Storage (ORAS) CLI لدفع وسحب عناصر OCI من/إلى سجل حاوية Azure. يمكنك إدارة عناصر OCI المختلفة في سجل حاوية Azure باستخدام أدوات سطر أوامر مختلفة مناسبة لكل أداة.

إشعار

يدعم ACR وORAS خيارات مصادقة متعددة للمستخدمين وأتمتة النظام. تستخدم هذه المقالة الهوية الفردية، باستخدام رمز Azure المميز. لمزيد من خيارات المصادقة، راجع المصادقة باستخدام سجل حاوية Azure.

ادفع أداة

يمكن أن يكون عنصر ملف واحد ليس subject له أصل أي شيء من صورة حاوية، ومخطط helm، وملف readme للمستودع. يمكن أن تكون البيانات الاصطناعية المرجعية أي شيء من التوقيع أو فاتورة المواد البرمجية أو تقارير المسح الضوئي أو الأنواع المتطورة الأخرى. البيانات الاصطناعية المرجعية، الموضحة في إرفاق ودفع وسحب البيانات الاصطناعية لسلسلة التوريد هي بيانات اصطناعية تشير إلى أداة أخرى.

دفع البيانات الاصطناعية أحادية الملف

في هذا المثال، قم بإنشاء محتوى يمثل ملف markdown:

echo 'Readme Content' > readme.md

تدفع readme.md الخطوة التالية الملف إلى <myregistry>.azurecr.io/samples/artifact:readme.

  • يتم تعريف السجل باسم <myregistry>.azurecr.io التسجيل المؤهل بالكامل (جميع الأحرف الصغيرة)، متبوعا بمساحة الاسم والم repo: /samples/artifact.
  • يتم وضع :readmeعلامة على الأداة ، لتعريفها بشكل فريد من البيانات الاصطناعية الأخرى المدرجة في المستودع (:latest, :v1, :v1.0.1).
  • يميز الإعداد --artifact-type readme/example البيانات الاصطناعية عن صورة الحاوية، والتي تستخدم application/vnd.oci.image.config.v1+json.
  • ./readme.md يعرف الملف الذي تم تحميله، :application/markdown ويمثل IANA mediaType للملف.
    لمزيد من المعلومات، راجع OCI Artifact Authors Guidance.

oras push استخدم الأمر لدفع الملف إلى السجل الخاص بك.

Linux أو WSL2 أو 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

الإخراج لدفع ناجح مشابه للإخراج التالي:

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

aec5d9dcf7748dd702682d53

دفع بيانات اصطناعية متعددة الملفات

عند دفع عناصر OCI إلى سجل باستخدام ORAS، يتم دفع كل مرجع ملف ككائن ثنائي كبير الحجم. لدفع الكائنات الثنائية كبيرة الحجم المنفصلة، قم بالإشارة إلى الملفات بشكل فردي، أو مجموعة من الملفات عن طريق الرجوع إلى دليل.
لمزيد من المعلومات حول كيفية دفع مجموعة من الملفات، راجع دفع البيانات الاصطناعية مع ملفات متعددة.

إنشاء بعض الوثائق للمستودع:

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

دفع البيانات الاصطناعية متعددة الملفات:

Linux أو WSL2 أو 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

اكتشاف البيان

لعرض البيان الذي تم إنشاؤه كنتيجة ل oras push، استخدم oras manifest fetch:

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

يتشابه الإخراج مع:

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

سحب الأدوات

إنشاء دليل نظيف للتنزيل.

mkdir ./download

قم بتشغيل الأمر oras pull لسحب الأداة من السجل الخاص بك.

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

عرض الملفات التي تم سحبها

tree ./download

إزالة الأداة (اختياري)

لإزالة البيانات الاصطناعية من السجل الخاص بك، استخدم oras manifest delete الأمر .

 oras manifest delete $REGISTRY/samples/artifact:readme

إرفاق عناصر سلسلة التوريد ودفعها وسحبها باستخدام ORAS

لتوضيح هذه الإمكانية، توضح هذه المقالة كيفية استخدام OCI Registry ك Storage (ORAS) CLI إلى pushو discoverو pull رسم بياني للبيانات الاصطناعية لسلسلة التوريد إلى سجل حاوية Azure. يتم تغطية تخزين البيانات الاصطناعية OCI الفردية (الموضوع) في دفع وسحب البيانات الاصطناعية OCI.

لتخزين رسم بياني للبيانات الاصطناعية، يتم تعريف مرجع إلى subject أداة باستخدام بيان صورة OCI، وهو جزء من مواصفات توزيع OCI 1.1 التجريبية.

دفع صورة حاوية

لربط رسم بياني للبيانات الاصطناعية بصورة حاوية باستخدام Azure CLI:

يمكنك إنشاء صورة حاوية ودفعها، أو تخطي هذه الخطوة إذا كانت $IMAGE تشير إلى صورة موجودة في السجل.

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

إرفاق توقيع

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

إرفاق التوقيع إلى السجل، كمرجع لصورة الحاوية

oras attach ينشئ الأمر مرجعا بين الملف (./signature.json) إلى $IMAGE. يوفر --artifact-type إمكانية تمييز العناصر الملموسة، على غرار ملحقات الملفات التي تتيح أنواعاً مختلفة من الملفات. يمكن إرفاق ملف أو أكثر بتحديد [file]:[mediaType].

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

لمزيد من المعلومات حول إرفاق oras، راجع وثائق ORAS.

إرفاق البيانات الاصطناعية متعددة الملفات كمرجع

عند دفع عناصر OCI إلى سجل باستخدام ORAS، يتم دفع كل مرجع ملف ككائن ثنائي كبير الحجم. لدفع الكائنات الثنائية كبيرة الحجم المنفصلة، قم بالإشارة إلى الملفات بشكل فردي، أو مجموعة من الملفات عن طريق الرجوع إلى دليل.
لمزيد من المعلومات حول كيفية دفع مجموعة من الملفات، راجع دفع البيانات الاصطناعية مع ملفات متعددة.

اكتشاف المراجع الاصطناعية

تحدد مواصفات OCI v1.1 واجهة برمجة تطبيقات المراجع لاكتشاف المراجع إلى البيانات الاصطناعيةsubject. يمكن للأمر oras discover إظهار قائمة المراجع لصورة الحاوية.

باستخدام oras discover، اعرض الرسم البيانات الاصطناعية المخزنة الآن في التسجيل.

oras discover -o tree $IMAGE

يُظهر الإخراج بداية رسم البيانات الاصطناعية، حيث يُنظر إلى التوقيع والمستندات على أنها عناصر فرعية لصورة الحاوية.

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

إنشاء الرسوم البيانية للبيانات الاصطناعية

تتيح مواصفات OCI v1.1 الرسوم البيانية العميقة، مما يتيح فاتورة البرامج الموقعة للمواد (SBOM) وأنواع البيانات الاصطناعية الأخرى.

فيما يلي كيفية إنشاء SBOM وإرفاقه بالسجل:

إنشاء نموذج SBOM

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

إرفاق نموذج SBOM بالصورة في السجل

Linux أو WSL2 أو 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

هام

توصي Microsoft باستخدام أداة توقيع تشفير آمنة، مثل Notation لتوقيع الصورة وإنشاء توقيع لتوقيع SBOMs.

البيانات الاصطناعية التي يتم دفعها كمراجع، عادة لا تحتوي على علامات لأنها تعتبر جزءا من البيانات الاصطناعية subject . لدفع توقيع إلى عنصر اصطناعي تابع لقطعة اصطناعية أخرى، استخدم تصفية oras discover مع --artifact-type للعثور على الملخص. يستخدم هذا المثال توقيع JSON بسيطا لأغراض العرض التوضيحي.

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

إنشاء توقيع SBOM.

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

إرفاق توقيع SBOM

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

عرض الرسم البياني

oras discover -o tree $IMAGE

يولد الإخراج التالي:

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

تعزيز الرسم البياني للبيانات الاصطناعية

يقوم سير عمل DevOps النموذجي بترقية البيانات الاصطناعية من التطوير إلى التقسيم المرحلي إلى بيئة الإنتاج. تعمل مهام سير عمل سلسلة التوريد الآمنة على ترقية المحتوى العام إلى بيئات آمنة بشكل خاص. في كلتا الحالتين، تريد ترقية التواقيع وSBOMs ونتائج الفحص وغيرها من البيانات الاصطناعية ذات الصلة مع البيانات الاصطناعية للموضوع للحصول على رسم بياني كامل للتبعيات.

باستخدام الأمر ، يمكنك ترقية oras copy رسم بياني مصفاة للبيانات الاصطناعية عبر السجلات.

انسخ net-monitor:v1 الصورة والبيانات الاصطناعية ذات الصلة إلى sample-staging/net-monitor:v1:

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

إخراج 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

اكتشاف الرسم البياني المصطنع الذي تمت ترقيته

oras discover -o tree $TARGET_REPO:$TAG

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

سحب البيانات الاصطناعية المرجعية

لسحب أداة محددة مرجعية، يتم اكتشاف ملخص المرجع باستخدام oras discover الأمر :

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

إنشاء دليل نظيف للتنزيل

mkdir ./download

سحب المستندات إلى دليل التنزيل

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

عرض المستندات

tree ./download

إخراج tree:

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

عرض المستودع وقائمة العلامات

تمكن ORAS من دفع الرسوم البيانية للبيانات الاصطناعية، اكتشافها، سحبها، ونسخها دون الحاجة إلى تعيين علامات. كما أنه يمكن قائمة العلامات من التركيز على البيانات الاصطناعية التي يفكر فيها المستخدمون، بدلا من التواقيع وSBOMs المرتبطة بصور الحاوية ومخططات helm والبيانات الاصطناعية الأخرى.

عرض قائمة العلامات

oras repo tags $REGISTRY/$REPO

حذف كافة البيانات الاصطناعية في الرسم البياني

يتيح دعم مواصفات OCI v1.1 حذف الرسم البياني للبيانات الاصطناعية المرتبطة بالبيانات الاصطناعية للموضوع. oras manifest delete استخدم الأمر لحذف الرسم البياني للبيانات الاصطناعية (التوقيع وSBOM وتوقيع SBOM).

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

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

يمكنك عرض قائمة البيانات لتأكيد حذف البيانات الاصطناعية للموضوع، وجميع البيانات الاصطناعية ذات الصلة التي تترك بيئة نظيفة.

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

إخراج:

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

الملخص

في هذه المقالة، تعلمت كيفية استخدام Azure Container Registry لتخزين وإدارة واسترداد كل من عناصر OCI وسلسلة التوريد. لقد استخدمت ORAS CLI لدفع البيانات الاصطناعية وسحبها من/إلى Azure Container Registry. اكتشفت أيضا بيان البيانات الاصطناعية التي تم دفعها وعرض الرسم البياني للبيانات الاصطناعية المرفقة بصورة الحاوية.

الخطوات التالية