Tutorial: Verwenden einer systemseitig zugewiesenen verwalteten Identität eines virtuellen Linux-Computers für den Zugriff auf Azure Storage mithilfe von SAS-Anmeldeinformationen

Verwaltete Identitäten für Azure-Ressourcen ist eine Funktion von Microsoft Entra ID. Für alle Azure-Dienste, die verwaltete Identitäten unterstützen, gilt ein eigener Zeitplan. Sehen Sie sich den Verfügbarkeitsstatus der verwalteten Identitäten für Ihre Ressource und die bekannten Probleme an, bevor Sie beginnen.

In diesem Tutorial erfahren Sie, wie Sie eine systemseitig zugewiesene verwaltete Identität für einen virtuellen Linux-Computer verwenden, um SAS-Anmeldeinformationen (Shared Access Signature) für Storage abzurufen. Im Speziellen geht es um Anmeldeinformationen für eine Dienst-SAS.

Hinweis

Der in diesem Tutorial generierte SAS-Schlüssel wird nicht eingeschränkt/an den virtuellen Computer gebunden.

Eine Dienst-SAS gewährt eingeschränkten Zugriff auf Objekte in einem Speicherkonto, ohne einen Kontozugriffsschlüssel bereitzustellen. Der Zugriff kann auf einen bestimmten Zeitraum und einen bestimmten Dienst begrenzt werden. Sie können SAS-Anmeldeinformationen wie gewohnt bei Speichervorgängen verwenden, z.B. bei der Verwendung des Storage SDK. Für dieses Tutorial veranschaulichen wir das Hoch- und Herunterladen eines Blobs mithilfe der Azure Storage-Befehlszeilenschnittstelle. Sie lernen Folgendes:

  • Speicherkonto erstellen
  • Erstellen eines Blob-Containers im Speicherkonto
  • Gewähren des Zugriffs auf eine Speicherkonto-SAS für Ihren virtuellen Computer in Ressourcen-Manager
  • Abrufen eines Zugriffstokens mithilfe der Identität Ihres virtuellen Computers und Verwenden dieses Zugriffstokens zum Abrufen der SAS von Ressourcen-Manager

Voraussetzungen

Speicherkonto erstellen

Erstellen Sie ein Speicherkonto, falls Sie noch keines besitzen. Sie können diesen Schritt auch überspringen und der systemseitig zugewiesenen verwalteten Identität Ihres virtuellen Computers Zugriff auf die Schlüssel eines vorhandenen Speicherkontos gewähren.

  1. Klicken Sie im Azure-Portal in der linken oberen Ecke auf die Schaltfläche +/Neuen Dienst erstellen.

  2. Klicken Sie auf Speicher und anschließend auf Speicherkonto. Daraufhin wird ein neuer Bereich namens „Speicherkonto erstellen“ angezeigt.

  3. Geben Sie einen Namen für das Speicherkonto ein, das Sie später verwenden werden.

  4. Bereitstellungsmodell und Kontoart sollten auf „Resource Manager“ bzw. „Universell“ festgelegt werden.

  5. Stellen Sie sicher, dass Abonnement und Ressourcengruppe dem entsprechen, was Sie bei der Erstellung Ihrer VM im vorherigen Schritt angegeben haben.

  6. Klicken Sie auf Erstellen.

    Create new storage account

Erstellen eines Blob-Containers im Speicherkonto

Später werden Sie eine Datei in das neue Speicherkonto hoch- und daraus herunterladen. Da Dateien Blob-Speicher erfordern, müssen wir einen Blob-Container erstellen, in dem die Datei gespeichert wird.

  1. Navigieren Sie zurück zum neu erstellten Speicherkonto.

  2. Klicken Sie im linken Bereich unter „Blob-Dienst“ auf den Link Container.

  3. Klicken Sie oben auf der Seite auf + Container. Daraufhin wird ein Bereich namens „Neuer Container“ geöffnet.

  4. Geben Sie dem Container einen Namen, und wählen Sie eine Zugriffsebene aus. Klicken Sie anschließend auf OK. Der angegebene Name wird später in diesem Tutorial verwendet.

    Create storage container

Gewähren des Zugriffs für die systemseitig zugewiesene verwaltete Identität Ihres virtuellen Computers zur Verwendung einer Speicher-SAS

Azure Storage bietet native Unterstützung für die Microsoft Entra-Authentifizierung. Dadurch können Sie die systemseitig zugewiesene verwaltete Identität Ihrer VM zum Abrufen einer Speicher-SAS von Resource Manager verwenden und mithilfe dieser SAS auf den Speicher zugreifen. In diesem Schritt gewähren Sie der systemseitig zugewiesenen verwalteten Identität Ihres virtuellen Computers Zugriff auf die SAS des Speicherkontos. Weisen Sie der verwalteten Identität im Bereich der Ressourcengruppe, die Ihr Speicherkonto enthält, die Rolle Speicherkontomitwirkender zu.

Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Hinweis

Weitere Informationen zu den verschiedenen Rollen, die Sie zum Gewähren von Berechtigungen für die Speicherüberprüfung verwenden können, finden Sie unter Autorisieren des Zugriffs auf Blobs und Warteschlangen mit Microsoft Entra ID.

Abrufen eines Zugriffstokens mithilfe der VM-Identität und Verwenden dieses Zugriffstokens zum Aufrufen von Azure Resource Manager

Im weiteren Verlauf des Tutorials arbeiten Sie von der VM aus, die Sie zuvor erstellt haben.

Für die Ausführung dieser Schritte benötigen Sie einen SSH-Client. Wenn Sie Windows verwenden, können Sie den SSH-Client im Windows-Subsystem für Linux nutzen. Unterstützung bei der Konfiguration der Schlüssel Ihres SSH-Clients finden Sie unter:

Nachdem Sie nun über einen SSH-Client verfügen, führen Sie die folgenden Schritte aus:

  1. Navigieren Sie im Azure-Portal zu Virtuelle Computer. Wechseln Sie zu Ihrem virtuellen Linux-Computer, und klicken Sie dann oben auf der Seite Übersicht auf Verbinden. Kopieren Sie die Zeichenfolge, um eine Verbindung mit Ihrem virtuellen Computer herzustellen.

  2. Stellen Sie mit Ihrem SSH-Client eine Verbindung mit Ihrem virtuellen Computer her.

  3. Als Nächstes werden Sie aufgefordert, Ihr Kennwort einzugeben, das Sie beim Erstellen des virtuellen Linux-Computers hinzugefügt haben. Anschließend sollten Sie erfolgreich angemeldet werden.

  4. Verwenden Sie CURL, um ein Zugriffstoken für Azure Resource Manager abzurufen.

    Die CURL-Anforderung und -Antwort für das Zugriffstoken sehen Sie unten:

    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    
    

    Hinweis

    In der Anforderung oben muss der Wert des resource-Parameters genau mit dem von Microsoft Entra ID erwarteten Wert übereinstimmen. Wenn Sie die Azure Resource Manager-Ressourcen-ID verwenden, müssen Sie den nachgestellten Schrägstrich im URI verwenden. In der folgenden Antwort wurde das access_token-Element aus Gründen der Übersichtlichkeit gekürzt.

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

Abrufen von SAS-Anmeldeinformationen von Azure Resource Manager für Speicheraufrufe

Nun rufen Sie mit cURL und dem Zugriffstoken, das im vorherigen Abschnitt abgerufen wurde, Resource Manager auf, um Anmeldeinformationen für eine Speicher-SAS zu erstellen. Sobald wir die SAS-Anmeldeinformationen haben, können wir Vorgänge zum Up- und Download von Speicher aufrufen.

Verwenden Sie für diese Anforderung die folgenden HTTP-Anforderungsparameter, um die SAS-Anmeldeinformationen zu erstellen:

{
    "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.
}

Diese Parameter sind im POST-Text der Anforderung für die SAS-Anmeldeinformationen enthalten. Weitere Informationen zu Parametern für das Erstellen von SAS-Anmeldeinformationen finden Sie in der REST-Referenz zu „List Service SAS“.

Verwenden Sie die folgende cURL-Anforderung, um die SAS-Anmeldeinformationen abzurufen. Ersetzen Sie die Parameter<SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME> und <EXPIRATION TIME> durch Ihre eigenen Werte. Ersetzen Sie den Wert <ACCESS TOKEN> durch das Zugriffstoken, das Sie zuvor abgerufen haben:

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>"

Hinweis

Für den Text in der URL oben wird zwischen Groß-/Kleinschreibung unterschieden. Wenn Sie also für Ihre Ressourcengruppen Groß-/Kleinschreibung verwenden, achten Sie darauf, die richtige Schreibweise zu verwenden. Darüber hinaus ist es wichtig zu wissen, dass dies eine POST-Anforderung ist, keine GET-Anforderung.

Die cURL-Antwort gibt die SAS-Anmeldeinformationen zurück:

{"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"} 

Erstellen Sie auf einer Linux-VM mithilfe des folgenden Befehls eine Blob-Beispieldatei, die in Ihren Blob-Speichercontainer hochgeladen werden soll:

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

Im nächsten Schritt authentifizieren Sie sich mit dem CLI-Befehl az storage unter Verwendung der SAS-Anmeldeinformationen. Laden Sie die Datei dann in den Blobcontainer hoch. Für diesen Schritt müssen Sie auf Ihrer VM die neueste Azure CLI installieren, sofern dies noch nicht geschehen ist.

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

Antwort:

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

Zudem können Sie die Datei mithilfe der Azure-Befehlszeilenschnittstelle herunterladen und mit den SAS-Anmeldeinformationen authentifizieren.

Anforderung:

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

Antwort:

{
  "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
}

Nächste Schritte

In diesem Tutorial haben Sie gelernt, wie Sie eine systemseitig zugewiesene verwaltete Identität eines virtuellen Linux-Computers verwenden, um mithilfe von SAS-Anmeldeinformationen auf Azure Storage zuzugreifen. Weitere Informationen zu Azure Storage SAS finden Sie hier: