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.
Aby włączyć tożsamość zarządzaną przypisaną przez system na nowej maszynie wirtualnej:
Zaloguj się do witryny Azure Portal.
Udzielanie dostępu
Tworzenie konta magazynu
W tej sekcji utworzysz konto magazynu.
Wybierz przycisk + Utwórz zasób znajdujący się w lewym górnym rogu witryny Azure Portal.
Wybierz pozycję Magazyn, a następnie pozycję Konto magazynu — obiekt blob, plik, tabela, kolejka.
W obszarze Nazwa wprowadź nazwę konta magazynu.
Opcje Model wdrażania i Rodzaj konta należy ustawić na Resource Manager i Magazyn (ogólnego przeznaczenia, wersja 1).
Upewnij się, że Subskrypcja i Grupa zasobów pasują do wartości określonych podczas tworzenia maszyny wirtualnej w poprzednim kroku.
Wybierz pozycję Utwórz.
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.
Przejdź z powrotem do nowo utworzonego konta magazynu.
W obszarze Blob Service wybierz pozycję Kontenery.
Wybierz pozycję + Kontener w górnej części strony.
W obszarze Nowy kontener wprowadź nazwę kontenera, a następnie w obszarze Poziom dostępu publicznego zachowaj wartość domyślną.
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.
Przekaż plik do nowo utworzonego kontenera, klikając nazwę kontenera, a następnie pozycję Przekaż
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ż.
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.
Przejdź z powrotem do nowo utworzonego konta magazynu.
Wybierz pozycję Kontrola dostępu (IAM) .
Kliknij pozycję Dodaj>Dodaj przypisanie roli, aby otworzyć stronę Dodawanie przypisania roli.
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>
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.
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: