Połączenie z aplikacji do zasobów bez obsługi poświadczeń

Zasoby platformy Azure z tożsamościami zarządzanymi obsługują zawsze opcję określenia tożsamości zarządzanej w celu nawiązania połączenia z zasobami platformy Azure obsługującymi uwierzytelnianie firmy Microsoft Entra. Obsługa tożsamości zarządzanych sprawia, że deweloperzy nie muszą zarządzać poświadczeniami w kodzie. Tożsamości zarządzane to zalecana opcja uwierzytelniania podczas pracy z zasobami platformy Azure, które je obsługują. Zapoznaj się z omówieniem tożsamości zarządzanych.

Na tej stronie pokazano, jak skonfigurować usługę App Service, aby mogła łączyć się z usługą Azure Key Vault, usługą Azure Storage i programem Microsoft SQL Server. Te same zasady mogą być używane dla dowolnego zasobu platformy Azure, który obsługuje tożsamości zarządzane i które będą łączyć się z zasobami obsługującymi uwierzytelnianie firmy Microsoft Entra.

Przykłady kodu używają biblioteki klienta tożsamości platformy Azure, która jest zalecaną metodą, ponieważ automatycznie obsługuje wiele kroków, w tym uzyskiwanie tokenu dostępu używanego w połączeniu.

Z jakimi zasobami mogą łączyć się tożsamości zarządzane?

Tożsamość zarządzana może łączyć się z dowolnym zasobem, który obsługuje uwierzytelnianie firmy Microsoft Entra. Ogólnie rzecz biorąc, nie jest wymagana specjalna obsługa zasobu, aby umożliwić tożsamościom zarządzanym łączenie się z nim.

Niektóre zasoby nie obsługują uwierzytelniania entra firmy Microsoft lub ich biblioteka kliencka nie obsługuje uwierzytelniania przy użyciu tokenu. Przeczytaj, aby zapoznać się z naszymi wskazówkami dotyczącymi bezpiecznego uzyskiwania dostępu do poświadczeń przy użyciu tożsamości zarządzanej bez konieczności przechowywania ich w kodzie lub konfiguracji aplikacji.

Tworzenie tożsamości zarządzanej

Istnieją dwa typy tożsamości zarządzanej: przypisane przez system i przypisane przez użytkownika. Tożsamości przypisane przez system są bezpośrednio połączone z pojedynczym zasobem platformy Azure. Gdy zasób platformy Azure zostanie usunięty, jest to tożsamość. Tożsamość zarządzana przypisana przez użytkownika może być skojarzona z wieloma zasobami platformy Azure, a jej cykl życia jest niezależny od tych zasobów.

W tym artykule wyjaśniono, jak utworzyć i skonfigurować tożsamość zarządzaną przypisaną przez użytkownika, która jest zalecana w większości scenariuszy. Jeśli używany zasób źródłowy nie obsługuje tożsamości zarządzanych przypisanych przez użytkownika, zapoznaj się z dokumentacją tego dostawcy zasobów, aby dowiedzieć się, jak skonfigurować go tak, aby miała tożsamość zarządzaną przypisaną przez system.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Uwaga

Aby utworzyć nową tożsamość zarządzaną przypisaną przez użytkownika, musisz mieć rolę taką jak "Współautor tożsamości zarządzanej".

  1. Wyszukaj ciąg "Tożsamości zarządzane" na pasku wyszukiwania w górnej części portalu i wybierz pasujący wynik.

Screenshot of searching for managed identities in the portal.

  1. Wybierz przycisk "Utwórz".

Screenshot showing a managed identity create button in the portal.

  1. Wybierz pozycję Subskrypcja i Grupa zasobów, a następnie wprowadź nazwę tożsamości zarządzanej.

Screenshot showing a managed identity create screen in the portal.

  1. Wybierz pozycję "Przejrzyj i utwórz", aby uruchomić test weryfikacyjny, a następnie wybierz przycisk "Utwórz".

  2. Po utworzeniu tożsamości zostanie wyświetlony ekran potwierdzenia.

Screenshot showing a managed identity confirmation screen after creation in the portal.

Masz teraz tożsamość, którą można skojarzyć z zasobem źródłowym platformy Azure. Przeczytaj więcej na temat zarządzania tożsamościami zarządzanymi przypisanymi przez użytkownika.

Konfigurowanie zasobu źródłowego do używania tożsamości zarządzanej przypisanej przez użytkownika

Wykonaj następujące kroki, aby skonfigurować zasób platformy Azure w celu uzyskania tożsamości zarządzanej za pośrednictwem portalu. Zapoznaj się z dokumentacją dla określonego typu zasobu, aby dowiedzieć się, jak skonfigurować tożsamość zasobu przy użyciu interfejsu wiersza polecenia, programu PowerShell lub szablonu usługi ARM.

Uwaga

Aby skonfigurować zasób platformy Azure, musisz mieć przypisane przez system uprawnienia do zapisu. Aby skojarzyć tożsamość przypisaną przez użytkownika z zasobem platformy Azure, potrzebna będzie rola, taka jak "Operator tożsamości zarządzanej".

  1. Znajdź zasób przy użyciu paska wyszukiwania w górnej części portalu

Screenshot showing a resource being searched for in the portal.

  1. Wybierz link Tożsamość w obszarze nawigacji

Screenshot showing the link to the identity screen for a resource in the portal.

  1. Wybierz kartę "Przypisane przez użytkownika"

  2. Wybierz przycisk "Dodaj"

Screenshot showing a user-assigned identity screen in the portal.

  1. Wybierz utworzoną wcześniej tożsamość przypisaną przez użytkownika i wybierz pozycję "Dodaj"

Screenshot showing a user-assigned identity being selected in the portal.

  1. Tożsamość zostanie skojarzona z zasobem, a lista zostanie zaktualizowana.

Screenshot showing a user-assigned identity has been associated with the Azure resource in the portal.

Zasób źródłowy ma teraz tożsamość przypisaną przez użytkownika, której może użyć do łączenia się z zasobami docelowymi.

Dodawanie uprawnień do tożsamości

Uwaga

Aby dodać przypisania ról, potrzebna będzie rola, taka jak "User Access Administracja istrator" lub "Właściciel" zasobu docelowego. Upewnij się, że udzielasz najmniejszego uprawnienia wymaganego do uruchomienia aplikacji.

Teraz usługa App Service ma tożsamość zarządzaną, musisz nadać tożsamości odpowiednie uprawnienia. Gdy używasz tej tożsamości do interakcji z usługą Azure Storage, użyjesz systemu kontroli dostępu opartej na rolach (RBAC) platformy Azure.

  1. Znajdź zasób, z którym chcesz nawiązać połączenie przy użyciu paska wyszukiwania w górnej części portalu
  2. Wybierz link "Kontrola dostępu (IAM)" w obszarze nawigacji po lewej stronie.

Screenshot showing a resource summary screen in the portal.

  1. Wybierz przycisk "Dodaj" w górnej części ekranu i wybierz pozycję "Dodaj przypisanie roli".

Screenshot showing the add role assignment navigation in the portal.

  1. Zostanie wyświetlona lista ról. Możesz zobaczyć określone uprawnienia, które ma rola, wybierając link "Wyświetl". Wybierz rolę, którą chcesz przyznać tożsamości, a następnie wybierz przycisk "Dalej".

Screenshot showing a role being selected in the portal.

  1. Zostanie wyświetlony monit o wybranie, do kogo ma zostać udzielona rola. Wybierz opcję "Tożsamość zarządzana", a następnie link "Dodaj członków".

Screenshot showing the identity type being selected in the portal.

  1. Po prawej stronie zostanie wyświetlone okienko kontekstowe, w którym można wyszukiwać według typu tożsamości zarządzanej. Wybierz pozycję "Tożsamość zarządzana przypisana przez użytkownika" z opcji "Tożsamość zarządzana".

Screenshot showing managed identity being selected in the portal.

  1. Wybierz utworzoną wcześniej tożsamość i przycisk "Wybierz". Okienko kontekstu zostanie zamknięte, a tożsamość zostanie dodana do listy.

Screenshot showing an identity being added to a resource in the portal.

  1. Wybierz przycisk "Przejrzyj i przypisz", aby wyświetlić podsumowanie przypisania roli, a następnie jeszcze raz, aby potwierdzić.
  2. Wybierz opcję "Przypisania ról", a zostanie wyświetlona lista przypisań ról dla zasobu.

Screenshot showing the role assignment has been added in the portal.

Tożsamość zarządzana ma teraz odpowiednie uprawnienia dostępu do zasobu docelowego platformy Azure. Przeczytaj więcej na temat kontroli dostępu opartej na rolach platformy Azure.

Używanie tożsamości zarządzanej w kodzie

Usługa App Service ma teraz tożsamość zarządzaną z uprawnieniami. Tożsamość zarządzana w kodzie umożliwia interakcję z zasobami docelowymi zamiast przechowywania poświadczeń w kodzie.

Zalecaną metodą jest użycie biblioteki tożsamości platformy Azure dla preferowanego języka programowania. Obsługiwane języki obejmują platformy .NET, Java, JavaScript, Python, Go i C++. Biblioteka uzyskuje tokeny dostępu, co ułatwia nawiązywanie połączenia z zasobami docelowymi.

Korzystanie z biblioteki tożsamości platformy Azure w środowisku projektowym

Z wyjątkiem biblioteki języka C++ biblioteki tożsamości platformy Azure obsługują DefaultAzureCredential typ. DefaultAzureCredential automatycznie próbuje uwierzytelnić się za pośrednictwem wielu mechanizmów, w tym zmiennych środowiskowych lub logowania interakcyjnego. Typ poświadczeń może być używany w środowisku deweloperów przy użyciu własnych poświadczeń. Można go również używać w środowisku produkcyjnym platformy Azure przy użyciu tożsamości zarządzanej. Podczas wdrażania aplikacji nie są wymagane żadne zmiany kodu.

Jeśli używasz tożsamości zarządzanych przypisanych przez użytkownika, należy również jawnie określić tożsamość zarządzaną przypisaną przez użytkownika, za pomocą której chcesz uwierzytelnić się, przekazując identyfikator klienta tożsamości jako parametr. Identyfikator klienta można pobrać, przechodząc do tożsamości w portalu.

Screenshot showing the client ID for the managed identity in the portal.

Przeczytaj więcej na temat bibliotek tożsamości platformy Azure poniżej:

Uzyskiwanie dostępu do obiektu blob w usłudze Azure Storage

using Azure.Identity;
using Azure.Storage.Blobs;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);                        

var blobServiceClient1 = new BlobServiceClient(new Uri("<URI of Storage account>"), credential);
BlobContainerClient containerClient1 = blobServiceClient1.GetBlobContainerClient("<name of blob>");
BlobClient blobClient1 = containerClient1.GetBlobClient("<name of file>");

if (blobClient1.Exists())
{
    var downloadedBlob = blobClient1.Download();
    string blobContents = downloadedBlob.Value.Content.ToString();                
}

Uzyskiwanie dostępu do wpisu tajnego przechowywanego w usłudze Azure Key Vault

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);        

var client = new SecretClient(
    new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"),
    credential);
    
KeyVaultSecret secret = client.GetSecret("<my secret>");
string secretValue = secret.Value;

Uzyskiwanie dostępu do usługi Azure SQL Database

using Azure.Identity;
using Microsoft.Data.SqlClient;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};

AccessToken accessToken = await new DefaultAzureCredential(credentialOptions).GetTokenAsync(
    new TokenRequestContext(new string[] { "https://database.windows.net//.default" }));                        

using var connection = new SqlConnection("Server=<DB Server>; Database=<DB Name>;")
{
    AccessToken = accessToken.Token
};
var cmd = new SqlCommand("select top 1 ColumnName from TableName", connection);
await connection.OpenAsync();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Console.WriteLine(dr.GetValue(0).ToString());
}
dr.Close();	

Połączenie do zasobów, które nie obsługują identyfikatora Entra firmy Microsoft ani uwierzytelniania opartego na tokenach w bibliotekach

Niektóre zasoby platformy Azure nie obsługują jeszcze uwierzytelniania firmy Microsoft Entra lub ich biblioteki klienckie nie obsługują uwierzytelniania przy użyciu tokenu. Zazwyczaj te zasoby to technologie typu open source, które oczekują nazwy użytkownika i hasła lub klucza dostępu w parametry połączenia.

Aby uniknąć przechowywania poświadczeń w kodzie lub konfiguracji aplikacji, możesz przechowywać poświadczenia jako wpis tajny w usłudze Azure Key Vault. Korzystając z powyższego przykładu, możesz pobrać wpis tajny z usługi Azure KeyVault przy użyciu tożsamości zarządzanej i przekazać poświadczenia do parametry połączenia. Takie podejście oznacza, że żadne poświadczenia nie muszą być obsługiwane bezpośrednio w kodzie lub środowisku.

Wskazówki dotyczące bezpośredniej obsługi tokenów

W niektórych scenariuszach możesz ręcznie uzyskać tokeny dla tożsamości zarządzanych zamiast używać wbudowanej metody w celu nawiązania połączenia z zasobem docelowym. Te scenariusze nie obejmują biblioteki klienta dla używanego języka programowania lub zasobu docelowego, z którym nawiązujesz połączenie, lub łączenia się z zasobami, które nie są uruchomione na platformie Azure. Podczas ręcznego uzyskiwania tokenów udostępniamy następujące wskazówki:

Buforowanie uzyskanych tokenów

W celu zapewnienia wydajności i niezawodności zalecamy buforowanie tokenów aplikacji w pamięci lokalnej lub zaszyfrowanie, jeśli chcesz zapisać je na dysku. Ponieważ tokeny tożsamości zarządzanej są ważne przez 24 godziny, nie ma korzyści wynikających z regularnego żądania nowych tokenów, ponieważ buforowany token zostanie zwrócony z punktu końcowego wystawiającego tokeny. Jeśli przekroczysz limity żądań, wystąpi ograniczenie szybkości i zostanie wyświetlony błąd HTTP 429.

Po uzyskaniu tokenu możesz ustawić, że pamięć podręczna tokenu wygaśnie 5 minut przed expires_on (lub równoważną właściwością), która zostanie zwrócona po wygenerowaniu tokenu.

Inspekcja tokenów

Aplikacja nie powinna polegać na zawartości tokenu. Zawartość tokenu jest przeznaczona tylko dla odbiorców (zasobu docelowego), do którego uzyskuje się dostęp, a nie klienta żądającego tokenu. Zawartość tokenu może ulec zmianie lub zostać zaszyfrowana w przyszłości.

Nie ujawniaj ani nie przenosij tokenów

Tokeny powinny być traktowane jak poświadczenia. Nie ujawniaj ich użytkownikom ani innym usługom; na przykład rozwiązania do rejestrowania/monitorowania. Nie należy ich przenosić z zasobu źródłowego, który z nich korzysta, poza uwierzytelnianiem względem zasobu docelowego.

Następne kroki