خدمة بيانات التعريف لمثيل Azure

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ أجهزة Windows الظاهرية ✔️ مجموعات مقياس مرنة

توفر Azure Instance Metadata Service (IMDS) البيانات حول مثيلات الجهاز الظاهري قيد التشغيل الآن. يمكنك استخدامها لإدارة أجهزتك الظاهرية وتكوينها. تتضمن هذه المعلومات رمز SKU والتخزين وتكوينات الشبكة وأحداث الصيانة القادمة. للحصول على قائمة كاملة بالبيانات المتوفرة، راجع ملخص فئات نقاط النهاية.

يتوفر IMDS لتشغيل مثيلات الأجهزة الظاهرية (VMs) ومثيلات مجموعة التحجيم. تدعم جميع نقاط النهاية الأجهزة الظاهرية التي تم إنشاؤها وإدارتها باستخدام Azure Resource Manager. تدعم الفئة المصدقة وجزء الشبكة من فئة المثيل فقط الأجهزة الظاهرية التي تم إنشاؤها باستخدام نموذج التوزيع الكلاسيكي. نقطة النهاية الموثقة تفعل ذلك فقط بمقدار محدود.

IMDS عبارة عن واجهة برمجة تطبيقات REST متوفرة على عنوان IP معروف وغير قابل للتوجيه (169.254.169.254). لا يمكنك الوصول إليه إلا من داخل الجهاز الظاهري. الاتصال بين الجهاز الظاهري وIMDS لا يغادر المضيف أبدًا. اطلب من عملاء HTTP تجاوز وكلاء الويب داخل الجهاز الظاهري عند الاستعلام عن IMDS، والتعامل مع 169.254.169.254 بنفس طريقة التعامل مع 168.63.129.16.

الاستخدام

الوصول إلى Azure Instance Metadata Service

للوصول إلى IMDS، بادر بإنشاء جهاز ظاهري من Azure Resource Manager أو مدخل Azure، واستخدم العينات التالية. لمزيد من الأمثلة، راجع عينات بيانات تعريف مثيل Azure.

إليك نموذج التعليمات البرمجية لاسترداد جميع بيانات التعريف لمثيل. للوصول إلى مصدر بيانات معين، راجع فئات نقاط النهاية للحصول على نظرة عامة على جميع الميزات المتوفرة.

Request

هام

يتجاوز هذا المثال Proxies. يجب عليك تجاوز Proxies عند الاستعلام عن IMDS. راجع الوكلاء للحصول على معلومات إضافية.

إشعار

يجب إرسال طلبات IMDS باستخدام NIC الأساسي للجهاز الظاهري وIP الأساسي، ويجب تمكين DHCP.

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" | ConvertTo-Json -Depth 64

-NoProxy يتطلب توفر PowerShell V6 أو أعلى. راجع مستودع العينات الذي نقدمه للحصول على أمثلة مع إصدارات PowerShell الأقدم.

Response

إشعار

الاستجابة عبارة عن سلسلة JSON. استجابة المثال التالي مطبوعة بشكل جميل لسهولة القراءة.

{
    "compute": {
        "azEnvironment": "AZUREPUBLICCLOUD",
        "additionalCapabilities": {
            "hibernationEnabled": "true"
        },
        "hostGroup": {
          "id": "testHostGroupId"
        }, 
        "extendedLocation": {
            "type": "edgeZone",
            "name": "microsoftlosangeles"
        },
        "evictionPolicy": "",
        "isHostCompatibilityLayerVm": "true",
        "licenseType":  "Windows_Client",
        "location": "westus",
        "name": "examplevmname",
        "offer": "WindowsServer",
        "osProfile": {
            "adminUsername": "admin",
            "computerName": "examplevmname",
            "disablePasswordAuthentication": "true"
        },
        "osType": "Windows",
        "placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
        "plan": {
            "name": "planName",
            "product": "planProduct",
            "publisher": "planPublisher"
        },
        "platformFaultDomain": "36",
        "platformSubFaultDomain": "",        
        "platformUpdateDomain": "42",
        "priority": "Regular",
        "publicKeys": [{
                "keyData": "ssh-rsa 0",
                "path": "/home/user/.ssh/authorized_keys0"
            },
            {
                "keyData": "ssh-rsa 1",
                "path": "/home/user/.ssh/authorized_keys1"
            }
        ],
        "publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
        "resourceGroupName": "macikgo-test-may-23",
        "resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
        "securityProfile": {
            "secureBootEnabled": "true",
            "virtualTpmEnabled": "false",
            "encryptionAtHost": "true",
            "securityType": "TrustedLaunch"
        },
        "sku": "2019-Datacenter",
        "storageProfile": {
            "dataDisks": [{
                "bytesPerSecondThrottle": "979202048",
                "caching": "None",
                "createOption": "Empty",
                "diskCapacityBytes": "274877906944",
                "diskSizeGB": "1024",
                "image": {
                  "uri": ""
                },
                "isSharedDisk": "false",
                "isUltraDisk": "true",
                "lun": "0",
                "managedDisk": {
                  "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
                  "storageAccountType": "StandardSSD_LRS"
                },
                "name": "exampledatadiskname",
                "opsPerSecondThrottle": "65280",
                "vhd": {
                  "uri": ""
                },
                "writeAcceleratorEnabled": "false"
            }],
            "imageReference": {
                "id": "",
                "offer": "WindowsServer",
                "publisher": "MicrosoftWindowsServer",
                "sku": "2019-Datacenter",
                "version": "latest",
                "communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
                "sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
                "exactVersion": "1.1686127202.30113"
            },
            "osDisk": {
                "caching": "ReadWrite",
                "createOption": "FromImage",
                "diskSizeGB": "30",
                "diffDiskSettings": {
                    "option": "Local"
                },
                "encryptionSettings": {
                  "enabled": "false",
                  "diskEncryptionKey": {
                    "sourceVault": {
                      "id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                    },
                    "secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
                  },
                  "keyEncryptionKey": {
                    "sourceVault": {
                      "id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                    },
                    "keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
                  }
                },
                "image": {
                    "uri": ""
                },
                "managedDisk": {
                    "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
                    "storageAccountType": "StandardSSD_LRS"
                },
                "name": "exampleosdiskname",
                "osType": "Windows",
                "vhd": {
                    "uri": ""
                },
                "writeAcceleratorEnabled": "false"
            },
            "resourceDisk": {
                "size": "4096"
            }
        },
        "subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
        "tags": "baz:bash;foo:bar",
        "userData": "Zm9vYmFy",
        "version": "15.05.22",
        "virtualMachineScaleSet": {
            "id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
        },
        "vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
        "vmScaleSetName": "crpteste9vflji9",
        "vmSize": "Standard_A3",
        "zone": ""
    },
    "network": {
        "interface": [{
            "ipv4": {
               "ipAddress": [{
                    "privateIpAddress": "10.144.133.132",
                    "publicIpAddress": ""
                }],
                "subnet": [{
                    "address": "10.144.133.128",
                    "prefix": "26"
                }]
            },
            "ipv6": {
                "ipAddress": [
                 ]
            },
            "macAddress": "0011AAFFBB22"
        }]
    }
}

الأمان والمصادقة

لا يمكن الوصول إلى Instance Metadata Service إلا من داخل مثيل جهاز ظاهري قيد التشغيل على عنوان IP غير قابل للتوجيه. يمكن للأجهزة الظاهرية التفاعل فقط مع بيانات التعريف/الوظائف الخاصة بها. واجهة برمجة التطبيقات هي HTTP فقط ولا تغادر المضيف أبدًا.

لضمان أن تكون الطلبات موجهة مباشرة إلى IMDS ومنع إعادة توجيه الطلبات غير المقصودة أو غير المرغوب فيها، فإن الطلبات:

  • يجب أن تحتوي على الرأس Metadata: true
  • يجب ألا تحتوي على الرأس X-Forwarded-For

ترفض الخدمة أي طلب لا يفي بكلا هذين المتطلبين .

هام

IMDS ليست قناة للبيانات الحساسة. واجهة برمجة التطبيقات غير مصادق عليها ومفتوحة لجميع العمليات على الجهاز الظاهري. يجب اعتبار المعلومات التي يتم الكشف عنها من خلال هذه الخدمة بمثابة معلومات مشتركة لجميع التطبيقات التي تعمل داخل الجهاز الظاهري.

إذا لم يكن من الضروري لكل عملية على الجهاز الظاهري الوصول إلى نقطة نهاية IMDS، يمكنك تعيين قواعد جدار الحماية المحلية للحد من الوصول. على سبيل المثال، إذا كانت خدمة نظام معروفة فقط بحاجة إلى الوصول إلى instance metadata service، فيمكنك تعيين قاعدة جدار حماية على نقطة نهاية IMDS، مما يسمح فقط للعملية (العمليات) المحددة بالوصول، أو رفض الوصول لبقية العمليات.

وكلاء

IMDS غير مخصصة لأن يستخدمها وكيل، وتنفيذ هذا غير مدعوم. توفر معظم عملاء HTTP خيارًا لك لتعطيل الوكلاء بناءً على طلباتك، ويجب استخدام هذه الوظيفة عند الاتصال بـ IMDS. راجع وثائق العميل لديك للحصول على التفاصيل.

هام

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

تحديد السعر

بوجهٍ عامٍ، تقتصر طلبات خدمة IMDS على خمسة طلبات في الثانية (على أساس كل جهاز ظاهري). ستُرفض الطلبات التي تتجاوز هذا الحد مع 429 استجابةً. تقتصر الطلبات إلى فئة الهوية المدارة على 20 طلبا في الثانية و5 طلبات متزامنة (على أساس كل جهاز ظاهري).

أفعال HTTP

يتم حاليًا دعم أفعال HTTP التالية:

الفعل ‏‏الوصف
GET استرداد المورد المطلوب

المعلمات

قد تدعم نقاط النهاية المعلمات المطلوبة و/أو الاختيارية. راجع المخطط والوثائق الخاصة بنقطة النهاية المحددة المعنية للحصول على التفاصيل.

معلمات الاستعلام

تدعم نقاط نهاية IMDS معلمات سلسلة استعلام HTTP. على سبيل المثال:

http://169.254.169.254/metadata/instance/compute?api-version=2021-01-01&format=json

يحدد المعلمات:

الاسم القيمة‬
api-version 2021-01-01
format json

سيتم رفض الطلبات التي تحتوي على أسماء معلمات استعلام مكررة.

معلمات المسار

بالنسبة لبعض نقاط النهاية التي ترجع كائنات ثنائية كبيرة الحجم من json أكبر، ندعم إلحاق معلمات المسار بنقطة نهاية الطلب للتصفية وصولاً إلى مجموعة فرعية من الاستجابة:

http://169.254.169.254/metadata/<endpoint>/[<filter parameter>/...]?<query parameters>

تتوافق المعلمات مع الفهارس/المفاتيح التي قد يتم استخدامها لتوجيه كائن json إذا كنت تتفاعل مع تمثيل محلل.

على سبيل المثال، يتم من خلال /metadata/instance إرجاع كائن json:

{
    "compute": { ... },
    "network": {
        "interface": [
            {
                "ipv4": {
                   "ipAddress": [{
                        "privateIpAddress": "10.144.133.132",
                        "publicIpAddress": ""
                    }],
                    "subnet": [{
                        "address": "10.144.133.128",
                        "prefix": "26"
                    }]
                },
                "ipv6": {
                    "ipAddress": [
                     ]
                },
                "macAddress": "0011AAFFBB22"
            },
            ...
        ]
    }
}

إذا أردنا تصفية الاستجابة وصولاً إلى خاصية الحساب فقط، فسنرسل الطلب:

http://169.254.169.254/metadata/instance/compute?api-version=<version>

وبالمثل، إذا أردنا التصفية إلى خاصية متداخلة أو عنصر صفيف معين، نستمر في إلحاق المفاتيح:

http://169.254.169.254/metadata/instance/network/interface/0?api-version=<version>

ستتم التصفية إلى العنصر الأول من الخاصية Network.interface وإرجاع:

{
    "ipv4": {
       "ipAddress": [{
            "privateIpAddress": "10.144.133.132",
            "publicIpAddress": ""
        }],
        "subnet": [{
            "address": "10.144.133.128",
            "prefix": "26"
        }]
    },
    "ipv6": {
        "ipAddress": [
         ]
    },
    "macAddress": "0011AAFFBB22"
}

إشعار

عند التصفية إلى عقدة طرفية، فإن format=json لا يعمل. بالنسبة لهذه الاستعلامات يجب أن تحديد format=text بشكل صريح لأن التنسيق الافتراضي هو json.

مخطط

تنسيق البيانات

بشكل افتراضي، يتم من خلال IMDS إرجاع البيانات بتنسيق JSON (Content-Type: application/json). ومع ذلك، تدعم نقاط النهاية التي تدعم تصفية الاستجابة (راجع معلمات المسار) التنسيق text أيضًا.

للوصول إلى تنسيق استجابة غير افتراضي، حدد التنسيق المطلوب كمعلمة سلسلة استعلام في الطلب. على سبيل المثال:

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2017-08-01&format=text"

في استجابات json، ستكون جميع البدائيات من النوع string، ويتم دائمًا تضمين القيم المفقودة أو غير القابلة للتطبيق ولكن سيتم تعيينها إلى سلسلة فارغة.

تعيين الإصدار

يتم تعيين إصدار IMDS ويعتبر تحديد إصدار واجهة برمجة التطبيقات في طلب HTTP إلزاميًا. الاستثناء الوحيد لهذا المطلب هو نقطة نهاية الإصدارات، والتي يمكن استخدامها لاسترداد إصدارات واجهة برمجة التطبيقات المتوفرة ديناميكيًا.

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

في حالة عدم تحديد إصدار، تظهر لك رسالة خطأ تضم قائمة بأحدث الإصدارات المدعومة:

{
    "error": "Bad request. api-version was not specified in the request. For more information refer to aka.ms/azureimds",
    "newest-versions": [
        "2020-10-01",
        "2020-09-01",
        "2020-07-15"
    ]
}

إصدارات واجهة برمجة التطبيقات المعتمدة

إشعار

لا يزال الإصدار 2023-11-15 قيد التنفيذ، وقد لا يكون متوفرا في بعض المناطق.

  • 2023-11-15
  • 2023-07-01
  • 2021-12-13
  • 2021-11-15
  • 2021-11-01
  • 2021-10-01
  • 2021-08-01
  • 2021-05-01
  • 2021-03-01
  • 2021-02-01
  • 2021-01-01
  • 2020-12-01
  • 2020-10-01
  • 2020-09-01
  • 2020-07-15
  • 2020-06-01
  • 2019-11-01
  • 2019-08-15
  • 2019-08-01
  • 2019-06-04
  • 2019-06-01
  • 2019-04-30
  • 2019-03-11
  • 2019-02-01
  • 2018-10-01
  • 2018-04-02
  • 2018-02-01
  • 2017-12-01
  • 2017-10-01
  • 2017-08-01
  • 2017-04-02
  • 2017-03-01

Swagger

يتوفر تعريف Swagger الكامل لـ IMDS على: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

التوفر الإقليمي

تتوفر الخدمة بشكل عام في جميع سحب Azure.

نقطة نهاية الجذر

نقطة نهاية الجذر هي http://169.254.169.254/metadata.

فئات نقاط النهاية

تحتوي واجهة برمجة تطبيقات IMDS على فئات نقاط نهاية متعددة تمثل مصادر بيانات مختلفة، يحتوي كل منها على نقطة نهاية واحدة أو أكثر. راجع أي فئة للحصول على التفاصيل.

جذر الفئة ‏‏الوصف الإصدار المقدم
/metadata/attested راجع البيانات المصدقة 2018-10-01
/metadata/identity راجع الهوية المُدارة عبر IMDS 2018-02-01
/metadata/instance راجع بيانات تعريف المثيل 2017-04-02
/metadata/loadbalancer راجع استرداد بيانات تعريف موازن التحميل عبر IMDS 2020-10-01
/metadata/scheduledevents راجع الأحداث المجدولة عبر IMDS 2017-08-01
/metadata/versions راجع الإصدارات ‏‫غير متوفر‬

الإصدارات

قائمة بإصدارات واجهة برمجة التطبيقات

إرجاع مجموعة إصدارات واجهة برمجة التطبيقات المدعومة.

GET /metadata/versions

المعلمات

لا شيء (لم يتم تعيين إصدار نقطة النهاية هذه).

استجابة

{
  "apiVersions": [
    "2017-03-01",
    "2017-04-02",
    ...
  ]
}

بيانات تعريف المثيل

الحصول على بيانات تعريف الجهاز الظاهري

يعرض بيانات التعريف المهمة لمثيل الجهاز الظاهري، بما في ذلك الحوسبة والشبكة والتخزين.

GET /metadata/instance

المعلمات

الاسم مطلوب/اختياري ‏‏الوصف
api-version مطلوب الإصدار المستخدم لخدمة الطلب.
format اختياري* تنسيق (json أو text) الاستجابة. *ملاحظة: قد تكون هناك حاجة عند استخدام معلمات الطلب

تدعم نقطة النهاية هذه تصفية الاستجابة عبر معلمات المسار.

استجابة

{
    "compute": {
        "azEnvironment": "AZUREPUBLICCLOUD",
        "additionalCapabilities": {
            "hibernationEnabled": "true"
        },
        "hostGroup": {
          "id": "testHostGroupId"
        }, 
        "extendedLocation": {
            "type": "edgeZone",
            "name": "microsoftlosangeles"
        },
        "evictionPolicy": "",
        "isHostCompatibilityLayerVm": "true",
        "licenseType":  "Windows_Client",
        "location": "westus",
        "name": "examplevmname",
        "offer": "WindowsServer",
        "osProfile": {
            "adminUsername": "admin",
            "computerName": "examplevmname",
            "disablePasswordAuthentication": "true"
        },
        "osType": "Windows",
        "placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
        "plan": {
            "name": "planName",
            "product": "planProduct",
            "publisher": "planPublisher"
        },
        "platformFaultDomain": "36",
        "platformSubFaultDomain": "",        
        "platformUpdateDomain": "42",
        "priority": "Regular",
        "publicKeys": [{
                "keyData": "ssh-rsa 0",
                "path": "/home/user/.ssh/authorized_keys0"
            },
            {
                "keyData": "ssh-rsa 1",
                "path": "/home/user/.ssh/authorized_keys1"
            }
        ],
        "publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
        "resourceGroupName": "macikgo-test-may-23",
        "resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
        "securityProfile": {
            "secureBootEnabled": "true",
            "virtualTpmEnabled": "false",
            "encryptionAtHost": "true",
            "securityType": "TrustedLaunch"
        },
        "sku": "2019-Datacenter",
        "storageProfile": {
            "dataDisks": [{
                "bytesPerSecondThrottle": "979202048",
                "caching": "None",
                "createOption": "Empty",
                "diskCapacityBytes": "274877906944",
                "diskSizeGB": "1024",
                "image": {
                  "uri": ""
                },
                "isSharedDisk": "false",
                "isUltraDisk": "true",
                "lun": "0",
                "managedDisk": {
                  "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
                  "storageAccountType": "StandardSSD_LRS"
                },
                "name": "exampledatadiskname",
                "opsPerSecondThrottle": "65280",
                "vhd": {
                  "uri": ""
                },
                "writeAcceleratorEnabled": "false"
            }],
            "imageReference": {
                "id": "",
                "offer": "WindowsServer",
                "publisher": "MicrosoftWindowsServer",
                "sku": "2019-Datacenter",
                "version": "latest",
                "communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
                "sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
                "exactVersion": "1.1686127202.30113"
            },
            "osDisk": {
                "caching": "ReadWrite",
                "createOption": "FromImage",
                "diskSizeGB": "30",
                "diffDiskSettings": {
                    "option": "Local"
                },
                "encryptionSettings": {
                  "enabled": "false",
                  "diskEncryptionKey": {
                    "sourceVault": {
                      "id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                    },
                    "secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
                  },
                  "keyEncryptionKey": {
                    "sourceVault": {
                      "id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                    },
                    "keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
                  }
                },
                "image": {
                    "uri": ""
                },
                "managedDisk": {
                    "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
                    "storageAccountType": "StandardSSD_LRS"
                },
                "name": "exampleosdiskname",
                "osType": "Windows",
                "vhd": {
                    "uri": ""
                },
                "writeAcceleratorEnabled": "false"
            },
            "resourceDisk": {
                "size": "4096"
            }
        },
        "subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
        "tags": "baz:bash;foo:bar",
        "userData": "Zm9vYmFy",
        "version": "15.05.22",
        "virtualMachineScaleSet": {
            "id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
        },
        "vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
        "vmScaleSetName": "crpteste9vflji9",
        "vmSize": "Standard_A3",
        "zone": ""
    },
    "network": {
        "interface": [{
            "ipv4": {
               "ipAddress": [{
                    "privateIpAddress": "10.144.133.132",
                    "publicIpAddress": ""
                }],
                "subnet": [{
                    "address": "10.144.133.128",
                    "prefix": "26"
                }]
            },
            "ipv6": {
                "ipAddress": [
                 ]
            },
            "macAddress": "0011AAFFBB22"
        }]
    }
}

تصنيف المخطط:

حسب

بيانات ‏‏الوصف الإصدار المقدم
azEnvironment بيئة Azure حيث يتم تشغيل الجهاز الظاهري بالإصدار 2018-10-01
additionalCapabilities.hibernationEnabled يحدد ما إذا كان وضع الإسبات ممكّنًا على الجهاز الظاهري 2021-11-01
customData تم إهمال هذه الميزة وتعطيلها في IMDS. وقد حل محلها userData 2019-02-01
evictionPolicy يحدد كيفية إخلاء جهاز ظاهري Spot. 2020-12-01
extendedLocation.type نوع الموقع الموسع للجهاز الظاهري. 2021-03-01
extendedLocation.name اسم الموقع الموسع للجهاز الظاهري 2021-03-01
host.id اسم مضيف الجهاز الظاهري. لاحظ أن الجهاز الظاهري سيكون إما مضيف أو hostGroup ولكن ليس كليهما. 2021-11-15
hostGroup.id اسم hostGroup للجهاز الظاهري. لاحظ أن الجهاز الظاهري سيكون إما مضيف أو hostGroup ولكن ليس كليهما. 2021-11-15
isHostCompatibilityLayerVm يحدد ما إذا كان الجهاز الظاهري يعمل على طبقة توافق المضيف 2020-06-01
licenseType نوع ترخيص Azure Hybrid Benefit. هذا موجود فقط للأجهزة الظاهرية التي تدعم AHB 2020-09-01
location منطقة Azure التي يعمل فيها الجهاز الظاهري 2017-04-02
name اسم الجهاز الظاهري 2017-04-02
offer تقديم معلومات لصورة الجهاز الظاهري وهي موجودة فقط للصور التي تم توزيعها من معرض صور Azure 2017-04-02
osProfile.adminUsername يحدد اسم حساب المسؤول 2020-07-15
osProfile.computerName يحدد اسم الكمبيوتر 2020-07-15
osProfile.disablePasswordAuthentication يحدد ما إذا كانت مصادقة كلمة المرور معطلة. هذا موجود فقط لأجهزة Linux الظاهرية 2020-10-01
osType Linux أو Windows 2017-04-02
physicalZone المنطقة الفعلية للجهاز الظاهري 2023-11-15
placementGroupId مجموعة موضع مجموعة المقياس 2017-08-01
plan خطة تحتوي على الاسم والمنتج والناشر لجهاز ظاهري إذا كان صورة Azure Marketplace 2018-04-02
platformUpdateDomain تحديث المجال الذي يعمل عليه الجهاز الظاهري 2017-04-02
platformFaultDomain مجال الخطأ الذي يعمل عليه الجهاز الظاهري 2017-04-02
platformSubFaultDomain مجال الخطأ الفرعي الذي يعمل عليه الجهاز الظاهري، إن وجد. 2021-10-01
priority أولوية الجهاز الظاهري. راجع الأجهزة الظاهرية Spot لمزيد من المعلومات 2020-12-01
provider موفر الجهاز الظاهري 2018-10-01
publicKeys مجموعة المفاتيح العامة المعينة إلى الجهاز الظاهري والمسارات 2018-04-02
publisher ناشر صورة الجهاز الظاهري 2017-04-02
resourceGroupName مجموعة الموارد للجهاز الظاهري 2017-08-01
resourceId معرف المورد المؤهّل بالكامل 2019-03-11
sku وحدة SKU محددة لصورة الجهاز الظاهري 2017-04-02
securityProfile.secureBootEnabled يحدد ما إذا كان التمهيد الآمن UEFI ممكنًا على الجهاز الظاهري 2020-06-01
securityProfile.virtualTpmEnabled يحدد ما إذا كانت الوحدة النمطية للنظام الأساسي الموثوق به الظاهري (TPM) ممكنة على الجهاز الظاهري 2020-06-01
securityProfile.encryptionAtHost يحدد ما إذا كان التشفير في المضيف ممكنًا على الجهاز الظاهري 2021-11-01
securityProfile.securityType يحدد ما إذا كان الجهاز الظاهري جهازًا ظاهريًا موثوقًا به أو جهازًا ظاهريًا سريًا 2021-12-13
storageProfile راجع ملف تعريف التخزين أدناه 2019-06-01
subscriptionId اشتراك Azure للجهاز الظاهري 2017-08-01
tags علامات جهازك الظاهري 2017-08-01
tagsList العلامات المنسقة كصفيف JSON لتحليل برمجي أسهل 2019-06-04
userData مجموعة البيانات المحددة عند إنشاء الجهاز الظاهري للاستخدام أثناء التوفير أو بعده (ترميز Base64) 2021-01-01
version إصدار صورة الجهاز الظاهري 2017-04-02
virtualMachineScaleSet.id معرف مجموعة توسعة الجهاز الظاهري التي تم إنشاؤها باستخدام التنسيق المرن الذي يعد الجهاز الظاهري جزءًا منه. لا يتوفر هذا الحقل لمجموعات مقياس الجهاز الظاهري التي تم إنشاؤها بتنسيق موحد. 2021-03-01
vmId معرّف فريد للجهاز الظاهري. المدونة المشار إليها فقط تناسب الأجهزة الظاهرية التي تحتوي على SMBIOS < 2.6. بالنسبة للأجهزة الظاهرية التي تحتوي على SMBIOS >= 2.6، يتم عرض UUID من DMI بتنسيق طرفي صغير، وبالتالي، لا يوجد أي شرط لتبديل وحدات البايت. 2017-04-02
vmScaleSetName اسم مجموعة مقياس الجهاز الظاهري لمجموعة المقياس 2017-12-01
vmSize حجم الجهاز الظاهري 2017-04-02
zone منطقة توافر جهازك الظاهري 2017-12-01

† هذا الإصدار غير متوفر بالكامل حتى الآن وقد لا يكون مدعوما في جميع المناطق.

ملف تعريف التخزين

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

يحتوي الكائن المرجعي للصورة على المعلومات التالية حول صورة نظام التشغيل، يرجى ملاحظة أن الصورة قد تأتي إما من النظام الأساسي أو السوق أو معرض المجتمع أو المعرض المشترك المباشر ولكن ليس كليهما:

بيانات ‏‏الوصف الإصدار المقدم
id معرف المورد 2019-06-01
offer عرض النظام الأساسي أو صورة السوق 2019-06-01
publisher ناشر صورة النظام الأساسي أو السوق 2019-06-01
sku Sku لصورة النظام الأساسي أو السوق 2019-06-01
version إصدار الصورة 2019-06-01
communityGalleryImageId معرف المورد لصورة المجتمع، فارغة بخلاف ذلك 2023-07-01
sharedGalleryImageId معرف المورد o صورة مشتركة مباشرة، فارغة خلاف ذلك 2023-07-01
exactVersion إصدار المجتمع أو الصورة المشتركة المباشرة 2023-07-01

يحتوي كائن قرص نظام التشغيل على المعلومات التالية حول قرص نظام التشغيل المستخدم بواسطة الجهاز الظاهري:

بيانات ‏‏الوصف
caching متطلبات التخزين المؤقت
createOption معلومات حول كيفية إنشاء الجهاز الظاهري
diffDiskSettings إعدادات القرص غير النهائية
diskSizeGB حجم القرص بالجيجابايت
image القرص الثابت الظاهري لصورة مستخدم المصدر
managedDisk معلمات القرص المُدار
name اسم القرص
vhd القرص الثابت الظاهري
writeAcceleratorEnabled ما إذا كان writeAccelerator ممكنًا على القرص أم لا

يحتوي صفيف أقراص البيانات على قائمة بأقراص البيانات المرفقة بالجهاز الظاهري. يحتوي كل كائن قرص بيانات على المعلومات التالية:

بيانات ‏‏الوصف الإصدار المقدم
bytesPerSecondThrottle* حصة القراءة/الكتابة على القرص بالبايت 2021-05-01
caching متطلبات التخزين المؤقت 2019-06-01
createOption معلومات حول كيفية إنشاء الجهاز الظاهري 2019-06-01
diffDiskSettings إعدادات القرص غير النهائية 2019-06-01
diskCapacityBytes* حجم القرص بالبايت 2021-05-01
diskSizeGB حجم القرص بالجيجابايت 2019-06-01
encryptionSettings إعدادات التشفير للقرص 2019-06-01
image القرص الثابت الظاهري لصورة مستخدم المصدر 2019-06-01
isSharedDisk* تحديد ما إذا كان القرص مشتركًا بين الموارد 2021-05-01
isUltraDisk يحدد ما إذا كان قرص البيانات عبارة عن Ultra Disk 2021-05-01
lun رقم الوحدة المنطقية للقرص 2019-06-01
managedDisk معلمات القرص المُدار 2019-06-01
name اسم القرص 2019-06-01
opsPerSecondThrottle* حصة القراءة/الكتابة في IOPS 2021-05-01
osType نوع نظام التشغيل المضمن في القرص 2019-06-01
vhd القرص الثابت الظاهري 2019-06-01
writeAcceleratorEnabled ما إذا كان writeAccelerator ممكنًا على القرص أم لا 2019-06-01

*يتم تعبئة هذه الحقول فقط للأقراص الفائقة؛ وهي سلاسل فارغة من أقراص غير Ultra.

يحتوي كائن ثنائي كبير الحجم لإعدادات التشفير على بيانات حول كيفية تشفير القرص (إذا كان مشفرا):

بيانات ‏‏الوصف الإصدار المقدم
diskEncryptionKey.sourceVault.id موقع مفتاح تشفير القرص 2021-11-01
diskEncryptionKey.secretUrl موقع البيانات السرية 2021-11-01
keyEncryptionKey.sourceVault.id موقع مفتاح تشفير المفتاح 2021-11-01
keyEncryptionKey.keyUrl موقع المفتاح 2021-11-01

يحتوي كائن قرص المورد على حجم القرص المؤقت المحلي المرفق بالجهاز الظاهري، إذا كان يحتوي على واحد، بالكيلوبايت. إذا لم يكن هناك قرص مؤقت محلي للجهاز الظاهري، فإن هذه القيمة هي 0.

بيانات ‏‏الوصف الإصدار المقدم
resourceDisk.size حجم القرص المؤقت المحلي للجهاز الظاهري (بالكيلوبايت) 2021-02-01

شبكة

بيانات ‏‏الوصف الإصدار المقدم
ipv4.privateIpAddress عنوان IPv4 المحلي للجهاز الظاهري 2017-04-02
ipv4.publicIpAddress عنوان IPv4 العام للجهاز الظاهري 2017-04-02
subnet.address عنوان الشبكة الفرعية للجهاز الظاهري 2017-04-02
subnet.prefix بادئة الشبكة الفرعية، مثال 24 2017-04-02
ipv6.ipAddress عنوان IPv6 المحلي للجهاز الظاهري 2017-04-02
macAddress عنوان mac للجهاز الظاهري 2017-04-02

إشعار

لا يضمن أن تكون nics التي يتم إرجاعها بواسطة استدعاء الشبكة سليمة.

الحصول على بيانات المستخدم

عند إنشاء جهاز ظاهري جديد، يمكنك تحديد مجموعة من البيانات لاستخدامها أثناء توفير الجهاز الظاهري أو بعده، واستردادها من خلال IMDS. تحقق من تجربة بيانات المستخدم النهائي الطرفية من هنا.

لإعداد بيانات المستخدم، استخدم قالب التشغيل السريع هنا. توضح العينة أدناه كيفية استرداد هذه البيانات من خلال IMDS. يتم إصدار هذه الميزة مع الإصدار 2021-01-01 والإصدارات الأحدث.

إشعار

إشعار الأمان: IMDS مفتوحة لجميع التطبيقات على الجهاز الظاهري، ويجب عدم وضع بيانات حساسة في بيانات المستخدم.

$userData = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021-01-01&format=text"
[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData))

عينة 1: تعقب الجهاز الظاهري قيد التشغيل على Azure

بصفتك موفر خدمة، قد تحتاج إلى تتبع عدد الأجهزة الظاهرية التي تشغل برنامجك أو لديك وكلاء يحتاجون إلى تتبع تفرد الجهاز الظاهري. لتتمكن من الحصول على معرف فريد لجهاز ظاهري، استخدم الحقل vmId من Instance Metadata Service.

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text"

Response

5c08b38e-4d57-4c23-ac45-aca61037f084

عينة 2: وضع نسخ متماثلة مختلفة من البيانات

بالنسبة لسيناريوهات معينة، يعد وضع نسخ متماثلة مختلفة من البيانات أمرًا بالغ الأهمية. على سبيل المثال، قد يتطلب منك وضع نسخة HDFS متماثلة أو وضع حاوية عبر مُنسق معرفة platformFaultDomain وplatformUpdateDomain الذين يعمل عليهما الجهاز الظاهري. يمكنك أيضًا استخدام مناطق التوافر للمثيلات لاتخاذ هذه القرارات. يمكنك الاستعلام عن هذه البيانات مباشرة عبر IMDS.

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/platformFaultDomain?api-version=2017-08-01&format=text"

Response

0

عينة 3: الحصول على علامات الجهاز الظاهري

يتم تضمين علامات الجهاز الظاهري في واجهة برمجة تطبيقات المثيل ضمن نقطة نهاية المثيل/الحساب/العلامات. ربما تم تطبيق العلامات على جهاز Azure الظاهري لتنظيمها منطقيًا في تصنيف. يمكن استرداد العلامات المعينة إلى جهاز ظاهري باستخدام الطلب أدناه.

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tags?api-version=2017-08-01&format=text"

Response

Department:IT;ReferenceNumber:123456;TestStatus:Pending

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

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tagsList?api-version=2019-06-04" | ConvertTo-Json -Depth 64

Response

{
    "value":  [
                  {
                      "name":  "Department",
                      "value":  "IT"
                  },
                  {
                      "name":  "ReferenceNumber",
                      "value":  "123456"
                  },
                  {
                      "name":  "TestStatus",
                      "value":  "Pending"
                  }
              ],
    "Count":  3
}

عينة 4: الحصول على مزيد من المعلومات حول الجهاز الظاهري أثناء حالة الدعم

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

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01" | ConvertTo-Json -Depth 64

Response

إشعار

الاستجابة عبارة عن سلسلة JSON. استجابة المثال التالي مطبوعة بشكل جميل لسهولة القراءة.

{
    "azEnvironment": "AZUREPUBLICCLOUD",
    "extendedLocation": {
      "type": "edgeZone",
      "name": "microsoftlosangeles"
    },
    "evictionPolicy": "",
    "additionalCapabilities": {
        "hibernationEnabled": "false"
    },
    "hostGroup": {
      "id": "testHostGroupId"
    },
    "isHostCompatibilityLayerVm": "true",
    "licenseType":  "Windows_Client",
    "location": "westus",
    "name": "examplevmname",
    "offer": "WindowsServer",
    "osProfile": {
        "adminUsername": "admin",
        "computerName": "examplevmname",
        "disablePasswordAuthentication": "true"
    },
    "osType": "Windows",
    "placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
    "plan": {
        "name": "planName",
        "product": "planProduct",
        "publisher": "planPublisher"
    },
    "platformFaultDomain": "36",
    "platformUpdateDomain": "42",
    "priority": "Regular",
    "publicKeys": [{
            "keyData": "ssh-rsa 0",
            "path": "/home/user/.ssh/authorized_keys0"
        },
        {
            "keyData": "ssh-rsa 1",
            "path": "/home/user/.ssh/authorized_keys1"
        }
    ],
    "publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
    "physicalZone": "useast-AZ01",
    "resourceGroupName": "macikgo-test-may-23",
    "resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
    "securityProfile": {
        "secureBootEnabled": "true",
        "virtualTpmEnabled": "false",
        "encryptionAtHost": "true",
        "securityType": "TrustedLaunch"
    },
    "sku": "2019-Datacenter",
    "storageProfile": {
        "dataDisks": [{
            "bytesPerSecondThrottle": "979202048",
            "caching": "None",
            "createOption": "Empty",
            "diskCapacityBytes": "274877906944",
            "diskSizeGB": "1024",
            "image": {
              "uri": ""
            },
            "isSharedDisk": "false",
            "isUltraDisk": "true",
            "lun": "0",
            "managedDisk": {
              "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/MicrosoftCompute/disks/exampledatadiskname",
              "storageAccountType": "StandardSSD_LRS"
            },
            "name": "exampledatadiskname",
            "opsPerSecondThrottle": "65280",
            "vhd": {
              "uri": ""
            },
            "writeAcceleratorEnabled": "false"
        }],
        "imageReference": {
            "id": "",
            "offer": "WindowsServer",
            "publisher": "MicrosoftWindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest",
            "communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
            "sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
            "exactVersion": "1.1686127202.30113"
        },
        "osDisk": {
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "diskSizeGB": "30",
            "diffDiskSettings": {
                "option": "Local"
            },
            "encryptionSettings": {
              "enabled": "false",
              "diskEncryptionKey": {
                "sourceVault": {
                  "id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                },
                "secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
              },
              "keyEncryptionKey": {
                "sourceVault": {
                  "id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                },
                "keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
              }
            },
            "image": {
                "uri": ""
            },
            "managedDisk": {
                "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
                "storageAccountType": "StandardSSD_LRS"
            },
            "name": "exampleosdiskname",
            "osType": "Windows",
            "vhd": {
                "uri": ""
            },
            "writeAcceleratorEnabled": "false"
        },
        "resourceDisk": {
            "size": "4096"
        }
    },
    "subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
    "tags": "baz:bash;foo:bar",
    "version": "15.05.22",
    "virtualMachineScaleSet": {
      "id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
    },
    "vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
    "vmScaleSetName": "crpteste9vflji9",
    "vmSize": "Standard_A3",
    "zone": "3"
}

عينة 5: الحصول على بيئة Azure حيث يتم تشغيل الجهاز الظاهري

يحتوي Azure على العديد من السحب ذات السيادية مثل Azure Government. في بعض الأحيان تحتاج بيئة Azure لاتخاذ بعض قرارات وقت التشغيل. توضح لك العينة التالية كيفية تحقيق هذا السلوك.

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/azEnvironment?api-version=2018-10-01&format=text"

Response

AzurePublicCloud

يتم سرد السحابة وقيم بيئة Azure هنا.

السحابة بيئة Azure
جميع مناطق Azure العالمية المتوفرة بشكل عام AzurePublicCloud
Microsoft Azure Government AzureUSGovernmentCloud
Microsoft Azure المشغل بواسطة 21Vianet AzureChinaCloud
Azure Germany AzureGermanCloud

عينة 6: استرداد معلومات الشبكة

Request

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/network?api-version=2017-08-01" | ConvertTo-Json  -Depth 64

Response

{
  "interface": [
    {
      "ipv4": {
        "ipAddress": [
          {
            "privateIpAddress": "10.1.0.4",
            "publicIpAddress": "X.X.X.X"
          }
        ],
        "subnet": [
          {
            "address": "10.1.0.0",
            "prefix": "24"
          }
        ]
      },
      "ipv6": {
        "ipAddress": []
      },
      "macAddress": "000D3AF806EC"
    }
  ]
}

عينة 7: استرداد عنوان IP العام

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-08-01&format=text"

إشعار

  • إذا كنت تبحث عن استرداد معلومات IMDS لعنوان IP العام ل SKU القياسي ، فراجع واجهة برمجة تطبيقات بيانات تعريف موازن التحميل لمزيد من المعلومات.

البيانات المصدقة

الحصول على البيانات المصدقة

تساعد IMDS على توفير ضمانات بأن البيانات المقدمة تأتي من Azure. توقع Microsoft جزءا من هذه المعلومات، حتى تتمكن من التأكد من أن الصورة في Azure Marketplace هي الصورة التي تقوم بتشغيلها على Azure.

GET /metadata/attested/document

المعلمات

الاسم مطلوب/اختياري ‏‏الوصف
api-version مطلوب الإصدار المستخدم لخدمة الطلب.
nonce اختياري سلسلة مكونة من 10 أرقام تعمل كرمز nonce مشفر. إذا لم يتم توفير أي قيمة، فستستخدم IMDS الطابع الزمني الحالي للتوقيت العالمي المتفق عليه UTC.

استجابة

{
    "encoding":"pkcs7",
    "signature":"MIIEEgYJKoZIhvcNAQcCoIIEAzCCA/8CAQExDzANBgkqhkiG9w0BAQsFADCBugYJKoZIhvcNAQcBoIGsBIGpeyJub25jZSI6IjEyMzQ1NjY3NjYiLCJwbGFuIjp7Im5hbWUiOiIiLCJwcm9kdWN0IjoiIiwicHVibGlzaGVyIjoiIn0sInRpbWVTdGFtcCI6eyJjcmVhdGVkT24iOiIxMS8yMC8xOCAyMjowNzozOSAtMDAwMCIsImV4cGlyZXNPbiI6IjExLzIwLzE4IDIyOjA4OjI0IC0wMDAwIn0sInZtSWQiOiIifaCCAj8wggI7MIIBpKADAgECAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBBAUAMCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tMB4XDTE4MTEyMDIxNTc1N1oXDTE4MTIyMDIxNTc1NlowKzEpMCcGA1UEAxMgdGVzdHN1YmRvbWFpbi5tZXRhZGF0YS5henVyZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAML/tBo86ENWPzmXZ0kPkX5dY5QZ150mA8lommszE71x2sCLonzv4/UWk4H+jMMWRRwIea2CuQ5RhdWAHvKq6if4okKNt66fxm+YTVz9z0CTfCLmLT+nsdfOAsG1xZppEapC0Cd9vD6NCKyE8aYI1pliaeOnFjG0WvMY04uWz2MdAgMBAAGjYDBeMFwGA1UdAQRVMFOAENnYkHLa04Ut4Mpt7TkJFfyhLTArMSkwJwYDVQQDEyB0ZXN0c3ViZG9tYWluLm1ldGFkYXRhLmF6dXJlLmNvbYIQZ8VuSofHbJRAQNBNpiASdDANBgkqhkiG9w0BAQQFAAOBgQCLSM6aX5Bs1KHCJp4VQtxZPzXF71rVKCocHy3N9PTJQ9Fpnd+bYw2vSpQHg/AiG82WuDFpPReJvr7Pa938mZqW9HUOGjQKK2FYDTg6fXD8pkPdyghlX5boGWAMMrf7bFkup+lsT+n2tRw2wbNknO1tQ0wICtqy2VqzWwLi45RBwTGB6DCB5QIBATA/MCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBCwUAMA0GCSqGSIb3DQEBAQUABIGAld1BM/yYIqqv8SDE4kjQo3Ul/IKAVR8ETKcve5BAdGSNkTUooUGVniTXeuvDj5NkmazOaKZp9fEtByqqPOyw/nlXaZgOO44HDGiPUJ90xVYmfeK6p9RpJBu6kiKhnnYTelUk5u75phe5ZbMZfBhuPhXmYAdjc7Nmw97nx8NnprQ="
}

الكائن الثنائي كبير الحجم للتوقيع هو نسخة من المستند تحمل التوقيع pkcs7. يحتوي على الشهادة المستخدمة للتوقيع مع بعض التفاصيل الخاصة بالجهاز الظاهري.

بالنسبة للأجهزة الظاهرية التي تم إنشاؤها باستخدام Azure Resource Manager، يتضمن المستند vmId وsku وnonce وsubscriptionId وtimeStamp لإنشاء المستند وانتهاء صلاحيته ومعلومات الخطة حول الصورة. لا تتم تعبئة معلومات الخطة إلا لصور Azure Marketplace.

بالنسبة للأجهزة الظاهرية التي تم إنشاؤها باستخدام نموذج التوزيع الكلاسيكي، لا يتم ضمان ملء سوى vmId وsubscriptionId. يمكنك استخراج الشهادة من الاستجابة، واستخدامها للتأكد من أن الاستجابة صالحة وأنها قادمة من Azure.

يحتوي المستند دون ترميز على الحقول التالية:

بيانات ‏‏الوصف الإصدار المقدم
licenseType نوع ترخيص Azure Hybrid Benefit. هذا موجود فقط للأجهزة الظاهرية التي تدعم AHB. 2020-09-01
nonce سلسلة يمكن توفيرها اختياريًا مع الطلب. إذا لم يتم توفير nonce، فيتم استخدام الطابع الزمني الحالي للتوقيت العالمي المتفق عليه. 2018-10-01
plan خطة صورة Azure Marketplace. يحتوي على معرف الخطة (الاسم) وصورة المنتج أو العرض (المنتج) ومعرف الناشر (الناشر). 2018-10-01
timestamp.createdOn الطابع الزمني للتوقيت العالمي المتفق عليه UTC لوقت إنشاء المستند الموقع 2018-20-01
timestamp.expiresOn الطابع الزمني للتوقيت العالمي المتفق عليه UTC لوقت انتهاء صلاحية المستند الموقع 2018-10-01
vmId معرّف فريد للجهاز الظاهري 2018-10-01
subscriptionId اشتراك Azure للجهاز الظاهري 2019-04-30
sku وحدة SKU محددة لصورة الجهاز الظاهري (ترتبط بخاصية compute/sku من نقطة نهاية Instance Metadata [/metadata/instance]) 2019-11-01

إشعار

بالنسبة للأجهزة الظاهرية الكلاسيكية (غير Azure Resource Manager)، لا يتم ضمان ملء سوى vmId.

مثال لمستند:

{
   "nonce":"20201130-211924",
   "plan":{
      "name":"planName",
      "product":"planProduct",
      "publisher":"planPublisher"
   },
   "sku":"Windows-Server-2012-R2-Datacenter",
   "subscriptionId":"8d10da13-8125-4ba9-a717-bf7490507b3d",
   "timeStamp":{
      "createdOn":"11/30/20 21:19:19 -0000",
      "expiresOn":"11/30/20 21:19:24 -0000"
   },
   "vmId":"02aab8a4-74ef-476e-8182-f6d2ba4166a6"
}

إرشادات التحقق من صحة التوقيع

عند التحقق من صحة التوقيع، يجب عليك تأكيد إنشاء التوقيع بشهادة من Azure. يتم ذلك عن طريق التحقق من صحة الاسم البديل لموضوع الشهادة (SAN).

مثال على SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

إشعار

سيكون مجال السحابة العامة وكل سحابة ذات سيادة مختلفا.

السحابة المجال في SAN
جميع مناطق Azure العالمية المتوفرة بشكل عام *.metadata.azure.com
Microsoft Azure Government *.metadata.azure.us
Azure المشغل بواسطة 21Vianet *.metadata.azure.cn
Azure Germany *.metadata.microsoftazure.de

إشعار

قد لا تحتوي الشهادات على تطابق تام للمجال. لهذا السبب، يجب أن يقبل التحقق من صحة الشهادة أي مجال فرعي (على سبيل المثال، في مناطق التوفر العامة للسحابة العامة تقبل *.metadata.azure.com).

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

العينة 1: التحقق من أن الجهاز الظاهري يعمل على Azure

يرغب الموردون في Azure Marketplace التأكد من ترخيص برامجهم للعمل فقط في Azure. إذا قام شخص ما بنسخ VHD إلى بيئة محلية، يحتاج المورد إلى القدرة على اكتشاف ذلك. من خلال IMDS، يمكن لهؤلاء الموردين الحصول على بيانات موقعة تضمن الاستجابة فقط من Azure.

إشعار

تتطلب هذه العينة تثبيت الأداة المساعدة jq.

التحقق

# Get the signature
$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri http://169.254.169.254/metadata/attested/document?api-version=2020-09-01
# Decode the signature
$signature = [System.Convert]::FromBase64String($attestedDoc.signature)

تحقق من أن التوقيع من Microsoft Azure وتحقق من سلسلة الشهادات من وجود أخطاء.

# Get certificate chain
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($signature)
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($cert)
# Print the Subject of each certificate in the chain
foreach($element in $chain.ChainElements)
{
    Write-Host $element.Certificate.Subject
}

# Get the content of the signed document
Add-Type -AssemblyName System.Security
$signedCms = New-Object -TypeName System.Security.Cryptography.Pkcs.SignedCms
$signedCms.Decode($signature);
$content = [System.Text.Encoding]::UTF8.GetString($signedCms.ContentInfo.Content)
Write-Host "Attested data: " $content
$json = $content | ConvertFrom-Json
# Do additional validation here

يمكن مقارنة nonce في المستند الموقع إذا قدمت معلمة nonce في الطلب الأولي.

الهوية المُدارة

يمكن تمكين الهوية المدارة، التي يعينها النظام، على الجهاز الظاهري. يمكنك أيضًا تعيين هوية مدارة واحدة أو أكثر من الهويات المدارة المعينة من قِبل المستخدم إلى الجهاز الظاهري. يمكنك بعد ذلك طلب رموز مميزة للهويات المُدارة من IMDS. استخدم هذه الرموز المميزة للمصادقة مع خدمات Azure الأخرى، مثل Azure Key Vault.

للحصول على خطوات مفصلة لتمكين هذه الميزة، راجع الحصول على رمز مميز للوصول.

بيانات تعريف موازن التحميل

عندما تضع جهازاً ظاهرياً أو مثيلات مجموعة أجهزة ظاهرية خلف موازنة تحميل قياسية لـ Azure، يُمكنك استخدام IMDS من أجل استرداد البيانات التعريفية المتعلقة بموازنة التحميل والمثيلات. لمزيد من المعلومات، راجع استرداد معلومات موازن التحميل.

الأحداث المجدولة

يمكنك الحصول على حالة الأحداث المجدولة باستخدام IMDS. ثم يمكن للمستخدم تحديد مجموعة من الإجراءات لتشغيلها على هذه الأحداث. لمزيد من المعلومات، راجع الأحداث المجدولة لنظام التشغيل Linux أو الأحداث المجدولة لنظام التشغيل Windows.

عينة تعليمات برمجية بلغات مختلفة

يسرد الجدول التالي عينات من استدعاء IMDS باستخدام لغات مختلفة داخل الجهاز الظاهري:

اللغة مثال
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C#‎ https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
انتقال https://github.com/Microsoft/azureimds/blob/master/imdssample.go
Java https://github.com/Microsoft/azureimds/blob/master/imdssample.java
NodeJS https://github.com/Microsoft/azureimds/blob/master/IMDSSample.js
Perl https://github.com/Microsoft/azureimds/blob/master/IMDSSample.pl
PowerShell https://github.com/Microsoft/azureimds/blob/master/IMDSSample.ps1
Puppet https://github.com/keirans/azuremetadata
Python https://github.com/Microsoft/azureimds/blob/master/IMDSSample.py
Ruby https://github.com/Microsoft/azureimds/blob/master/IMDSSample.rb

الأخطاء وتصحيح الأخطاء

إذا لم يتم العثور على عنصر بيانات أو طلب مشوه، فإن خدمة بيانات تعريف المثيل ترجع أخطاء HTTP القياسية. على سبيل المثال:

رمز حالة HTTP السبب
200 OK الطلب ناجح.
400 Bad Request رأس مفقود Metadata: true أو معلمة format=json مفقودة عند الاستعلام عن عقدة طرفية
404 Not Found العنصر المطلوب غير موجود
405 Method Not Allowed أسلوب HTTP (الفعل) غير مدعوم في نقطة النهاية.
410 Gone أعد المحاولة بعد مرور بعض الوقت لمدة أقصاها 70 ثانية
429 Too Many Requests تم تجاوز حدود معدل واجهة برمجة التطبيقات
500 Service Error إعادة المحاولة بعد مرور بعض الوقت

الأسئلة الشائعة

  • أتلقى الخطأ 400 Bad Request, Required metadata header not specified. ما معنى ذلك؟

    • يتطلب IMDS تمرير الرأس Metadata: true في الطلب. يسمح تمرير هذا الرأس في استدعاء REST بالوصول إلى IMDS.
  • لماذا لا أحصل على معلومات الحوسبة لجهازي الظاهري؟

    • حاليًا، يدعم IMDS فقط المثيلات التي تم إنشاؤها باستخدام Azure Resource Manager.
  • أنشأت جهازي الظاهري من خلال Azure Resource Manager منذ بعض الوقت. لماذا لا أرى معلومات بيانات تعريف الحوسبة؟

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

    • توفر بيانات المستخدم وظائف مماثلة للبيانات المخصصة، مما يسمح لك بتمرير بيانات التعريف الخاصة بك إلى مثيل الجهاز الظاهري. الفرق هو أنه يتم استرداد بيانات المستخدم من خلال IMDS، وهي ثابتة طوال عمر مثيل الجهاز الظاهري. ستستمر ميزة البيانات المخصصة الموجودة في العمل كما هو موضح في هذه المقالة. ومع ذلك، يمكنك فقط الحصول على بيانات مخصصة من خلال مجلد النظام المحلي، وليس من خلال IMDS.
  • لماذا لا أرى جميع البيانات مملوءة بإصدار جديد؟

    • إذا أنشأت جهازك الظاهري بعد سبتمبر 2016، فأضف علامة لبدء عرض بيانات تعريف الحوسبة. إذا أنشأت الجهاز الظاهري قبل سبتمبر 2016، فأضف ملحقات أو أقراص بيانات أو أزلها إلى مثيل الجهاز الظاهري لتحديث بيانات التعريف.
  • لماذا أتلقى الخطأ 500 Internal Server Error أو 410 Resource Gone؟

    • جرّب الطلب من جديد. لمزيد من المعلومات، راجع معالجة الأخطاء العابرة. إذا استمرت المشكلة، فأنشئ مشكلة دعم في مدخل Azure للجهاز الظاهري.
  • هل سيعمل هذا مع مثيلات مجموعة التحجيم؟

    • نعم، يتوفر IMDS لمثيلات مجموعة التحجيم.
  • لقد قمت بتحديث علاماتي في مجموعات المقياس الخاصة بي، ولكنها لا تظهر في المثيلات (على عكس الأجهزة الظاهرية لمثيل واحد). هل أفعل شيئًا خاطئًا؟

    • تظهر علامات مجموعات المقياس حاليا فقط على الجهاز الظاهري عند إعادة التشغيل أو إعادة الرسم أو تغيير القرص إلى المثيل.
  • لماذا لا أرى معلومات SKU لجهازي الظاهري في instance/compute التفاصيل؟

    • بالنسبة للصور المخصصة التي تم إنشاؤها من Azure Marketplace، لا يحتفظ النظام الأساسي لـ Azure بمعلومات SKU للصورة المخصصة وتفاصيل أي أجهزة ظاهرية تم إنشاؤها من الصورة المخصصة. هذا حسب التصميم وبالتالي لا يظهر في تفاصيل instance/compute للجهاز الظاهري.
  • لماذا انتهت مهلة طلبي (أو فشل الاتصال) لمكالمتي بالخدمة؟

    • يجب إجراء استدعاءات بيانات التعريف من عنوان IP الأساسي المعين لبطاقة الشبكة الأساسية للجهاز الظاهري. بالإضافة إلى ذلك، إذا قمت بتغيير مساراتك، فيجب أن يكون هناك مسار للعنوان 169.254.169.254/32 في جدول التوجيه المحلي للجهاز الظاهري.

      1. انسخ جدول التوجيه المحلي احتياطيًا وابحث عن إدخال IMDS. على سبيل المثال:

        route print
        
        IPv4 Route Table
        ===========================================================================
        Active Routes:
        Network Destination        Netmask          Gateway       Interface  Metric
                0.0.0.0          0.0.0.0      172.16.69.1      172.16.69.7     10
                127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
                127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
        127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
            168.63.129.16  255.255.255.255      172.16.69.1      172.16.69.7     11
        169.254.169.254  255.255.255.255      172.16.69.1      172.16.69.7     11
        ... (continues) ...
        
      2. تحقق من وجود مسار لـ 169.254.169.254، ولاحظ واجهة الشبكة المقابلة (على سبيل المثال، 172.16.69.7).

      3. انسخ تكوين الواجهة احتياطيًا وابحث عن الواجهة التي تتوافق مع الواجهة المشار إليها في جدول التوجيه، مع ملاحظة عنوان MAC (الفعلي).

        ipconfig /all
        
        ... (continues) ...
        Ethernet adapter Ethernet:
        
        Connection-specific DNS Suffix  . : xic3mnxjiefupcwr1mcs1rjiqa.cx.internal.cloudapp.net
        Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
        Physical Address. . . . . . . . . : 00-0D-3A-E5-1C-C0
        DHCP Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        Link-local IPv6 Address . . . . . : fe80::3166:ce5a:2bd5:a6d1%3(Preferred)
        IPv4 Address. . . . . . . . . . . : 172.16.69.7(Preferred)
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        ... (continues) ...
        
      4. تأكد من أن الواجهة تتوافق مع NIC الأساسي للجهاز الظاهري وعنوان IP الأساسي. يمكنك العثور على NIC الأساسي وعنوان IP من خلال النظر إلى تكوين الشبكة في مدخل Azure، أو من خلال البحث عنه باستخدام Azure CLI. لاحظ عناوين IP الخاصة (وعنوان MAC إذا كنت تستخدم CLI). فيما يلي مثال على PowerShell CLI:

        $ResourceGroup = '<Resource_Group>'
        $VmName = '<VM_Name>'
        $NicNames = az vm nic list --resource-group $ResourceGroup --vm-name $VmName | ConvertFrom-Json | Foreach-Object { $_.id.Split('/')[-1] }
        foreach($NicName in $NicNames)
        {
            $Nic = az vm nic show --resource-group $ResourceGroup --vm-name $VmName --nic $NicName | ConvertFrom-Json
            Write-Host $NicName, $Nic.primary, $Nic.macAddress
        }
        
        wintest767 True 00-0D-3A-E5-1C-C0
        
      5. إذا لم تتطابقا، فقم بتحديث جدول التوجيه بحيث يتم استهداف NIC وIP الأساسيين.


  • تجاوز الفشل للمجموعات في Windows Server

    • عند الاستعلام عن IMDS باستخدام تجميع تجاوز الفشل، يكون من الضروري أحيانًا إضافة مسار إلى جدول التوجيه. وإليك الطريقة:

      1. افتح موجه الأوامر باستخدام امتيازات المسؤول.

      2. بادر بتشغيل الأمر التالي، ولاحظ عنوان واجهة وجهة الشبكة (0.0.0.0) في جدول توجيه IPv4.

      route print
      

      إشعار

      إخراج المثال التالي من جهاز ظاهري لخادم Windows مع تمكين نظام مجموعة تجاوز الفشل. للتبسيط، يحتوي الإخراج فقط على جدول توجيه IPv4.

      IPv4 Route Table
      ===========================================================================
      Active Routes:
      Network Destination        Netmask          Gateway       Interface  Metric
              0.0.0.0          0.0.0.0         10.0.1.1        10.0.1.10    266
              10.0.1.0  255.255.255.192         On-link         10.0.1.10    266
              10.0.1.10  255.255.255.255         On-link         10.0.1.10    266
              10.0.1.15  255.255.255.255         On-link         10.0.1.10    266
              10.0.1.63  255.255.255.255         On-link         10.0.1.10    266
              127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
              127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
      127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
          169.254.0.0      255.255.0.0         On-link     169.254.1.156    271
          169.254.1.156  255.255.255.255         On-link     169.254.1.156    271
      169.254.255.255  255.255.255.255         On-link     169.254.1.156    271
              224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
              224.0.0.0        240.0.0.0         On-link     169.254.1.156    271
      255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      255.255.255.255  255.255.255.255         On-link     169.254.1.156    271
      255.255.255.255  255.255.255.255         On-link         10.0.1.10    266
      

      بادر بتشغيل الأمر التالي، واستخدم عنوان واجهة وجهة الشبكة (0.0.0.0)، وهو (10.0.1.10) في هذا المثال.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

يدعم

إذا لم تتمكن من الحصول على استجابة بيانات التعريف بعد محاولات متعددة، يمكنك إنشاء مشكلة دعم في مدخل Microsoft Azure.

ملاحظات حول المنتج

يمكنك تقديم ملاحظات وأفكار حول المنتج إلى قناة ملاحظات المستخدمين الخاصة بنا ضمن > Instance Metadata Service للأجهزة الظاهرية هنا

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