Samouczek: uzyskiwanie dostępu do usługi Azure Storage za pośrednictwem poświadczeń SAS przy użyciu przypisanej przez system tożsamości maszyny wirtualnej z systemem Linux

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.

Ten samouczek przedstawia sposób używania tożsamości zarządzanej przypisanej przez system do maszyny wirtualnej z systemem Linux w celu uzyskania poświadczeń sygnatury dostępu współdzielonego magazynu. W szczególności poświadczeń SAS usługi.

Uwaga

Klucz sygnatury dostępu współdzielonego wygenerowany w tym samouczku nie będzie ograniczony/powiązany z maszyną wirtualną.

Sygnatura dostępu współdzielonego usługi zapewnia ograniczony dostęp do obiektów na koncie magazynu bez ujawniania klucza dostępu konta. Dostępu można udzielić przez ograniczony czas i określonej usłudze. Możesz użyć poświadczeń SAS w zwykły sposób wykorzystywany podczas wykonywania operacji magazynu, np. podczas używania zestawu SDK usługi Storage. W tym samouczku zademonstrujemy przekazywanie i pobieranie obiektu blob przy użyciu interfejsu wiersza polecenia usługi Azure Storage. Dowiesz się, jak:

  • Tworzenie konta magazynu
  • Tworzenie kontenera obiektów blob na koncie magazynu
  • Udzielanie maszynie wirtualnej dostępu do sygnatury SAS konta magazynu w usłudze Resource Manager
  • Uzyskiwanie tokenu dostępu przy użyciu tożsamości maszyny wirtualnej oraz używanie go do pobrania sygnatury SAS z usługi Resource Manager

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.

Tworzenie konta magazynu

Jeśli jeszcze go nie masz, utworzysz konto magazynu. Możesz też pominąć ten krok i przyznać przypisanej przez system tożsamości zarządzanej maszyny wirtualnej dostęp do kluczy na istniejącym koncie magazynu.

  1. Wybierz przycisk +/Utwórz nową usługę znajdujący się w lewym górnym rogu witryny Azure Portal.

  2. Wybierz pozycję Magazyn, a następnie pozycję Konto magazynu, a zostanie wyświetlony nowy panel "Tworzenie konta magazynu".

  3. Wprowadź nazwę konta magazynu, którego będziesz używać później.

  4. Model wdrażania i Rodzaj konta powinny być ustawione odpowiednio na "Resource Manager" i "Ogólnego przeznaczenia".

  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 ekran tworzenia nowego konta magazynu.

Tworzenie kontenera obiektów blob na koncie magazynu

Później przekażemy i pobierzemy plik na nowe konto magazynu. Ponieważ pliki wymagają magazynu obiektów blob, musimy utworzyć kontener obiektów blob, w którym będziemy przechowywać plik.

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

  2. Wybierz link Kontenery w panelu po lewej stronie w obszarze "Blob Service".

  3. Wybierz pozycję + Kontener w górnej części strony, a panel "Nowy kontener" zostanie wysuwany.

  4. Nadaj kontenerowi nazwę, wybierz poziom dostępu, a następnie wybierz przycisk OK. Podana nazwa będzie używana w dalszej części tego samouczka.

    Zrzut ekranu przedstawiający ekran tworzenia kontenera magazynu.

Udzielanie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej dostępu do używania sygnatury SAS magazynu

Usługa Azure Storage natywnie obsługuje uwierzytelnianie firmy Microsoft Entra, więc możesz użyć przypisanej przez system tożsamości zarządzanej maszyny wirtualnej do pobrania sygnatury dostępu współdzielonego magazynu z usługi Resource Manager, a następnie uzyskać dostęp do magazynu przy użyciu sygnatury dostępu współdzielonego. W tym kroku udzielasz przypisanej przez system tożsamości zarządzanej maszyny wirtualnej dostępu do sygnatury SAS konta magazynu. Przypisz rolę Współautor konta magazynu do tożsamości zarządzanej w zakresie grupy zasobów zawierającej konto magazynu.

Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Uwaga

Aby uzyskać więcej informacji na temat różnych ról, których można użyć do udzielania uprawnień do magazynu, zobacz Autoryzowanie dostępu do obiektów blob i kolejek przy użyciu identyfikatora Entra firmy Microsoft.

Uzyskiwanie tokenu dostępu przy użyciu tożsamości maszyny wirtualnej oraz używanie go do wywołania usługi Azure Resource Manager

W pozostałej części samouczka będziemy pracować z utworzonej wcześniej maszyny wirtualnej.

Do wykonania tych kroków potrzebny jest klient SSH. Jeśli używasz systemu Windows, możesz użyć klienta SSH w Podsystem Windows dla systemu Linux. Jeśli potrzebujesz pomocy przy konfigurowaniu kluczy klienta SSH, zobacz:

Teraz, gdy masz klienta SSH, przejdź do poniższych kroków:

  1. W witrynie Azure Portal przejdź do pozycji Maszyny wirtualne, przejdź do maszyny wirtualnej z systemem Linux, a następnie na stronie Przegląd wybierz pozycję Połączenie u góry. Skopiuj ciąg, aby nawiązać połączenie z maszyną wirtualną.

  2. Połącz się z maszyną wirtualną przy użyciu klienta SSH.

  3. Następnie zostanie wyświetlony monit o wprowadzenie hasła dodanego podczas tworzenia maszyny wirtualnej z systemem Linux. Logowanie powinno wtedy zostać pomyślnie wykonane.

  4. Użyj programu CURL, aby uzyskać token dostępu dla usługi Azure Resource Manager.

    Żądanie programu CURL oraz odpowiedź dla tokenu dostępu znajduje się poniżej:

    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    
    

    Uwaga

    W poprzednim żądaniu wartość parametru "resource" musi być dokładnie zgodna z oczekiwaniami identyfikatora Entra firmy Microsoft. W przypadku użycia identyfikatora zasobu usługi Azure Resource Manager należy uwzględnić końcowy ukośnik w identyfikatorze URI. W poniższej odpowiedzi element access_token został skrócony pod kątem zwięzłości.

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

Pobieranie poświadczeń SAS z usługi Azure Resource Manager w celu wykonywania wywołań do magazynu

Teraz użyj programu CURL, aby wywołać usługę Resource Manager przy użyciu tokenu dostępu pozyskanego w poprzedniej sekcji, aby utworzyć poświadczenia SAS magazynu. Po uzyskaniu sygnatury SAS magazynu możemy wywołać operacje przekazywania/pobierania magazynu.

W przypadku tego żądania użyjemy następujących parametrów żądania HTTP, aby utworzyć poświadczenia sygnatury dostępu współdzielonego:

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

Te parametry są uwzględnione w treści żądania POST dla poświadczeń SAS. Aby uzyskać więcej informacji o parametrach potrzebnych do tworzenia poświadczeń SAS, zobacz Dokumentację interfejsu REST sygnatury dostępu współdzielonego usługi listy.

Użyj następującego żądania CURL, aby uzyskać poświadczenia SAS. Upewnij się, że parametry <SUBSCRIPTION ID>, <RESOURCE GROUP>, <STORAGE ACCOUNT NAME>, <CONTAINER NAME> i <EXPIRATION TIME> zostały zastąpione własnymi wartościami. Zastąp wartość <ACCESS TOKEN> tokenem dostępu pobranym wcześniej:

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

Uwaga

W tekście w poprzednim adresie URL rozróżniana jest wielkość liter, więc upewnij się, że stosujesz odpowiednie małe i wielkie litery dla grup zasobów, aby odpowiednio je przedstawić. Ponadto należy pamiętać, że jest to żądanie POST, a nie żądanie GET.

Odpowiedź programu CURL zwróci poświadczenia SAS:

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

Na maszynie wirtualnej z systemem Linux utwórz przykładowy plik obiektów blob w celu przekazania do kontenera magazynu obiektów blob przy użyciu następującego polecenia:

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

Następnie przeprowadź uwierzytelnianie przy użyciu polecenia az storage interfejsu wiersza polecenia, korzystając z poświadczeń SAS, i przekaż plik do kontenera obiektów blob. W tym kroku musisz zainstalować najnowszy interfejs wiersza polecenia platformy Azure na maszynie wirtualnej, jeśli jeszcze tego nie zrobiono.

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

Reakcja:

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

Ponadto możesz pobrać plik przy użyciu interfejsu wiersza polecenia platformy Azure oraz przeprowadzić uwierzytelnianie przy użyciu poświadczeń SAS.

Żądanie:

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

Reakcja:

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

Następne kroki

W tym samouczku przedstawiono sposób użycia przypisanej przez system tożsamości zarządzanej maszyny wirtualnej z systemem Linux w celu uzyskania dostępu do usługi Azure Storage przy użyciu poświadczeń SAS. Aby dowiedzieć się więcej na temat sygnatury dostępu współdzielonego usługi Azure Storage, zobacz: