Руководство по использованию назначаемого системой управляемого удостоверения виртуальной машины Linux для доступа к службе хранилища Azure при помощи учетных данных SAS

Управляемые удостоверения для ресурсов Azure — это функция идентификатора Microsoft Entra. Каждая служба Azure, которая поддерживает управляемые удостоверения для ресурсов Azure, используется в соответствии с собственной временной шкалой. Прежде чем начать работу, обязательно проверьте состояние доступности управляемых удостоверений для своего ресурса и ознакомьтесь с известными проблемами.

В этом руководстве показано, как с помощью назначаемого системой управляемого удостоверения для виртуальной машины Linux получить учетные данные SAS (подписанный URL-адрес) для хранилища. Для этого используются учетные данные SAS службы.

Примечание.

Ключ SAS, создаваемый в этом руководстве, не ограничивается виртуальной машиной и не привязан к ней.

Подписанный URL-адрес службы предоставляет ограниченный доступ к объектам в учетной записи хранения, не предоставляя ключ доступа к учетной записи. Доступ может быть предоставлен к определенной службе на ограниченный срок. Подписанный URL-адрес можно использовать стандартным образом для операций с хранилищем, например при использовании пакета SDK для службы хранилища Azure. В этом руководстве описано, как отправлять и скачивать большой двоичный объект с помощью интерфейса командной строки хранилища Azure. Вы изучите следующие темы:

  • Создание учетной записи хранилища
  • Создание контейнера
  • предоставлять виртуальной машине доступ к подписанным URL-адресам учетной записи хранения в Resource Manager;
  • получать маркер доступа с помощью удостоверения виртуальной машины и использовать его для извлечения SAS из Resource Manager.

Необходимые компоненты

Создание учетной записи хранилища

Если у вас еще нет учетной записи хранения, создайте ее. Этот шаг можно пропустить и предоставить через назначаемое системой управляемое удостоверение виртуальной машины доступ к ключам существующей учетной записи хранения.

  1. В левом верхнем углу портала Azure нажмите кнопку + Создание службы.

  2. Выберите пункт Хранилище, а затем Учетная запись хранения, после чего отобразится новая панель "Создание учетной записи хранения".

  3. Введите имя учетной записи хранения, которая будет использоваться далее.

  4. Для параметра Модель развертывания необходимо указать значение "Resource Manager", а для параметра Тип учетной записи — "Общее назначение".

  5. Убедитесь, что значения подписки и группы ресурсов соответствуют указанным при создании виртуальной машины на предыдущем шаге.

  6. Нажмите кнопку создания.

    Снимок экрана: экран создания новой учетной записи хранения.

Создание контейнера

Позже мы отправим и скачаем файл в новую учетную запись хранения. Так как файлам необходимо хранилище BLOB-объектов, нужно создать контейнер больших двоичных объектов, в котором будет храниться файл.

  1. Вернитесь к только что созданной учетной записи хранения.

  2. На панели слева в разделе "Служба BLOB-объектов" щелкните ссылку Контейнеры.

  3. Щелкните + Контейнер в верхней части страницы, после чего появится панель "Новый контейнер".

  4. Присвойте контейнеру имя, выберите уровень доступа, а затем нажмите кнопку ОК. Указанное имя будет использоваться далее в этом руководстве.

    Снимок экрана: экран создания контейнера хранилища.

Предоставление управляемому удостоверению, назначаемому системой, виртуальной машины доступа к SAS хранилища

служба хранилища Azure изначально поддерживает проверку подлинности Microsoft Entra, поэтому вы можете использовать назначаемое системой управляемое удостоверение виртуальной машины для получения SAS хранилища из Resource Manager, а затем использовать SAS для доступа к хранилищу. На этом шаге мы предоставим управляемому удостоверению, назначаемому системой, виртуальной машины доступ к SAS учетной записи хранения. Назначьте роль участника учетной записи хранения управляемому удостоверению в области действия группы ресурсов, где находится ваша учетная запись хранения.

Подробные инструкции см. в статье Назначение ролей Azure с помощью портала Microsoft Azure.

Примечание.

Дополнительные сведения о различных ролях, которые можно использовать для предоставления разрешений на хранение, просмотрите авторизацию доступа к blob-объектам и очередям с помощью идентификатора Microsoft Entra.

Получение маркера доступа с помощью удостоверения виртуальной машины и вызов Azure Resource Manager с его помощью

Далее в этом руководстве мы будем работать с виртуальной машиной, которую только что создали.

Для выполнения этих действий вам потребуется клиент SSH. Если вы используете Windows, можно использовать клиент SSH в подсистеме Windows для Linux. Если вам нужна помощь в настройке ключей клиента SSH, см. следующие статьи:

Теперь, когда у вас есть клиент SSH, выполните следующие действия.

  1. На портале Azure перейдите к разделу Виртуальные машины, выберите свою виртуальную машину Linux и вверху страницы Обзор щелкните Подключить. Скопируйте строку подключения к виртуальной машине.

  2. Подключитесь к виртуальной машине c помощью клиента SSH.

  3. После этого вам будет предложено ввести пароль, добавленный при создании виртуальной машины Linux. Вы должны без проблем войти в систему.

  4. Используйте cURL для получения маркера доступа для Azure Resource Manager.

    Запрос CURL маркера доступа и соответствующий ответ приведены ниже:

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true    
    

    Примечание.

    В предыдущем запросе значение параметра resource должно совпадать с ожидаемым идентификатором Microsoft Entra. Если используется идентификатор ресурса Resource Manager, добавьте косую черту после универсального кода ресурса (URI). В следующем ответе элемент access_token сокращен для удобства восприятия.

    {
      "access_token":"eyJ0eXAiOiJ...",
      "refresh_token":"",
      "expires_in":"3599",
      "expires_on":"1504130527",
      "not_before":"1504126627",
      "resource":"https://management.azure.com",
      "token_type":"Bearer"
    }
    

Получение учетных данных SAS из Azure Resource Manager для обращения к хранилищу

Теперь мы с помощью CURL вызовем Resource Manager, используя полученный на предыдущем этапе маркер доступа, и создадим учетные данные SAS для хранилища. Получив учетные данные SAS, мы сможем выполнять операции отправки и (или) скачивания в хранилище.

Для этого мы будем использовать следующие параметры HTTP-запроса, чтобы создать учетные данные SAS:

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite.  Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Эти параметры включены в тело запроса POST на получение учетных данных SAS. Дополнительные сведения о параметрах для создания учетных данных SAS см. в справочнике по выводу SAS службы с использованием REST.

Используйте следующий запрос CURL для получения учетных данных SAS. Не забудьте заменить значения параметров <SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME> и <EXPIRATION TIME> своими значениями. Замените значение <ACCESS TOKEN> маркером доступа, который вы получили ранее:

curl https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"signedExpiry\":\"<EXPIRATION TIME>\"}" -H "Authorization: Bearer <ACCESS TOKEN>"

Примечание.

Текст в приведенном выше URL-адресе чувствителен к регистру, поэтому используйте строчные и заглавные буквы, как указано в названиях групп ресурсов. Кроме того, учитывайте, что это запрос POST, а не GET.

Ответ от службы CURL возвращает учетные данные SAS:

{"serviceSasToken":"sv=2015-04-05&sr=c&spr=https&st=2017-09-22T00%3A10%3A00Z&se=2017-09-22T02%3A00%3A00Z&sp=rcw&sig=QcVwljccgWcNMbe9roAJbD8J5oEkYoq%2F0cUPlgriBn0%3D"} 

На виртуальной машине Linux с помощью следующей команды создайте образец файла большого двоичного объекта, чтобы отправить его в контейнер хранилища BLOB-объектов:

echo "This is a test file." > test.txt

Теперь выполните аутентификацию с помощью команды CLI az storage, указав в ней учетные данные SAS, и отправьте файл в контейнер больших двоичных объектов. Для выполнения этого шага нужно установить последнюю версию Azure CLI на виртуальной машине, если вы не сделали этого ранее.

 az storage blob upload --container-name 
                        --file 
                        --name
                        --account-name 
                        --sas-token

Ответ:

Finished[#############################################################]  100.0000%
{
  "etag": "\"0x8D4F9929765C139\"",
  "lastModified": "2017-09-21T03:58:56+00:00"
}

Кроме того, можно скачать файл с помощью Azure CLI и выполнить аутентификацию, используя учетные данные SAS.

Запрос:

az storage blob download --container-name
                         --file 
                         --name 
                         --account-name
                         --sas-token

Ответ:

{
  "content": null,
  "metadata": {},
  "name": "testblob",
  "properties": {
    "appendBlobCommittedBlockCount": null,
    "blobType": "BlockBlob",
    "contentLength": 16,
    "contentRange": "bytes 0-15/16",
    "contentSettings": {
      "cacheControl": null,
      "contentDisposition": null,
      "contentEncoding": null,
      "contentLanguage": null,
      "contentMd5": "Aryr///Rb+D8JQ8IytleDA==",
      "contentType": "text/plain"
    },
    "copy": {
      "completionTime": null,
      "id": null,
      "progress": null,
      "source": null,
      "status": null,
      "statusDescription": null
    },
    "etag": "\"0x8D4F9929765C139\"",
    "lastModified": "2017-09-21T03:58:56+00:00",
    "lease": {
      "duration": null,
      "state": "available",
      "status": "unlocked"
    },
    "pageBlobSequenceNumber": null,
    "serverEncrypted": false
  },
  "snapshot": null
}

Следующие шаги

Из этого руководства вы узнали, как использовать назначаемое системой управляемое удостоверение виртуальной машины Linux для получения доступа к службе хранилища Azure с помощью учетных данных SAS. Дополнительные сведения о SAS службы хранилища Azure см. в разделе: