Zelfstudie: Een door het Windows-VM-systeem toegewezen beheerde identiteit gebruiken voor toegang tot Azure Storage via een SAS-referentie

Beheerde identiteiten voor Azure-resources is een functie van Microsoft Entra ID. Voor alle Azure-services die beheerde identiteiten voor Azure-resources ondersteunen, geldt een eigen tijdlijn. Controleer de beschikbaarheidsstatus van beheerde identiteiten voor uw resource en eventuele bekende problemen voordat u begint.

Deze zelfstudie laat zien hoe u een SAS-referentie ophaalt voor Azure Storage met een door het systeem toegewezen identiteit voor een virtuele Windows-machine (VM). Een service-SAS-referentie, om precies te zijn.

Een service-SAS biedt de mogelijkheid om beperkte toegang tot objecten in een opslagaccount te verlenen voor een beperkte tijdsduur en een specifieke service (in ons geval de blobservice), zonder een toegangssleutel voor het account beschikbaar te stellen. U kunt een SAS-referentie gebruiken zoals u gewend bent bij opslagbewerkingen, bijvoorbeeld bij het gebruik van de Storage-SDK. Voor deze zelfstudie demonstreren we het uploaden en downloaden van een blob met behulp van de opdrachtregelinterface (CLI) van Azure Storage PowerShell. U leert het volgende:

  • Een opslagaccount maken
  • Uw virtuele machine toegang verlenen tot een SAS voor een opslagaccount in Resource Manager
  • Een toegangstoken ophalen met de identiteit van de virtuele machine, en daarmee de SAS ophalen uit Resource Manager

Vereisten

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Een opslagaccount maken

Als u nog geen opslagaccount hebt, maakt u er nu een. U kunt deze stap ook overslaan en de door het systeem toegewezen beheerde identiteit voor uw VM toegang verlenen tot de SAS-referentie van een bestaand opslagaccount.

  1. Klik op de knop +/Nieuwe service maken in de linkerbovenhoek van Azure Portal.

  2. Selecteer Opslag en vervolgens Opslagaccount. Het paneel 'Opslagaccount make' wordt weergegeven.

  3. Voer een naam in voor het opslagaccount dat u voor deze zelfstudie gebruikt.

  4. Implementatiemodel en Soort account moeten respectievelijk worden ingesteld op Resource Manager en Algemeen gebruik.

  5. Zorg ervoor dat de waarden van Abonnement en Resourcegroep overeenkomen met de waarden die u hebt opgegeven bij het maken van de virtuele machine in de vorige stap.

  6. Selecteer Maken.

    Schermopname die laat zien hoe u een nieuw opslagaccount maakt.

Een blobcontainer in het opslagaccount maken

Later zullen we een bestand uploaden en downloaden naar het nieuwe opslagaccount. Omdat voor bestanden blobopslag nodig is, moeten we een blobcontainer maken waarin het bestand kan worden opgeslagen.

  1. Navigeer terug naar het zojuist gemaakte opslagaccount.

  2. Selecteer de link Containers in het linkerpaneel, onder 'Blob service'.

  3. Selecteer + Container bovenaan de pagina om het paneel 'Nieuwe container' deelvenster uit te schuiven.

  4. Geef de container een naam, selecteer een toegangsniveau en selecteer VERVOLGENS OK. De naam die u hebt opgegeven, wordt verderop in de zelfstudie gebruikt.

    Schermopname die laat zien hoe u een opslagcontainer maakt.

De door het systeem toegewezen beheerde identiteit voor uw VM toegang verlenen tot het gebruik van een SAS-opslag

Azure Storage biedt geen systeemeigen ondersteuning voor Microsoft Entra-verificatie. U kunt echter een beheerde identiteit gebruiken om een opslag-SAS op te halen uit Resource Manager, en vervolgens de SAS gebruiken om toegang tot de opslag te krijgen. In deze stap verleent u de door het systeem toegewezen beheerde identiteit voor uw VM toegang tot de SAS voor uw opslagaccount.

  1. Navigeer terug naar het zojuist gemaakte opslagaccount.  

  2. Klik op Toegangsbeheer (IAM) .

  3. Selecteer Toevoegen>Roltoewijzing toevoegen om het deelvenster Roltoewijzing toevoegen te openen.

  4. Wijs de volgende rol toe. Raadpleeg Azure-rollen toewijzen met Azure Portal voor informatie over het toewijzen van rollen.

    Instelling Weergegeven als
    Role Inzender voor opslagaccounts
    Toegang toewijzen aan Beheerde identiteit
    Door het systeem toegewezen Virtuele machine
    Select <uw Virtuele Windows-machine>

    Schermopname van de pagina voor het toevoegen van een roltoewijzing.

Een toegangstoken ophalen met behulp van de identiteit van de virtuele machine en deze gebruiken om Azure Resource Manager aan te roepen

Voor de rest van de zelfstudie werken we vanaf uw VIRTUELE machine.

In dit gedeelte moet u de PowerShell-cmdlets van Azure Resource Manager gebruiken. Als u deze nog niet hebt geïnstalleerd, moet u de nieuwste versie downloaden voordat u doorgaat.

  1. Navigeer in Azure Portal naar Virtuele machines, ga naar uw virtuele Windows-machine en klik vervolgens op de pagina Overzicht Verbinding maken bovenaan selecteren.

  2. Voer uw referenties (gebruikersnaam en wachtwoord) in die u hebt toegevoegd bij het maken van de virtuele Windows-machine.

  3. Nu u een Verbinding met extern bureaublad met de virtuele machine hebt gemaakt:

  4. Open PowerShell in de externe sessie en gebruik Invoke-WebRequest om een Azure Resource Manager-token op te halen bij de lokaal beheerde identiteit voor het Azure-resources-eindpunt.

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Method GET -Headers @{Metadata="true"}
    

    Notitie

    De waarde van de parameter resource moet exact overeenkomen met wat wordt verwacht door De Microsoft Entra-id. Wanneer u de resource-id van Azure Resource Manager gebruikt, moet u de URI opgeven met een slash op het einde.

    Extraheer vervolgens het element 'Content' (inhoud), dat is opgeslagen als een tekenreeks in JSON-indeling (JavaScript Object Notation) in het object $response.

    $content = $response.Content | ConvertFrom-Json
    

    Extraheer vervolgens het toegangstoken uit het antwoord.

    $ArmToken = $content.access_token
    

Een SAS-referentie ophalen uit Azure Resource Manager om opslagaanroepen te maken

Gebruik nu PowerShell voor het aanroepen van Resource Manager met behulp van het toegangstoken dat we hebben opgehaald in de vorige sectie, om een SAS-referentie voor opslag op te halen. Als we de SAS-referentie eenmaal hebben, kunnen we opslagbewerkingen aanroepen.

Voor deze aanvraag gebruiken we de volgende HTTP-aanvraagparameters om de SAS-referentie te maken:

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

Deze parameters worden opgenomen in de tekst van de POST-aanvraag voor de SAS-referentie. Zie de naslaginformatie over REST voor het weergeven van service-SAS voor meer informatie over de parameters voor het maken van een SAS-referentie.

Converteer de parameters eerst naar JSON en roep vervolgens het listServiceSas-eindpunt voor opslag aan om de SAS-referentie te maken:

$params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
$jsonParams = $params | ConvertTo-Json
$sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}

Notitie

De URL is hoofdlettergevoelig, dus gebruik precies dezelfde naam van de resourcegroep als hiervoor, met inbegrip van de hoofdletter 'G' in 'resourceGroups'.

We kunnen nu de SAS-referentie uit het antwoord ophalen:

$sasContent = $sasResponse.Content | ConvertFrom-Json
$sasCred = $sasContent.serviceSasToken

Als u de SAS-cred inspecteert, ziet u ongeveer als volgt:

PS C:\> $sasCred
sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D

Vervolgens maken we een bestand met de naam test.txt. Gebruik de SAS-referentie om te verifiëren bij de cmdlet New-AzStorageContent, upload het bestand naar de blobcontainer en download het bestand vervolgens.

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

Zorg ervoor dat u eerst de Azure Storage-cmdlets installeert met Install-Module Azure.Storage. Upload de blob die u zojuist hebt gemaakt, met behulp van de Set-AzStorageBlobContent PowerShell-cmdlet:

$ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx

Respons:

ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
BlobType          : BlockBlob
Length            : 56
ContentType       : application/octet-stream
LastModified      : 9/21/2017 6:14:25 PM +00:00
SnapshotTime      :
ContinuationToken :
Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
Name              : testblob

U kunt de blob die u hebt geüpload, ook downloaden met de Get-AzStorageBlobContent PowerShell-cmdlet:

Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx

Respons:

ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
BlobType          : BlockBlob
Length            : 56
ContentType       : application/octet-stream
LastModified      : 9/21/2017 6:14:25 PM +00:00
SnapshotTime      :
ContinuationToken :
Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
Name              : testblob

Volgende stappen

In deze zelfstudie hebt u geleerd een door het systeem toegewezen beheerde identiteit voor een virtuele Windows-machine (VM) te gebruiken om toegang tot Azure Storage te krijgen met behulp van een SAS-referentie. Zie voor meer informatie over Azure Storage SAS: