Esercitazione: usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione di Azure tramite credenziali di firma di accesso condiviso

Le identità gestite per le risorse di Azure sono una funzionalità di Microsoft Entra ID. Tutti i servizi di Azure che supportano le identità gestite per le risorse di Azure sono soggetti alla sequenza temporale di tali entità. Prima di iniziare, assicurarsi di esaminare lo stato di disponibilità delle identità gestite per la risorsa e i problemi noti.

Questa esercitazione illustra come usare un'identità assegnata dal sistema per una macchina virtuale Windows per ottenere credenziali di firma di accesso condiviso di archiviazione. In particolare, credenziali di firma di accesso condiviso del servizio.

La firma di accesso condiviso del servizio offre la possibilità di concedere accesso limitato agli oggetti in un account di archiviazione per un periodo di tempo limitato e per un servizio specifico (in questo caso, il servizio BLOB) senza esporre la chiave di accesso di un account. È possibile usare credenziali di firma di accesso condiviso come di consueto durante le operazioni di archiviazione, ad esempio quando si usa Storage SDK. In questa esercitazione viene illustrato come caricare e scaricare un oggetto BLOB tramite PowerShell di Archiviazione di Azure. Si apprenderà come:

  • Creare un account di archiviazione
  • Concedere alla macchina virtuale l'accesso alla firma di accesso condiviso dell'account di archiviazione in Resource Manager
  • Ottenere un token di accesso tramite l'identità della macchina virtuale e usarlo per recuperare la firma di accesso condiviso da Resource Manager

Prerequisiti

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Creare un account di archiviazione

Se non ne è già disponibile uno, creare un account di archiviazione. È anche possibile ignorare questo passaggio e concedere all'identità gestita assegnata dal sistema della macchina virtuale l'accesso alle credenziali di firma di accesso condiviso di un account di archiviazione esistente.

  1. Selezionare il pulsante +/Crea nuovo servizio nell'angolo superiore sinistro del portale di Azure.

  2. Selezionare Archiviazione, quindi Archiviazione Account e verrà visualizzato un nuovo pannello "Crea account di archiviazione".

  3. Immettere un nome per l'account di archiviazione usato per questa esercitazione.

  4. Modello di distribuzione e Tipologia account devono essere impostati su "Resource Manager" e "Utilizzo generico".

  5. Verificare che le impostazioni in Sottoscrizione e Gruppo di risorse corrispondano a quelle specificate al momento della creazione della macchina virtuale nel passaggio precedente.

  6. Seleziona Crea.

    Screenshot che mostra come creare un nuovo account di archiviazione.

Creare un contenitore BLOB nell'account di archiviazione

Successivamente verrà caricato e scaricato un file per il nuovo account di archiviazione. Poiché i file richiedono l'archiviazione BLOB, è necessario creare un contenitore BLOB in cui archiviare il file.

  1. Tornare all'account di archiviazione appena creato.

  2. Selezionare il collegamento Contenitori nel pannello sinistro, in "Servizio BLOB".

  3. Selezionare + Contenitore nella parte superiore della pagina e viene visualizzato il pannello "Nuovo contenitore".

  4. Assegnare un nome al contenitore, selezionare un livello di accesso e quindi selezionare OK. Il nome specificato verrà usato più avanti nell'esercitazione.

    Screenshot che mostra come creare un contenitore di archiviazione.

Concedere l'accesso per l'uso di una firma di accesso condiviso di archiviazione all'identità gestita assegnata dal sistema della macchina virtuale

Archiviazione di Azure non supporta l'autenticazione di Microsoft Entra in modo nativo. È tuttavia possibile usare un'identità gestita per recuperare una firma di accesso condiviso di archiviazione da Gestione risorse e quindi usarla per accedere alle risorse di archiviazione. In questo passaggio si concede l'accesso alla firma di accesso condiviso dell'account di archiviazione all'identità gestita assegnata dal sistema della macchina virtuale.

  1. Tornare all'account di archiviazione appena creato.  

  2. Seleziona Controllo di accesso (IAM).

  3. Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.

  4. Assegnare il ruolo seguente. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Collaboratore account di archiviazione
    Assegna accesso a Identità gestita
    Assegnata dal sistema Macchina virtuale
    Seleziona <macchina virtuale Windows>

    Screenshot che mostra la pagina per l'aggiunta di un'assegnazione di ruolo.

Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per chiamare Azure Resource Manager

Per la parte restante dell'esercitazione, si lavorerà dalla macchina virtuale.

In questa parte sarà necessario usare i cmdlet di PowerShell di Azure Resource Manager. Se non è già stato installato, scaricare la versione più recente prima di continuare.

  1. Nella portale di Azure passare a Macchine virtuali, passare alla macchina virtuale Windows e quindi nella pagina Panoramica Selezionare Connessione nella parte superiore.

  2. In Nome utente e Password immettere i valori specificati al momento della creazione della macchina virtuale Windows.

  3. Ora che è stata creata una connessione Desktop remoto alla macchina virtuale,

  4. aprire PowerShell nella sessione remota e usare Invoke-WebRequest per ottenere un token di Azure Resource Manager dall'identità gestita locale per l'endpoint delle risorse di Azure.

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

    Nota

    Il valore del parametro "resource" deve essere una corrispondenza esatta per ciò che è previsto dall'ID Microsoft Entra. Quando si usa l'ID risorsa di Azure Resource Manager, è necessario includere la barra finale nell'URI.

    Estrarre quindi l'elemento "Content", archiviato come stringa in formato JSON (JavaScript Object Notation) nell'oggetto $response.

    $content = $response.Content | ConvertFrom-Json
    

    Estrarre poi il token di accesso dalla risposta.

    $ArmToken = $content.access_token
    

Ottenere credenziali di firma di accesso condiviso da Azure Resource Manager per eseguire chiamate al servizio di archiviazione

Di seguito viene usato PowerShell per eseguire una chiamata a Resource Manager tramite il token di accesso recuperato nella sezione precedente e creare credenziali di firma di accesso condiviso di archiviazione. Dopo aver creato le credenziali di firma di accesso condiviso, è possibile chiamare operazioni di archiviazione.

Per questa richiesta vengono usati i parametri di richiesta HTTP seguenti per creare le credenziali di firma di accesso condiviso:

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

Questi parametri sono inclusi nel corpo del comando POST della richiesta di credenziali di firma di accesso condiviso. Per altre informazioni sui parametri per la creazione di credenziali di firma di accesso condiviso, vedere le informazioni di riferimento REST per la firma di accesso condiviso del servizio List.

Prima convertire i parametri in formato JSON, quindi chiamare l'endpoint listServiceSas di archiviazione per creare le credenziali di firma di accesso condiviso:

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

Nota

L'URL fa distinzione tra maiuscole e minuscole. Accertarsi quindi di usare la stessa combinazione di maiuscole e minuscole usata in precedenza per il nome del gruppo di risorse, facendo attenzione alla maiuscola "G" in "resourceGroup".

È ora possibile estrarre le credenziali di firma di accesso condiviso dalla risposta:

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

Se si esamina la cred di firma di accesso condiviso, viene visualizzata una schermata simile alla seguente:

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

Verrà quindi creato un file denominato "test.txt". Usare quindi le credenziali di firma di accesso condiviso per eseguire l'autenticazione con il cmdlet New-AzStorageContent, caricare il file nel contenitore BLOB e quindi scaricare il file.

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

Assicurarsi di installare prima i cmdlet di Archiviazione di Azure tramite Install-Module Azure.Storage. Caricare quindi il BLOB appena creato, usando il cmdlet PowerShell Set-AzStorageBlobContent:

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

Risposta:

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

È anche possibile scaricare il BLOB caricato usando il Get-AzStorageBlobContent cmdlet di PowerShell:

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

Risposta:

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

Passaggi successivi

Questa esercitazione ha illustrato come usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Archiviazione di Azure tramite credenziali di firma di accesso condiviso. Per altre informazioni su Archiviazione di Azure SAS, consultare: