تقييد الوصول إلى سجل حاوية باستخدام نقطة نهاية خدمة شبكة Azure الظاهرية

توفرشبكة Azure الظاهرية شبكة اتصال آمنة وخاصة لموارد Azure والموارد المحلية. تتيح لكنقطة نهاية الخدمةتأمين عنوان IP العام لسجل الحاويات الخاص بك إلى الشبكة الظاهرية فقط. تعطي نقطة النهاية هذه حركة المرور المسار الأمثل إلى المورد عبر شبكة العمود الفقري Azure. كما يتم إرسال هويات الشبكة الظاهرية والشبكة الفرعية مع كل طلب.

توضح هذه المقالة كيفية تكوين نقطة نهاية خدمة تسجيل حاوية (معاينة) في شبكة ظاهرية.

يدعم كل سجل بحد أقصى 100 قاعدة شبكة ظاهرية.

هام

يدعم Azure Container Registry الآن Azure Private Linkمما يُمكِّن نقاط النهاية الخاصة من شبكة ظاهرية أن يتم وضعها على السجل. يمكن الوصول إلى نقاط النهاية الخاصة من داخل الشبكة الظاهرية باستخدام عناوين IP خاصة. نوصي باستخدام نقاط النهاية الخاصة بدلا من نقاط نهاية الخدمة في معظم سيناريوهات الشبكة. لا يدعم سجل الحاوية تمكين كل من الارتباط الخاص وميزات نقطة نهاية الخدمة المكونة من شبكة افتراضية. لذلك، نوصي بتشغيل القائمة وإزالة قواعد الشبكة كما هو مطلوب.

تكوين نقطة نهاية السجل متوفر في مستوى خدمة سجل حاويةPremium. للحصول على معلومات حول مستويات وحدود خدمة السجل، راجع طبقات خدمة سجل حاوية Azure .

قيود المعاينة

  • التطوير المستقبلي لنقاط نهاية الخدمة لـAzure Container Registry غير مخطط له حاليا. نوصي باستخدام نقاط النهاية الخاصة بدلا من ذلك.
  • لا يمكنك استخدام مدخل Azure لتكوين نقاط نهاية الخدمة على السجل.
  • يمكن استخدام كتلة خدمة Azure Kubernetes أوجهاز Azure الظاهري كمضيف للوصول إلى تسجيل حاوية باستخدام نقطة نهاية خدمة. خدمات Azure الأخرى بما في ذلك مثيلات حاويات Azure غير مدعومة.
  • لا يتم دعم نقاط نهاية الخدمة ل Azure Container Registry في سحابة Azure US Government أو Microsoft Azure التي تديرها سحابة 21Vianet.

هام

قد تكون بعض الوظائف غير متوفرة أو تتطلب مزيداً من التكوين في سجل الحاوية الذي يقيد الوصول إلى نقاط النهاية الخاصة أو الشبكات الفرعية المحددة أو عناوين IP.

  • عندما يتم تعطيل وصول الشبكة العامة إلى السجل، فإن الوصول إلى السجل عن طريق بعض الخدمات الموثوقة بما في ذلك مركز أمان Azure يتطلب تمكين إعداد الشبكة لتجاوز قواعد الشبكة.
  • بمجرد تعطيل الوصول إلى الشبكة العامة، لا تتمكن مثيلات بعض خدمات Azure بما في ذلك خدمات Azure DevOps حاليا من الوصول إلى سجل الحاوية.
  • نقاط النهاية الخاصة غير مدعومة حاليا مع عوامل Azure DevOps المدارة. ستحتاج إلى استخدام عامل مستضاف ذاتيا مع خط رؤية الشبكة إلى نقطة النهاية الخاصة.
  • إذا كان السجل يحتوي على نقطة نهاية خاصة معتمدة، وتم تعطيل الوصول إلى الشبكة العامة، فلا يمكن إدراج المستودعات والعلامات خارج الشبكة الظاهرية باستخدام مدخل Azure أو واجهة سطر الأوامر في Azure أو أدوات أخرى.

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

  • لاستخدام خطوات Azure CLI في هذه المقالة، مطلوب إصدار Azure CLI 2.0.58 أو إصدار أحدث. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

  • إذا لم يكن لديك سجل حاوية بالفعل، أنشئ واحدًا (مستوى Premium مطلوب) ثم اضغط على عينة صورة مثل hello-world من Docker Hub. على سبيل المثال، استخدم مدخل Microsoft Azure أو Azure CLI لإنشاء سجل.

  • إذا كنت تريد تقييد الوصول إلى السجل باستخدام نقطة نهاية خدمة في اشتراك Azure مختلف سجل موفر الموارد لـAzure Container Registry في هذا الاشتراك. على سبيل المثال:

    az account set --subscription <Name or ID of subscription of virtual network>
    
    az provider register --namespace Microsoft.ContainerRegistry
    

أنشئ جهازًا ظاهريًا ممكّنًا من Docker

لأغراض الاختبار، استخدم جهاز Ubuntu ظاهري ممكن من Docker للوصول إلى سجل حاوية Azure. لاستخدام مصادقة Microsoft Entra إلى السجل، قم أيضا بتثبيت Azure CLI على الجهاز الظاهري. في حال كان لديك جهاز ظاهري على Azure بالفعل، تخطي خطوة الإنشاء هذه.

بإمكانك استخدام نفس مجموعة الموارد للجهاز الظاهري وسجل الحاوية. يبسط هذا الإعداد عملية التنظيف في النهاية، لكنه غير مطلوب. إذا اخترت إنشاء مجموعة موارد منفصلة للجهاز الظاهري والشبكة الظاهرية، فشغل az group create. يفترض المثال التالي أنك قد عينت متغيرات البيئة لاسم مجموعة الموارد وموقع السجل:

az group create --name $RESOURCE_GROUP --location $REGISTRY_LOCATION

الآن انشر جهاز Ubuntu Azure الظاهري باستخدام az vm create. ينشئ المثال التالي جهازاً افتراضياً يسمى ⁧⁩myDockerVM⁧⁩.

VM_NAME=myDockerVM

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

يستغرق إنشاء الجهاز الظاهري بضع دقائق. عند اكتمال الأمر، لاحظ publicIpAddress المعروض بواسطة Azure CLI. استخدم هذا العنوان لإجراء اتصالات SSH بالجهاز الظاهري.

قم بتثبيت Docker على VM

بعد تشغيل الجهاز الظاهري، قم بإجراء اتصال SSH بالجهاز الظاهري. استبدل publicIpAddress بعنوان IP العام لجهاز الجهاز الظاهري.

ssh azureuser@publicIpAddress

شغل الأوامر التالية لتثبيت Docker على الجهاز الظاهري Ubuntu:

sudo apt-get update
sudo apt install docker.io -y

بعد التثبيت، قم بتشغيل الأمر التالي للتحقق من أن Docker يعمل بشكل صحيح على الجهاز الظاهري:

sudo docker run -it hello-world

إخراج:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

تثبيت Azure CLI

اتبع الخطوات الواردة في تثبيت Azure CLI باستخدام apt لتثبيت Azure CLI على جهاز Ubuntu الظاهري. على سبيل المثال:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

أنهِ اتصال SSH.

تكوين الوصول إلى شبكة الاتصال للسجل

في هذا المقطع، قم بتكوين سجل الحاوية الخاص بك ليتيح لك الوصول من شبكة فرعية في شبكة Azure الظاهرية. يتم توفير الخطوات باستخدام "Azure CLI ".

إضافة نقطة نهاية خدمة إلى شبكة فرعية

عند إنشاء جهاز ظاهري (VM)، يقوم Azure بشكل افتراضي بإنشاء شبكة ظاهرية في نفس مجموعة الموارد. يستند اسم الشبكة الظاهرية إلى اسم الجهاز الظاهري. على سبيل المثال، إذا قمت بتسمية الجهاز الظاهري الخاص بكmyDockerVM، اسم الشبكة الظاهري الافتراضي هو myDockerVMVNET، مع شبكة فرعية تسمى myDockerVMSubnet. تحقق من ذلك باستخدام الأمر az network vnet list :

az network vnet list \
  --resource-group myResourceGroup \
  --query "[].{Name: name, Subnet: subnets[0].name}"

إخراج:

[
  {
    "Name": "myDockerVMVNET",
    "Subnet": "myDockerVMSubnet"
  }
]

استخدم الأمر تحديث الشبكة الفرعية لشبكة az network vnet لإضافة نقطة نهاية خدمة Microsoft.ContainerRegistryإلى الشبكة الفرعية. استبدال أسماء الشبكة الظاهرية الخاصة بك والشبكة الفرعية في الأمر التالي:

az network vnet subnet update \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --service-endpoints Microsoft.ContainerRegistry

استخدم الأمر عرض الشبكة الفرعية لشبكة az network vnetلاسترداد معرّف المورد للشبكة الفرعية. تحتاج إلى ذلك في خطوة لاحقة لتكوين قاعدة الوصول إلى شبكة الاتصال.

az network vnet subnet show \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --query "id"
  --output tsv

إخراج:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

تغيير الوصول الافتراضي للشبكة إلى السجل

بشكل افتراضي، يسمح سجل حاوية Azure بالاتصالات من المضيفين على أي شبكة. للحد من الوصول إلى شبكة محددة، غيّر أولاً الإجراء الافتراضي لرفض الوصول. استبدل اسم سجلك في الأمر التالي az acr update:

az acr update --name myContainerRegistry --default-action Deny

إضافة قاعدة شبكة الاتصال إلى السجل

استخدم أمر az acr network-rule add لإضافة قاعدة شبكة إلى سجلك تسمح بالوصول من الشبكة الفرعية الجهاز الظاهري VM. استبدال اسم سجل الحاوية و معرّف المورد للشبكة الفرعية في الأمر التالي:

az acr network-rule add \
  --name mycontainerregistry \
  --subnet <subnet-resource-id>

التحقق من الوصول إلى السجل

بعد انتظار بضع دقائق للتكوين لتحديث، تحقق من أن الجهاز الظاهري يمكنه الوصول إلى سجل الحاوية. قم بإجراء اتصال SSH بجهازك الظاهري، وقم بتشغيل الأمر az acr login لتسجيل الدخول إلى السجل الخاص بك.

az acr login --name mycontainerregistry

قم بإجراء عمليات السجل مثل تشغيل docker pull لسحب عينة صورة من السجل. استبدل صورة وقيمة العلامة المناسبة للسجلك، مسبوقة باسم خادم تسجيل الدخول إلى السجل (كلها بأحرف صغيرة):

docker pull mycontainerregistry.azurecr.io/hello-world:v1

يسحب Docker الصورة إلى الجهاز الظاهري بنجاح.

يوضح هذا المثال أنه يمكنك الوصول إلى سجل الحاوية الخاص من خلال قاعدة الوصول إلى الشبكة. ومع ذلك، لا يمكن الوصول إلى السجل من مضيف تسجيل الدخول الذي لا يحتوي على قاعدة وصول مهيأة إلى شبكة. إذا حاولت تسجيل الدخول من مضيف آخر باستخدام az acr login الأمر أو docker loginالأمر، يكون الإخراج شبيه لما يلي:

Error response from daemon: login attempt to https://xxxxxxx.azurecr.io/v2/ failed with status: 403 Forbidden

استعادة الوصول الافتراضي للسجل

لاستعادة السجل للسماح بالوصول بشكل افتراضي، قم بإزالة أي قواعد شبكة تم تكوينها. ثم قم بتعيين الإجراء الافتراضي للسماح بالوصول.

إزالة قواعد الشبكة

للاطلاع على قائمة قواعد الشبكة المكوّنة لسجلك، قم بتشغيل الأمر التاليaz acre network -rule list:

az acr network-rule list --name mycontainerregistry 

لكل قاعدة تم تكوينها، قم بتشغيل الأمر az acr network-rule removeلإزالتها. على سبيل المثال:

# Remove a rule that allows access for a subnet. Substitute the subnet resource ID.

az acr network-rule remove \
  --name mycontainerregistry \
  --subnet /subscriptions/ \
  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

السماح بالوصول

استبدل اسم سجلك في الأمر التالي az acr update:

az acr update --name myContainerRegistry --default-action Allow

تنظيف الموارد

إذا قمت بإنشاء جميع موارد Azure في نفس مجموعة الموارد ولم تعد بحاجة إليها، فيمكنك حذف الموارد اختياريًا باستخدام أمر واحد az group delete:

az group delete --name myResourceGroup

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