Auktorisera åtkomst till blobdata med hanterade identiteter för Azure-resurser
Azure Blob Storage stöder Azure Active Directory -autentisering (Azure AD) med hanterade identiteter för Azure-resurser. Hanterade identiteter för Azure-resurser kan ge åtkomst till blobdata med hjälp av Azure AD-autentiseringsuppgifter från program som körs på virtuella Azure-datorer (VM), funktionsappar, VM-skalningsuppsättningar och andra tjänster. Genom att använda hanterade identiteter för Azure-resurser tillsammans med Azure AD-autentisering kan du undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Den här artikeln visar hur du godkänner åtkomst till blobdata från en virtuell Azure-dator med hjälp av hanterade identiteter för Azure-resurser.
Aktivera hanterade identiteter på en virtuell dator
Innan du kan använda hanterade identiteter för Azure-resurser för att ge åtkomst till blobar från den virtuella datorn måste du först aktivera hanterade identiteter för Azure-resurser på den virtuella datorn. Information om hur du aktiverar hanterade identiteter för Azure-resurser finns i någon av följande artiklar:
- Azure Portal
- Azure PowerShell
- Azure CLI
- Azure Resource Manager-mall
- Azure Resource Manager klientbibliotek
Mer information om hanterade identiteter finns i Hanterade identiteter för Azure-resurser.
Tilldela en RBAC-roll till en hanterad identitet
När ett Azure AD-säkerhetsobjekt försöker komma åt data i ett Azure Storage-konto måste säkerhetsobjekt ha behörighet till dataresursen. Oavsett om säkerhetsobjekt är en hanterad identitet i Azure eller ett Azure AD-användarkonto som kör kod i utvecklingsmiljön måste säkerhetsobjekt tilldelas en Azure-roll som ger åtkomst till data i Azure Storage. Information om hur du tilldelar behörigheter för dataåtkomst via Azure RBAC finns i Tilldela en Azure-roll för åtkomst till blobdata.
Anteckning
När du skapar ett Azure Storage-konto tilldelas du inte automatiskt behörighet att komma åt data via Azure AD. Du måste uttryckligen tilldela dig själv en Azure-roll för Azure Storage. Du kan tilldela den på nivån för din prenumeration, resursgrupp, lagringskonto eller container.
Använda en hanterad identitet för att skapa en blockblob i .NET
Azure Identity-klientbiblioteket förenklar processen med att hämta en OAuth 2.0-åtkomsttoken för auktorisering med Azure Active Directory (Azure AD) via Azure SDK. När du använder Azure Identity-klientbiblioteket för att hämta en åtkomsttoken kan du använda samma kod för att hämta token oavsett om programmet körs i utvecklingsmiljön eller i Azure. Mer information finns i Använda Azure Identity Library för att hämta en åtkomsttoken för auktorisering.
Om du vill hämta en token som din kod kan använda för att auktorisera begäranden till Azure Storage skapar du en instans av klassen DefaultAzureCredential. Du kan sedan använda token för att skapa ett tjänstklientobjekt som har behörighet att utföra dataåtgärder i Azure Storage. Mer information om hur du använder klassen DefaultAzureCredential för att ge en hanterad identitet åtkomst Azure Storage finns i Azure Identity-klientbiblioteket för .NET.
I följande kodexempel visas hur du hämtar en åtkomsttoken och använder den för att skapa ett tjänstklientobjekt och sedan använder tjänstklienten för att ladda upp en ny blob:
async static Task CreateBlockBlobAsync(string accountName, string containerName, string blobName)
{
// Construct the blob container endpoint from the arguments.
string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
accountName,
containerName);
// Get a credential and create a service client object for the blob container.
BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
new DefaultAzureCredential());
try
{
// Create the container if it does not exist.
await containerClient.CreateIfNotExistsAsync();
// Upload text to a new block blob.
string blobContents = "This is a block blob.";
byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);
using (MemoryStream stream = new MemoryStream(byteArray))
{
await containerClient.UploadBlobAsync(blobName, stream);
}
}
catch (RequestFailedException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
Anteckning
Om du vill auktorisera begäranden mot blobdata med Azure AD måste du använda HTTPS för dessa begäranden.