تشفير بيانات التوزيع
عند تشغيل موارد Azure Container Instances (ACI) في السحابة، تجمع خدمة ACI البيانات المتعلقة بالحاويات الخاصة بك وتستمر في ذلك. تقوم ACI تلقائيا بتشفير هذه البيانات عندما تستمر في السحابة. يحمي هذا التشفير بياناتك للمساعدة في تلبية التزامات الأمان والامتثال لمؤسستك. يمنحك ACI أيضاً خيار تشفير هذه البيانات بمفتاحك الخاص، ما يمنحك تحكماً أكبر في البيانات المتعلقة بعمليات توزيع ACI.
تشفير بيانات ACI
يتم تشفير البيانات الموجودة في ACI وفك تشفيرها باستخدام تشفير 256 بت AES. يتم تمكينه لجميع عمليات نشر ACI، ولا تحتاج إلى تعديل التوزيع أو الحاويات للاستفادة من هذا التشفير. تتضمن هذه التغطية بيانات تعريف حول النشر ومتغيرات البيئة والمفاتيح التي يتم تمريرها إلى الحاويات الخاصة بك والسجلات المستمرة بعد إيقاف الحاويات الخاصة بك حتى تتمكن من رؤيتها. لا يؤثر التشفير على أداء مجموعة الحاويات، ولا توجد تكلفة إضافية للتشفير.
يمكنك الاعتماد على المفاتيح التي تديرها Microsoft لتشفير بيانات الحاوية الخاصة بك، أو يمكنك إدارة التشفير باستخدام المفاتيح الخاصة بك. يقارن الجدول التالي بين هذه الخيارات:
مفاتيح تديرها Microsoft | المفاتيح التي يديرها العميل | |
---|---|---|
Encryption/decryption operations | Azure | Azure |
Key storage | مخزن مفاتيح Microsoft | Azure Key Vault |
Key rotation responsibility | Microsoft | العميل |
Key access | Microsoft فقط | Microsoft والعميل |
تستعرض هذه المقالة تدفقين لتشفير البيانات باستخدام مفتاح يديره العميل:
- تشفير البيانات باستخدام مفتاح مدار من قبل العميل مخزن في Azure Key Vault قياسي
- تشفير البيانات باستخدام مفتاح مدار من قبل العميل مخزن في Azure Key Vault محمي بالشبكة مع تمكين الخدمات الموثوق بها.
تشفير البيانات باستخدام مفتاح مدار من قبل العميل مخزن في Azure Key Vault قياسي
المتطلبات الأساسية
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع التشغيل السريع ل Bash في Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات أخرى لتسجيل دخول، راجع تسجيل الدخول باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات بشأن الامتدادات، راجع استخدام امتدادات مع Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
إنشاء مبدأ الخدمة لـ ACI
تتمثل الخطوة الأولى في التأكد من أن Azure tenant لديه مدير خدمة معين لمنح الأذونات لخدمة مثيلات Azure Container.
هام
من أجل تشغيل الأمر التالي وإنشاء مدير خدمة بنجاح، تأكد من أن لديك أذونات لإنشاء أساسيات الخدمة في المستأجر الخاص بك.
يقوم أمر CLI التالي بإعداد ACI SP في بيئة Azure الخاصة بك:
az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
يجب أن يظهر لك الإخراج من تشغيل هذا الأمر كيان خدمة تم إعداده باستخدام "displayName": "Azure Container Instance Service".
في حالة عدم القدرة على إنشاء كيان الخدمة بنجاح:
- تأكد من أن لديك أذونات للقيام بذلك في المستأجر الخاص بك
- تحقق لمعرفة ما إذا كان مدير الخدمة موجوداً بالفعل في المستأجر الخاص بك للتوزيع إلى ACI. يمكنك القيام بذلك عن طريق تشغيل
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
واستخدام كيان الخدمة هذا بدلاً من ذلك
قم بإنشاء مورد Key Vault
إنشاء Azure Key Vault باستخدام مدخل Microsoft Azure، Azure CLI، أو Azure PowerShell.
بالنسبة لخصائص خزينتك الرئيسية، استخدم الإرشادات التالية:
- الاسم: A مطلوب اسم فريد.
- Subscription: اختر اشتراكاً.
- ضمن مجموعة الموارد، إما أن تختار مجموعة موارد موجودة، أو أنشئ مجموعة موارد جديدة، وأدخل اسم مجموعة موارد.
- في القائمة المنسدلة Location، اختر موقعاً.
- يمكنك ترك الخيارات الأخرى لقيمتها الافتراضية أو الاختيار بناءً على المتطلبات الإضافية.
هام
عند استخدام المفاتيح المُدارة بواسطة العميل لتشفير قالب توزيع ACI، يوصى بتعيين الخاصيتين التاليتين في خزنة المفاتيح، الحذف الناعم وعدم التطهير. لا يتم تمكين هذه الخصائص افتراضيّاً، ولكن يمكن تمكينها باستخدام PowerShell أو Azure CLI في مخزن مفاتيح جديد أو موجود.
قم بإنشاء مفتاح جديد
بمخزون إنشاء مخزن المفاتيح، انتقل إلى المورد في مدخل Microsoft Azure. في قائمة التنقل اليسرى لجزء المورد، ضمن Settings، حدد Keys. في طريقة عرض "Keys"، حدد "Generate/Import" لإنشاء مفتاح جديد. استخدم أي اسم فريد لهذا المفتاح، وأي تفضيلات أخرى بناءً على متطلباتك.
تعيين نُهج الوصول
قم بإنشاء نُهج وصول جديدة للسماح لخدمة ACI بالوصول إلى مفتاحك.
- بمجرد إنشاء مفتاحك، مرة أخرى في شفرة مورد مخزن المفاتيح، ضمن Settings، حدد Access Policies.
- في صفحة "نهج الوصول" لمخزن المفاتيح، اختر إضافة نهج الوصول.
- تعيين أذونات المفتاح لتضمين Get و Unwrap Key
- بالنسبة إلى Select Principal حدد Azure Container Instance Service
- حدد إضافة في الأسفل
يجب أن تظهر نُهج الوصول الآن في نُهج الوصول الخاصة بخزينة المفاتيح.
قم بتعديل قالب توزيع JSON الخاص بك
هام
يتوفر تشفير بيانات التوزيع باستخدام مفتاح يديره العميل في أحدث إصدار من واجهة برمجة التطبيقات (2019-12-01) والذي يتم طرحه حالياً. حدد إصدار API هذا في قالب التوزيع الخاص بك. إذا كانت لديك أي مشكلات تتعلق بهذا الأمر، فيرجى التواصل مع دعم Azure.
بمخزون إعداد مفتاح خزنة المفاتيح ونُهج الوصول، أضف الخصائص التالية إلى قالب توزيع ACI. تعرف على المزيد حول توزيع موارد ACI باستخدام قالب في برنامج تعليمي: قم بتوزيع مجموعة متعددة الحاويات باستخدام قالب Azure Resource Manager.
- ضمن
resources
, قم بتعيينapiVersion
إلى2019-12-01
. - ضمن قسم خصائص مجموعة الحاوية في قالب النشر، أضف
encryptionProperties
، الذي يحتوي على القيم التالية:vaultBaseUrl
: اسم DNS لمخزن المفاتيح الخاص بك، والذي يمكن العثور عليه في شفرة النظرة العامة لمورد مخزن المفاتيح في المدخلkeyName
: اسم المفتاح الذي تم إنشاؤه سابقاًkeyVersion
: الإصدار الحالي من المفتاح. يمكن العثور على هذا الحقل عن طريق الانتقال إلى المفتاح نفسه (ضمن "المفاتيح" في قسم الإعدادات في مورد مخزن المفاتيح الخاص بك)
- ضمن خصائص مجموعة الحاوية، أضف خاصية
sku
property بالقيمةStandard
. الخاصيةsku
مطلوبة في إصدار API 2019-12-01.
يعرض مقتطف القالب التالي هذه الخصائص الإضافية لتشفير بيانات التوزيع:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
فيما يلي نموذج كامل، مقتبس من القالب الموجود في برنامج تعليمي: توزيع مجموعة متعددة الحاويات باستخدام قالب Azure Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
توزيع مواردك
إذا أنشأت ملف النموذج وعدّلته على سطح المكتب، فيمكنك تحميله إلى دليل Cloud Shell عن طريق سحب الملف إليه.
أنشئ مجموعة موارد باستخدام الأمر az group create.
az group create --name myResourceGroup --location eastus
قم بنشر القالب باستخدام الأمر az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
في غضون ثوانٍ قليلة، من المفترض أن تتلقى استجابة أولية من Azure. بمجرد اكتمال النشر، يتم تشفير جميع البيانات المتعلقة به التي تستمر بها خدمة ACI بالمفتاح الذي قدمته.
تشفير البيانات باستخدام مفتاح مدار من قبل العميل في Azure Key Vault محمي بالشبكة مع تمكين الخدمات الموثوق بها
قم بإنشاء مورد Key Vault
إنشاء Azure Key Vault باستخدام مدخل Microsoft Azure، Azure CLI، أو Azure PowerShell. للبدء، لا تطبق أي قيود على الشبكة حتى نتمكن من إضافة المفاتيح الضرورية إلى المخزن. في الخطوات اللاحقة، نضيف قيود الشبكة ونمكن الخدمات الموثوق بها.
بالنسبة لخصائص خزينتك الرئيسية، استخدم الإرشادات التالية:
- الاسم: A مطلوب اسم فريد.
- Subscription: اختر اشتراكاً.
- ضمن مجموعة الموارد، إما أن تختار مجموعة موارد موجودة، أو أنشئ مجموعة موارد جديدة، وأدخل اسم مجموعة موارد.
- في القائمة المنسدلة Location، اختر موقعاً.
- يمكنك ترك الخيارات الأخرى لقيمتها الافتراضية أو الاختيار بناءً على المتطلبات الإضافية.
هام
عند استخدام المفاتيح المُدارة بواسطة العميل لتشفير قالب توزيع ACI، يوصى بتعيين الخاصيتين التاليتين في خزنة المفاتيح، الحذف الناعم وعدم التطهير. لا يتم تمكين هذه الخصائص افتراضيّاً، ولكن يمكن تمكينها باستخدام PowerShell أو Azure CLI في مخزن مفاتيح جديد أو موجود.
قم بإنشاء مفتاح جديد
بمخزون إنشاء مخزن المفاتيح، انتقل إلى المورد في مدخل Microsoft Azure. في قائمة التنقل اليسرى لجزء المورد، ضمن Settings، حدد Keys. في طريقة عرض "المفاتيح"، اختر "إنشاء/استيراد" لإنشاء مفتاح جديد. استخدم أي اسم فريد لهذا المفتاح، وأي تفضيلات أخرى بناءً على متطلباتك. تأكد من التقاط اسم المفتاح وإصداره للخطوات اللاحقة.
إنشاء هوية مدارة معينة من قبل المستخدم لمجموعة الحاويات الخاصة بك
قم بإنشاء هوية في اشتراكك باستخدام الأمر إنشاء هوية من الألف إلى الياء. من الممكن استخدام نفس مجموعة الموارد المستخدمة لإنشاء مخزن رئيسي، أو استخدام مجموعة أخرى.
az identity create \
--resource-group myResourceGroup \
--name myACIId
لاستخدام الهوية في الخطوات التالية، استخدم الأمر az identity show لتخزين معرف كيان خدمة الهوية ومعرف المورد في المتغيرات.
# Get service principal ID of the user-assigned identity
spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
تعيين نُهج الوصول
إنشاء نهج وصول جديد للسماح للهوية المعينة من قبل المستخدم بالوصول إلى مفتاحك وفكه لأغراض التشفير.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
تعديل أذونات شبكة Azure Key Vault
إعداد الأوامر التالية جدار حماية Azure ل Azure Key Vault الخاص بك والسماح لخدمات Azure الموثوق بها مثل الوصول إلى ACI.
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--default-action Deny
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--bypass AzureServices
قم بتعديل قالب توزيع JSON الخاص بك
هام
يتوفر تشفير بيانات النشر باستخدام مفتاح مدار من قبل العميل في إصدار واجهة برمجة التطبيقات 2022-09-01 أو أحدث. يتوفر إصدار واجهة برمجة التطبيقات 2022-09-01 فقط عبر ARM أو REST. إذا كانت لديك أي مشكلات تتعلق بهذا الأمر، فيرجى التواصل مع دعم Azure. بمخزون إعداد مفتاح خزنة المفاتيح ونُهج الوصول، أضف الخصائص التالية إلى قالب توزيع ACI. تعرف على المزيد حول توزيع موارد ACI باستخدام قالب في برنامج تعليمي: قم بتوزيع مجموعة متعددة الحاويات باستخدام قالب Azure Resource Manager.
- ضمن
resources
, قم بتعيينapiVersion
إلى2022-09-01
. - ضمن قسم خصائص مجموعة الحاوية في قالب النشر، أضف
encryptionProperties
، الذي يحتوي على القيم التالية:vaultBaseUrl
: اسم DNS لمخزن المفاتيح الخاص بك. يمكن العثور على هذه الخاصية على شفرة النظرة العامة لمورد مخزن المفاتيح في المدخلkeyName
: اسم المفتاح الذي تم إنشاؤه سابقاًkeyVersion
: الإصدار الحالي من المفتاح. يمكن العثور على هذه الخاصية بالنقر فوق المفتاح نفسه (ضمن "المفاتيح" في قسم الإعدادات في مورد مخزن المفاتيح الخاص بك)identity
: هذه الخاصية هي URI للمورد لمثيل الهوية المدارة الذي تم إنشاؤه مسبقا
- ضمن خصائص مجموعة الحاوية، أضف خاصية
sku
property بالقيمةStandard
. الخاصيةsku
مطلوبة في إصدار واجهة برمجة التطبيقات 2022-09-01. - ضمن الموارد، أضف
identity
الكائن المطلوب لاستخدام الهوية المدارة مع ACI، والذي يحتوي على القيم التالية:type
: نوع الهوية المستخدمة (إما المعينة من قبل المستخدم أو المعينة من قبل النظام). تم تعيين هذه الحالة إلى "UserAssigned"userAssignedIdentities
: resourceURI لنفس الهوية المعينة من قبل المستخدم المستخدمة فيencryptionProperties
الكائن.
يعرض مقتطف القالب التالي هذه الخصائص الإضافية لتشفير بيانات التوزيع:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
فيما يلي نموذج كامل، مقتبس من القالب الموجود في برنامج تعليمي: توزيع مجموعة متعددة الحاويات باستخدام قالب Azure Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2022-09-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
توزيع مواردك
إذا أنشأت ملف النموذج وعدّلته على سطح المكتب، فيمكنك تحميله إلى دليل Cloud Shell عن طريق سحب الملف إليه.
أنشئ مجموعة موارد باستخدام الأمر az group create.
az group create --name myResourceGroup --location eastus
قم بنشر القالب باستخدام الأمر az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
في غضون ثوانٍ قليلة، من المفترض أن تتلقى استجابة أولية من Azure. بمجرد اكتمال النشر، يتم تشفير جميع البيانات المتعلقة به التي تستمر بها خدمة ACI بالمفتاح الذي قدمته.