Udostępnij za pośrednictwem


Samouczek: używanie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej systemu Windows w celu uzyskania dostępu do usługi Azure Storage

Tożsamości zarządzane dla zasobów platformy Azure to funkcja identyfikatora Entra firmy Microsoft. Każda usługa platformy Azure obsługująca tożsamości zarządzane dla zasobów platformy Azure ma własną oś czasu. Pamiętaj, aby przed rozpoczęciem sprawdzić stan dostępności tożsamości zarządzanych dla swojego zasobu i znane problemy.

W tym samouczku przedstawiono sposób używania tożsamości zarządzanej przypisanej przez system dla maszyny wirtualnej z systemem Windows w celu uzyskania dostępu do usługi Azure Storage. Dowiedz się, jak odbywa się:

  • Tworzenie kontenera obiektów blob na koncie magazynu
  • Udzielenie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej z systemem Windows dostępu do konta magazynu
  • Uzyskiwanie dostępu i używanie go do wywoływania usługi Azure Storage

Uwaga

Uwierzytelnianie entra firmy Microsoft dla usługi Azure Storage jest w publicznej wersji zapoznawczej.

Wymagania wstępne

  • Jeśli nie znasz funkcji tożsamości zarządzanych dla zasobów platformy Azure, zobacz to omówienie.
  • Jeśli nie masz jeszcze konta platformy Azure, przed kontynuowaniem utwórz bezpłatne konto.
  • Aby przeprowadzić wymagane czynności tworzenia zasobów i zarządzania rolami, Twoje konto musi mieć uprawnienia „Właściciel” w odpowiednim zakresie (subskrypcji lub grupy zasobów). Jeśli potrzebujesz pomocy dotyczącej przypisywania ról, zobacz Przypisywanie ról platformy Azure w celu zarządzania dostępem do zasobów subskrypcji platformy Azure.

Włącz

Włączenie tożsamości zarządzanej przypisanej przez system jest jednym kliknięciem. Można ją włączyć podczas tworzenia maszyny wirtualnej lub we właściwościach istniejącej maszyny wirtualnej.

Zrzut ekranu przedstawia kartę Przypisane przez system dla maszyny wirtualnej, na której można włączyć stan Przypisane przez system.

Aby włączyć tożsamość zarządzaną przypisaną przez system na nowej maszynie wirtualnej:

  1. Zaloguj się do witryny Azure Portal.

  2. Create a virtual machine with system-assigned identity enabled (Tworzenie maszyny wirtualnej z tożsamością przypisaną przez system)

Udzielanie dostępu

Tworzenie konta magazynu

W tej sekcji utworzysz konto magazynu.

  1. Wybierz przycisk + Utwórz zasób znajdujący się w lewym górnym rogu witryny Azure Portal.

  2. Wybierz pozycję Magazyn, a następnie pozycję Konto magazynu — obiekt blob, plik, tabela, kolejka.

  3. W obszarze Nazwa wprowadź nazwę konta magazynu.

  4. Opcje Model wdrażania i Rodzaj konta należy ustawić na Resource Manager i Magazyn (ogólnego przeznaczenia, wersja 1).

  5. Upewnij się, że Subskrypcja i Grupa zasobów pasują do wartości określonych podczas tworzenia maszyny wirtualnej w poprzednim kroku.

  6. Wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający sposób tworzenia nowego konta magazynu.

Tworzenie kontenera obiektów blob i przekazywanie pliku na konto magazynu

Pliki wymagają magazynu obiektów blob, dlatego musimy utworzyć kontener obiektów blob, w którym będziemy przechowywać plik. Następnie przekaż plik do kontenera obiektów blob na nowym koncie magazynu.

  1. Przejdź z powrotem do nowo utworzonego konta magazynu.

  2. W obszarze Blob Service wybierz pozycję Kontenery.

  3. Wybierz pozycję + Kontener w górnej części strony.

  4. W obszarze Nowy kontener wprowadź nazwę kontenera, a następnie w obszarze Poziom dostępu publicznego zachowaj wartość domyślną.

    Zrzut ekranu przedstawiający sposób tworzenia kontenera magazynu.

  5. Za pomocą wybranego edytora utwórz plik o nazwie hello world.txt na maszynie lokalnej. Otwórz plik i dodaj tekst (bez cudzysłowów) „Hello world! :)”, a następnie zapisz plik.

  6. Przekaż plik do nowo utworzonego kontenera, klikając nazwę kontenera, a następnie pozycję Przekaż

  7. W okienku Przekazywanie obiektu blob w obszarze Pliki wybierz ikonę folderu i przejdź do pliku hello_world.txt na komputerze lokalnym, wybierz plik, a następnie wybierz pozycję Przekaż. Zrzut ekranu przedstawiający ekran przekazywania pliku tekstowego.

Udzielanie dostępu

W tej sekcji pokazano, jak udzielić maszynie wirtualnej dostępu do kontenera usługi Azure Storage. Przypisanej przez system tożsamości zarządzanej maszyny wirtualnej można użyć do pobierania danych w obiekcie blob usługi Azure Storage.

  1. Przejdź z powrotem do nowo utworzonego konta magazynu.

  2. Wybierz pozycję Kontrola dostępu (IAM) .

  3. Kliknij pozycję Dodaj>Dodaj przypisanie roli, aby otworzyć stronę Dodawanie przypisania roli.

  4. Przypisz następującą rolę. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

    Ustawienie Wartość
    Rola Czytelnik danych obiektu BLOB usługi Storage
    Przypisz dostęp do Tożsamość zarządzana
    Przypisane przez system Maszyna wirtualna
    Wybierz pozycję <maszyna wirtualna>

    Zrzut ekranu przedstawiający stronę dodawania przypisania roli.

Uzyskiwanie dostępu do danych

Usługa Azure Storage natywnie obsługuje uwierzytelnianie firmy Microsoft Entra, dzięki czemu może bezpośrednio akceptować tokeny dostępu uzyskane przy użyciu tożsamości zarządzanej. To podejście korzysta z integracji usługi Azure Storage z identyfikatorem Entra firmy Microsoft i różni się od podawania poświadczeń w parametry połączenia.

Oto przykładowy kod platformy .NET podczas otwierania połączenia z usługą Azure Storage. W przykładzie użyto tokenu dostępu, a następnie odczytuje zawartość utworzonego wcześniej pliku. Ten kod należy uruchomić na maszynie wirtualnej, aby mógł uzyskać dostęp do punktu końcowego tożsamości zarządzanej maszyny wirtualnej. Do korzystania z metody tokenu dostępu wymagany jest program .NET Framework 4.6 lub nowszy. Zastąp odpowiednio wartość <URI to blob file>. Tę wartość można uzyskać poprzez przejście do utworzonego i przekazanego do magazynu obiektów blob pliku, a następnie skopiowanie adresu URL w sekcji Właściwości na stronie Przegląd.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            request.Headers["Metadata"] = "true";
            request.Method = "GET";

            try
            {
                // Call /token endpoint
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Pipe response Stream to a StreamReader, and extract access token
                StreamReader streamResponse = new StreamReader(response.GetResponseStream());
                string stringResponse = streamResponse.ReadToEnd();
                JavaScriptSerializer j = new JavaScriptSerializer();
                Dictionary<string, string> list = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

Odpowiedź zawiera zawartość pliku:

Hello world! :)

Wyłącz

Aby wyłączyć tożsamość przypisaną przez system na maszynie wirtualnej, ustaw stan tożsamości przypisanej przez system na wartość Wyłączone.

Zrzut ekranu przedstawia kartę Przypisane przez system dla maszyny wirtualnej, na której można wyłączyć stan Przypisane przez system.

Następne kroki

W tym samouczku pokazano, jak umożliwić przypisanej przez system tożsamości zarządzanej maszyny wirtualnej z systemem Windows uzyskiwanie dostępu do usługi Azure Storage. Aby dowiedzieć się więcej o usłudze Azure Storage, zobacz: