توقيع صور الحاوية باستخدام Notation وAzure Key Vault باستخدام شهادة موقعة ذاتيا
توقيع صور الحاوية هو عملية تضمن أصالتها وسلامتها. يتم تحقيق ذلك عن طريق إضافة توقيع رقمي إلى صورة الحاوية، والتي يمكن التحقق من صحتها أثناء النشر. يساعد التوقيع على التحقق من أن الصورة من ناشر موثوق به ولم يتم تعديلها. تدوين هو أداة سلسلة توريد مصدر مفتوح تم تطويرها من قبل مشروع كاتب العدل، والذي يدعم توقيع صور الحاوية وغيرها من البيانات الاصطناعية والتحقق منها. يتم استخدام Azure Key Vault (AKV) لتخزين الشهادات بمفاتيح التوقيع التي يمكن استخدامها بواسطة Notation مع المكون الإضافي Notation AKV (azure-kv) لتوقيع صور الحاوية والبيانات الاصطناعية الأخرى والتحقق منها. يسمح لك Azure Container Registry (ACR) بإرفاق التواقيع بصور الحاوية والبيانات الاصطناعية الأخرى بالإضافة إلى عرض تلك التواقيع.
في هذا البرنامج التعليمي:
- تثبيت Notation CLI والمكون الإضافي AKV
- إنشاء شهادة موقعة ذاتيا في AKV
- إنشاء صورة حاوية ودفعها باستخدام مهام ACR
- توقيع صورة حاوية باستخدام Notation CLI والمكون الإضافي AKV
- التحقق من صحة صورة حاوية مقابل التوقيع باستخدام Notation CLI
المتطلبات الأساسية
- إنشاء سجل حاويات Azure أو استخدامه لتخزين صور الحاوية والتوقيعات
- إنشاء أو استخدام Azure Key Vault لإدارة الشهادات
- تثبيت وتكوين أحدث أوامر Azure CLI أو تشغيل في Azure Cloud Shell
تثبيت Notation CLI والمكون الإضافي AKV
تثبيت Notation v1.1.0 على بيئة Linux amd64. اتبع دليل تثبيت Notation لتنزيل الحزمة للبيئات الأخرى.
# Download, extract and install curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.1.0/notation_1.1.0_linux_amd64.tar.gz tar xvzf notation.tar.gz # Copy the Notation binary to the desired bin directory in your $PATH, for example cp ./notation /usr/local/bin
تثبيت المكون الإضافي
azure-kv
Notation Azure Key Vault v1.1.0 على بيئة Linux amd64.إشعار
يمكن العثور على عنوان URL والرسوم الاختبارية SHA256 للمكون الإضافي Notation Azure Key Vault في صفحة إصدار المكون الإضافي.
notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.1.0/notation-azure-kv_1.1.0_linux_amd64.tar.gz --sha256sum 2fc959bf850275246b044203609202329d015005574fabbf3e6393345e49b884
اسرد المكونات الإضافية المتوفرة وتأكد من
azure-kv
تضمين المكون الإضافي مع الإصدار1.1.0
في القائمة.notation plugin ls
تكوين متغيرات البيئة
إشعار
لسهولة تنفيذ الأوامر في البرنامج التعليمي، قم بتوفير قيم لموارد Azure لمطابقة موارد ACR و AKV الحالية.
تكوين أسماء موارد AKV.
# Name of the existing AKV used to store the signing keys AKV_NAME=myakv # Name of the certificate created in AKV CERT_NAME=wabbit-networks-io CERT_SUBJECT="CN=wabbit-networks.io,O=Notation,L=Seattle,ST=WA,C=US" CERT_PATH=./${CERT_NAME}.pem
تكوين ACR وأسماء موارد الصورة.
# Name of the existing registry example: myregistry.azurecr.io ACR_NAME=myregistry # Existing full domain of the ACR REGISTRY=$ACR_NAME.azurecr.io # Container name inside ACR where image will be stored REPO=net-monitor TAG=v1 IMAGE=$REGISTRY/${REPO}:$TAG # Source code directory containing Dockerfile to build IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main
سجّل الدخول باستخدام Azure CLI
az login
لمعرفة المزيد حول Azure CLI وكيفية تسجيل الدخول باستخدامه، راجع تسجيل الدخول باستخدام Azure CLI.
تعيين نهج الوصول في AKV (Azure CLI)
يلزم وجود أساس مستخدم مع أذونات نهج الوصول الصحيحة لإنشاء شهادة موقعة ذاتيا وتوقيع البيانات الاصطناعية. يمكن أن يكون هذا الأساسي هو كيان المستخدم أو كيان الخدمة أو الهوية المدارة. كحد أدنى، يحتاج هذا الأساسي إلى الأذونات التالية:
Create
أذونات الشهاداتGet
أذونات الشهاداتSign
أذونات المفاتيح
في هذا البرنامج التعليمي، يتم تعيين نهج الوصول إلى مستخدم Azure مسجل الدخول. لمعرفة المزيد حول تعيين نهج إلى أساس، راجع تعيين نهج الوصول.
تعيين الاشتراك الذي يحتوي على مورد AKV
az account set --subscription <your_subscription_id>
تعيين نهج الوصول في AKV
USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --certificate-permissions create get --key-permissions sign --object-id $USER_ID
هام
يوضح هذا المثال الحد الأدنى من الأذونات اللازمة لإنشاء شهادة وتوقيع صورة حاوية. اعتمادا على متطلباتك، قد تحتاج إلى منح أذونات إضافية.
إنشاء شهادة موقعة ذاتيا في AKV (Azure CLI)
توضح الخطوات التالية كيفية إنشاء شهادة موقعة ذاتيا لغرض الاختبار.
إنشاء ملف نهج الشهادة.
بمجرد تنفيذ ملف نهج الشهادة كما هو موضح أدناه، فإنه ينشئ شهادة صالحة متوافقة مع متطلبات شهادة Notary Project في AKV. قيمة
ekus
هي لتوقيع التعليمات البرمجية، ولكنها غير مطلوبة للتدوين لتوقيع البيانات الاصطناعية. يتم استخدام الموضوع لاحقا كهوية ثقة يثق بها المستخدم أثناء التحقق.cat <<EOF > ./my_policy.json { "issuerParameters": { "certificateTransparency": null, "name": "Self" }, "keyProperties": { "exportable": false, "keySize": 2048, "keyType": "RSA", "reuseKey": true }, "secretProperties": { "contentType": "application/x-pem-file" }, "x509CertificateProperties": { "ekus": [ "1.3.6.1.5.5.7.3.3" ], "keyUsage": [ "digitalSignature" ], "subject": "$CERT_SUBJECT", "validityInMonths": 12 } } EOF
إنشاء الشهادة.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
توقيع صورة حاوية باستخدام Notation CLI والمكون الإضافي AKV
المصادقة على ACR الخاص بك باستخدام هوية Azure الفردية الخاصة بك.
az acr login --name $ACR_NAME
هام
إذا كان لديك Docker مثبت على النظام الخاص بك وتستخدم az acr login
أو docker login
للمصادقة على ACR الخاص بك، يتم تخزين بيانات الاعتماد الخاصة بك بالفعل ومتاحة للتصنيب. في هذه الحالة، لا تحتاج إلى تشغيل notation login
مرة أخرى للمصادقة على ACR الخاص بك. لمعرفة المزيد حول خيارات المصادقة للنص، راجع المصادقة باستخدام السجلات المتوافقة مع OCI.
إنشاء صورة جديدة ودفعها باستخدام مهام ACR. استخدم دائما قيمة الملخص لتحديد الصورة للتوقيع نظرا لأن العلامات قابلة للتغيير ويمكن الكتابة فوقها.
DIGEST=$(az acr build -r $ACR_NAME -t $REGISTRY/${REPO}:$TAG $IMAGE_SOURCE --no-logs --query "outputImages[0].digest" -o tsv) IMAGE=$REGISTRY/${REPO}@$DIGEST
في هذا البرنامج التعليمي، إذا تم إنشاء الصورة بالفعل وتخزينها في السجل، فإن العلامة تعمل كمعرف لتلك الصورة للراحة.
IMAGE=$REGISTRY/${REPO}:$TAG
احصل على معرف المفتاح لمفتاح التوقيع. يمكن أن تحتوي الشهادة في AKV على إصدارات متعددة، يحصل الأمر التالي على معرف المفتاح للإصدار الأخير.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
قم بتوقيع صورة الحاوية بتنسيق توقيع COSE باستخدام معرف مفتاح التوقيع. لتسجيل الدخول باستخدام شهادة موقعة ذاتيا، تحتاج إلى تعيين قيمة
self_signed=true
تكوين المكون الإضافي .notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
للمصادقة باستخدام AKV، بشكل افتراضي، ستتم تجربة أنواع بيانات الاعتماد التالية إذا تم تمكينها بالترتيب:
- بيانات اعتماد البيئة
- بيانات اعتماد هوية حمل العمل
- بيانات اعتماد الهوية المدارة
- بيانات اعتماد Azure CLI
إذا كنت تريد تحديد نوع بيانات اعتماد، فاستخدم تكوين مكون إضافي يسمى
credential_type
. على سبيل المثال، يمكنك التعيينcredential_type
صراحة إلىazurecli
لاستخدام بيانات اعتماد Azure CLI، كما هو موضح أدناه:notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true --plugin-config credential_type=azurecli $IMAGE
راجع الجدول أدناه للحصول على قيم
credential_type
أنواع بيانات الاعتماد المختلفة.نوع بيانات الاعتماد قيمة ل credential_type
بيانات اعتماد البيئة environment
بيانات اعتماد هوية حمل العمل workloadid
بيانات اعتماد الهوية المدارة managedid
بيانات اعتماد Azure CLI azurecli
عرض الرسم البياني للصور الموقعة والتوقيعات المقترنة.
notation ls $IMAGE
التحقق من صورة حاوية باستخدام Notation CLI
للتحقق من صورة الحاوية، أضف الشهادة الجذر التي توقع الشهادة الطرفية إلى مخزن الثقة وأنشئ نهج الثقة للتحقق. بالنسبة للشهادة الموقعة ذاتيا المستخدمة في هذا البرنامج التعليمي، فإن الشهادة الجذر هي الشهادة الموقعة ذاتيا نفسها.
قم بتنزيل الشهادة العامة.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
أضف الشهادة العامة التي تم تنزيلها إلى مخزن الثقة المسمى للتحقق من التوقيع.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
سرد الشهادة للتأكيد.
notation cert ls
تكوين نهج الثقة قبل التحقق.
تسمح نهج الثقة للمستخدمين بتحديد نهج التحقق الدقيقة. يقوم المثال التالي بتكوين نهج ثقة يسمى
wabbit-networks-images
، والذي ينطبق على جميع البيانات الاصطناعية في$REGISTRY/$REPO
ويستخدم مخزن$STORE_NAME
الثقة المسمى من النوع$STORE_TYPE
. كما يفترض أن المستخدم يثق بهوية معينة مع موضوع$CERT_SUBJECT
X.509 . لمزيد من التفاصيل، راجع مخزن الثقة ومواصفات نهج الثقة.cat <<EOF > ./trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "wabbit-networks-images", "registryScopes": [ "$REGISTRY/$REPO" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "$STORE_TYPE:$STORE_NAME" ], "trustedIdentities": [ "x509.subject: $CERT_SUBJECT" ] } ] } EOF
استخدم
notation policy
لاستيراد تكوين نهج الثقة من ملف JSON الذي أنشأناه مسبقا.notation policy import ./trustpolicy.json notation policy show
استخدم
notation verify
للتحقق من عدم تغيير صورة الحاوية منذ وقت الإنشاء.notation verify $IMAGE
عند التحقق الناجح من الصورة باستخدام نهج الثقة، يتم إرجاع ملخص sha256 للصورة التي تم التحقق منها في رسالة إخراج ناجحة.
الخطوات التالية
راجع استخدام تكامل الصور للتحقق من صحة الصور الموقعة قبل نشرها في مجموعات Azure Kubernetes Service (AKS) (معاينة) والتصديق على Azure للبدء في التحقق من الصور الموقعة وتدقيقها قبل نشرها على AKS.