Freigeben über


Authentifizierung von Go-Apps, die auf Azure gehostet werden, bei Azure-Ressourcen unter Verwendung einer systemzugewiesenen verwalteten Identität

Der empfohlene Ansatz zum Authentifizieren einer Azure gehosteten App für andere Azure Ressourcen ist die Verwendung einer managed Identity. Dieser Ansatz wird für die meisten Azure Dienste unterstützt, einschließlich apps, die auf Azure App Service, Azure Container Apps und Azure Virtual Machines gehostet werden. Erfahren Sie mehr über verschiedene Authentifizierungstechniken und Ansätze auf der Seite "Authentifizierungsübersicht ". In den folgenden Abschnitten erfahren Sie:

  • Grundlegende Konzepte für verwaltete Identitäten
  • So erstellen Sie eine vom System zugewiesene verwaltete Identität für Ihre App
  • Zuweisen von Rollen zu einer vom System zugewiesenen verwalteten Identität
  • So authentifizieren Sie sich mithilfe der vom System zugewiesenen verwalteten Identität aus Ihrem App-Code

Grundlegende Konzepte für verwaltete Identitäten

Mit einer verwalteten Identität kann Ihre App sicher eine Verbindung mit anderen Azure Ressourcen herstellen, ohne geheime Schlüssel oder andere geheime Anwendungsschlüssel zu verwenden. Intern verfolgt Azure die Identität und zu welchen Ressourcen es eine Verbindung herstellen darf. Azure verwendet diese Informationen, um automatisch Microsoft Entra Token für die App abzurufen, damit sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann.

Es gibt zwei Arten von verwalteten Identitäten, die Sie beim Konfigurieren Ihrer gehosteten App berücksichtigen sollten:

  • System-assigned verwaltete Identitäten werden direkt auf einer Azure-Ressource aktiviert und sind an deren Lebenszyklus gebunden. Wenn die Ressource gelöscht wird, löscht Azure automatisch die Identität für Sie. Vom System zugewiesene Identitäten bieten einen minimalistischen Ansatz für die Verwendung verwalteter Identitäten.
  • User-assigned verwaltete Identitäten werden als eigenständige Azure Ressourcen erstellt und bieten größere Flexibilität und erweiterte Funktionalitäten. Sie eignen sich ideal für Lösungen mit mehreren Azure Ressourcen, die dieselbe Identität und Berechtigungen gemeinsam nutzen müssen. Wenn beispielsweise mehrere virtuelle Computer auf denselben Satz von Azure Ressourcen zugreifen müssen, bietet eine vom Benutzer zugewiesene verwaltete Identität wiederverwendbarkeit und optimierte Verwaltung.

Tipp

Erfahren Sie mehr über das Auswählen und Verwalten von vom System zugewiesenen und vom Benutzer zugewiesenen verwalteten Identitäten im Empfehlungsartikel zu bewährten Methoden für verwaltete Identitäten .

In den folgenden Abschnitten werden die Schritte zum Aktivieren und Verwenden einer vom System zugewiesenen verwalteten Identität für eine Azure gehostete App beschrieben. Wenn Sie eine vom Benutzer zugewiesene verwaltete Identität verwenden müssen, besuchen Sie den Artikel über vom Benutzer zugewiesene verwaltete Identitäten , um weitere Informationen zu erhalten.

Aktivieren einer vom System zugewiesenen verwalteten Identität auf der Azure Hostingressource

Um mit der Verwendung einer vom System zugewiesenen verwalteten Identität mit Ihrer App zu beginnen, aktivieren Sie die Identität auf der Azure Ressource, die Ihre App hosten soll, z. B. eine Azure App Service, Azure Container Apps oder Azure Virtual Machines Instanz.

Sie können eine vom System zugewiesene verwaltete Identität für eine Azure Ressource entweder über das Azure Portal oder die Azure CLI aktivieren.

  1. Navigieren Sie im Azure-Portal zu der Ressource, in der Ihr Anwendungscode gehostet wird, z. B. eine Azure App Service- oder Azure Container Apps Instanz.

  2. Erweitern Sie auf der Seite der Ressource "Übersicht""Einstellungen" und wählen Sie "Identität" in der Navigation aus.

  3. Schalten Sie auf der Seite Identität den Status-Schieberegler auf Ein.

  4. Wählen Sie "Speichern" aus, um Ihre Änderungen anzuwenden.

    Screenshot, der zeigt, wie eine vom System zugewiesene verwaltete Identität in einer Container-App aktiviert wird.

Rollen an die verwaltete Identität zuweisen

Ermitteln Sie als Nächstes, welche Rollen Ihre App benötigt, und weisen Sie diese Rollen der verwalteten Identität zu. Sie können einer verwalteten Identität rollen in den folgenden Bereichen zuweisen:

  • Ressource: Die zugewiesenen Rollen gelten nur für diese bestimmte Ressource.
  • Ressourcengruppe: Die zugewiesenen Rollen gelten für alle Ressourcen, die in der Ressourcengruppe enthalten sind.
  • Abonnement: Die zugewiesenen Rollen gelten für alle Im Abonnement enthaltenen Ressourcen.

Das folgende Beispiel zeigt, wie Rollen im Ressourcengruppenbereich zugewiesen werden, da viele Apps alle zugehörigen Azure Ressourcen mithilfe einer einzelnen Ressourcengruppe verwalten.

  1. Navigieren Sie zur Seite "Übersicht" der Ressourcengruppe, die die App mit der vom System zugewiesenen verwalteten Identität enthält.

  2. Wählen Sie access control (IAM) in der linken Navigation aus.

  3. Wählen Sie auf der Seite access control (IAM)die Option +Hinzufügen im oberen Menü aus, und wählen Sie dann " Rollenzuweisung hinzufügen " aus, um zur Seite " Rollenzuweisung hinzufügen " zu navigieren.

    Screenshot, der zeigt, wie Sie auf die Seite

  4. Auf der Seite " Rollenzuweisung hinzufügen " wird ein mehrstufiger Registerkartenworkflow zum Zuweisen von Rollen zu Identitäten angezeigt. Verwenden Sie auf der ersten Registerkarte " Rolle " das Suchfeld oben, um die Rolle zu suchen, die Sie der Identität zuweisen möchten.

  5. Wählen Sie die Rolle aus den Ergebnissen aus, und wählen Sie dann "Weiter" aus, um zur Registerkarte " Mitglieder " zu wechseln.

  6. Wählen Sie für die Option "Zugriff zuweisen"die Option "Verwaltete Identität" aus.

  7. Wählen Sie für die Option Mitglieder+ Mitglieder auswählen, um den Bereich Verwaltete Identitäten auswählen zu öffnen.

  8. Verwenden Sie im Bereich "Verwaltete Identitäten auswählen " die Dropdowns " Abonnement " und "Verwaltete Identität ", um die Suchergebnisse nach Ihren Identitäten zu filtern. Verwenden Sie das Suchfeld Select, um die Systemidentität zu finden, die Sie für die Azure Ressource aktiviert haben, die Ihre App hosten soll.

    Screenshot des Prozesses der verwalteten Identitätszuweisung.

  9. Wählen Sie die Identität aus, und wählen Sie unten im Bereich die Option "Auswählen " aus, um den Vorgang fortzusetzen.

  10. Wählen Sie "Überprüfen" und "Zuweisen " am unteren Rand der Seite aus.

  11. Wählen Sie auf der letzten Registerkarte "Überprüfen+ Zuweisen" die Option "Überprüfen" und "Zuweisen" aus, um den Workflow abzuschließen.

Authentifizieren bei Azure Diensten aus Ihrer App

Das Modul azidentity stellt verschiedene Credentials - Implementierungen von TokenCredential bereit, die an die Unterstützung verschiedener Szenarien und Microsoft Entra Authentifizierungsflüsse angepasst sind. Da verwaltete Identität bei der lokalen Ausführung nicht verfügbar ist, zeigen die folgenden Schritte, welche Anmeldeinformationen in welchem Szenario verwendet werden sollen:

  • Lokale Entwicklungsumgebung: Verwenden Sie während der lokalen Entwicklung nurDefaultAzureCredential für eine vordefinierte, vorkonfigurierte Anmeldeinformationskette. DefaultAzureCredential ermittelt Benutzeranmeldeinformationen aus ihren lokalen Entwicklungstools, z. B. dem Azure CLI. Außerdem bietet es Flexibilität und Komfort für Wiederholungen, Wartezeiten für Antworten und Unterstützung für mehrere Authentifizierungsoptionen. Weitere Informationen finden Sie im Artikel Authentifizierung bei Azure-Diensten während der lokalen Entwicklung.
  • Azure-hosted apps: Wenn Ihre App in Azure ausgeführt wird, verwenden Sie ManagedIdentityCredential, um die für Ihre App konfigurierte verwaltete Identität sicher zu ermitteln. Wenn Sie diesen genauen Anmeldeinformationstyp angeben, wird verhindert, dass andere verfügbare Anmeldeinformationen unerwartet aufgenommen werden.

Implementieren des Codes

Fügen Sie das Modul azidentity hinzu.

Navigieren Sie in einem Terminal Ihrer Wahl zum Anwendungsprojektverzeichnis, und führen Sie die folgenden Befehle aus:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

auf Azure-Dienste wird über spezialisierte Clients aus den verschiedenen Azure SDK Clientbibliotheken zugegriffen. Für jeden Go-Code, der einen Azure SDK-Client in Ihrer App instanziiert, müssen Sie:

  1. Importieren Sie das azidentity Paket.
  2. Erstellen Sie eine Instanz vom DefaultAzureCredential Typ.
  3. Übergeben Sie die Instanz des DefaultAzureCredential-Typs an den Azure SDK Client-Konstruktor.
  4. Legen Sie die AZURE_TOKEN_CREDENTIALS Umgebungsvariable auf ManagedIdentityCredential fest, um sicherzustellen, dass DefaultAzureCredential nur die Anmeldeinformationen der verwalteten Identität verwendet. Diese Vorgehensweise macht die Authentifizierung vorhersehbarer und vereinfacht das Debuggen, wenn sie in Azure bereitgestellt wird. Weitere Informationen finden Sie unter Verwenden einer bestimmten Anmeldeinformationen.

Ein Beispiel für diese Schritte ist im folgenden Codesegment mit einem Azure Storage Blob-Client dargestellt.

import (
	"context"
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
	// create a credential
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
	  // TODO: handle error
	}

	// create a client for the specified storage account
	client, err := azblob.NewClient(account, cred, nil)
	if err != nil {
	  // TODO: handle error
	}

	// TODO: perform some action with the azblob Client
	// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}

Wie im Artikel Azure SDK for Go authentication overview beschrieben, unterstützt DefaultAzureCredential mehrere Authentifizierungsmethoden und bestimmt die zur Laufzeit verwendete Authentifizierungsmethode. Der Vorteil dieses Ansatzes besteht darin, dass Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen verwenden kann, ohne umgebungsspezifischen Code zu implementieren. Wenn der vorangehende Code während der lokalen Entwicklung auf Ihrer Arbeitsstation ausgeführt wird, verwendet DefaultAzureCredential entweder einen Anwendungsdienstprinzipal, der durch Umgebungseinstellungen bestimmt ist, oder Anmeldedaten des Entwicklertools, um sich bei anderen Azure-Ressourcen zu authentifizieren. Daher kann derselbe Code verwendet werden, um Ihre App sowohl während der lokalen Entwicklung als auch bei der Bereitstellung für Azure für Azure Ressourcen zu authentifizieren.

Von Bedeutung

DefaultAzureCredential vereinfacht die Authentifizierung bei der Entwicklung von Anwendungen, die für Azure bereitgestellt werden, indem Anmeldeinformationen kombiniert werden, die in Azure Hostingumgebungen und Anmeldeinformationen in der lokalen Entwicklung verwendet werden. In der Produktion ist es besser, einen bestimmten Anmeldeinformationstyp zu verwenden, damit die Authentifizierung vorhersehbarer und einfacher zu debuggen ist.

Eine Alternative zu DefaultAzureCredential ist die Verwendung von ManagedIdentityCredential. Die Schritte für die Verwendung ManagedIdentityCredential sind identisch mit der Verwendung des DefaultAzureCredential Typs.

Ein Beispiel für diese Schritte ist im folgenden Codesegment mit einem Azure Storage Blob-Client dargestellt.

import (
	"context"
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
                    // Replace placeholder text with your storage account name
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
	// create a credential
	cred, err := azidentity.NewManagedIdentityCredential(nil)
	
	// When using User Assigned Managed Identity use this instead and pass your client id in the options
	// clientID := azidentity.ClientID("abcd1234-...")
	// opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
	// cred, err := azidentity.NewManagedIdentityCredential(&opts)
	
	if err != nil {
	  // TODO: handle error
	}
	
	// create a client for the specified storage account
	client, err := azblob.NewClient(account, cred, nil)
	if err != nil {
	  // TODO: handle error
	}
	
	// TODO: perform some action with the azblob Client
	// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}