Dela via


Skapa en SAS för användardelegering för en container eller blob med Java

Med en signatur för delad åtkomst (SAS) kan du bevilja begränsad åtkomst till containrar och blobar i ditt lagringskonto. När du skapar en SAS anger du dess begränsningar, inklusive vilka Azure Storage-resurser en klient har åtkomst till, vilka behörigheter de har för dessa resurser och hur länge SAS är giltigt.

Varje SAS signeras med en nyckel. Du kan signera en SAS på något av två sätt:

  • Med en nyckel som skapats med Microsoft Entra-autentiseringsuppgifter. En SAS som är signerad med Microsoft Entra-autentiseringsuppgifter är en SAS för användardelegering . En klient som skapar en SAS för användardelegering måste tilldelas en Azure RBAC-roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Mer information finns i Skapa en SAS för användardelegering.
  • Med lagringskontonyckeln. Både en tjänst-SAS och ett sas-konto signeras med lagringskontonyckeln. Klienten som skapar en tjänst-SAS måste antingen ha direkt åtkomst till kontonyckeln eller tilldelas behörigheten Microsoft.Storage/storageAccounts/listkeys/action . Mer information finns i Skapa en tjänst-SAS eller Skapa ett konto-SAS.

Kommentar

En SAS för användardelegering ger överlägsen säkerhet till en SAS som är signerad med lagringskontonyckeln. Microsoft rekommenderar att du använder en SAS för användardelegering när det är möjligt. Mer information finns i Bevilja begränsad åtkomst till data med signaturer för delad åtkomst (SAS).

Den här artikeln visar hur du använder Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för en container eller blob med hjälp av Azure Storage-klientbiblioteket för Java.

Om SAS för användardelegering

En SAS-token för åtkomst till en container eller blob kan skyddas med hjälp av antingen Microsoft Entra-autentiseringsuppgifter eller en kontonyckel. En SAS som skyddas med Microsoft Entra-autentiseringsuppgifter kallas sas för användardelegering eftersom den OAuth 2.0-token som används för att signera SAS begärs för användarens räkning.

Microsoft rekommenderar att du använder Microsoft Entra-autentiseringsuppgifter när det är möjligt som bästa praxis för säkerhet, i stället för att använda kontonyckeln, som är enklare att kompromettera. När din programdesign kräver signaturer för delad åtkomst använder du Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för överlägsen säkerhet. Mer information om SAS för användardelegering finns i Skapa en SAS för användardelegering.

Varning

Alla klienter som har en giltig SAS kan komma åt data i ditt lagringskonto enligt sas-tillstånd. Det är viktigt att skydda en SAS från skadlig eller oavsiktlig användning. Använd diskretion när du distribuerar en SAS och ha en plan för att återkalla en komprometterad SAS.

Mer information om signaturer för delad åtkomst finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

Tilldela Azure-roller för åtkomst till data

När ett Microsoft Entra-säkerhetsobjekt försöker komma åt data måste det säkerhetsobjektet ha behörighet till resursen. Oavsett om säkerhetsobjektet är en hanterad identitet i Azure eller ett Microsoft Entra-användarkonto som kör kod i utvecklingsmiljön måste säkerhetsobjektet tilldelas en Azure-roll som ger åtkomst till data. Information om hur du tilldelar behörigheter via Azure RBAC finns i Tilldela en Azure-roll för åtkomst till blobdata.

Konfigurera projektet

Om du vill arbeta med kodexemplen i den här artikeln lägger du till följande importdirektiv:

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;

Hämta en autentiserad tokenautentiseringsuppgift

Om du vill hämta en tokenautentiseringsuppgift som koden kan använda för att auktorisera begäranden till Blob Storage skapar du en instans av klassen DefaultAzureCredential . Mer information om hur du använder klassen DefaultAzureCredential för att auktorisera en hanterad identitet för åtkomst till Blob Storage finns i Azure Identity-klientbiblioteket för Java.

Följande kodfragment visar hur du hämtar autentiseringsuppgifterna för autentiserade token och använder det för att skapa en tjänstklient för Blob Storage:

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

Mer information om hur du auktoriserar åtkomst till Blob Storage från dina program med Java SDK finns i Azure-autentisering med Java och Azure Identity.

Hämta användardelegeringsnyckeln

Varje SAS signeras med en nyckel. Om du vill skapa en SAS för användardelegering måste du först begära en användardelegeringsnyckel som sedan används för att signera SAS. Användardelegeringsnyckeln motsvarar den kontonyckel som används för att signera en tjänst-SAS eller ett SAS-konto, förutom att den förlitar sig på dina Microsoft Entra-autentiseringsuppgifter. När en klient begär en användardelegeringsnyckel med en OAuth 2.0-token returnerar Blob Storage användarens delegeringsnyckel för användarens räkning.

När du har användardelegeringsnyckeln kan du använda den nyckeln för att skapa valfritt antal signaturer för delad åtkomst för användare under nyckelns livslängd. Användarens delegeringsnyckel är oberoende av den OAuth 2.0-token som används för att hämta den, så token behöver inte förnyas om nyckeln fortfarande är giltig. Du kan ange hur lång tid nyckeln är giltig, upp till högst sju dagar.

Använd någon av följande metoder för att begära användarens delegeringsnyckel:

Följande kodexempel visar hur du begär användarens delegeringsnyckel:

public UserDelegationKey requestUserDelegationKey(BlobServiceClient blobServiceClient) {
    // Request a user delegation key that's valid for 1 day, as an example
    UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(
        OffsetDateTime.now().minusMinutes(5),
        OffsetDateTime.now().plusDays(1));

    return userDelegationKey;
}

Skapa en SAS för användardelegering

Du kan skapa en SAS för användardelegering för en container eller blob baserat på appens behov.

När du har hämtat användardelegeringsnyckeln kan du skapa en SAS för användardelegering. Du kan skapa en SAS för användardelegering för att delegera begränsad åtkomst till en containerresurs med hjälp av följande metod från en BlobContainerClient-instans :

Användarens delegeringsnyckel för att signera SAS skickas till den här metoden tillsammans med angivna värden för BlobServiceSasSignatureValues. Behörigheter anges som en BlobContainerSasPermission-instans .

Följande kodexempel visar hur du skapar en SAS för användardelegering för en container:

public String createUserDelegationSASContainer(BlobContainerClient containerClient, UserDelegationKey userDelegationKey) {
    // Create a SAS token that's valid for 1 day, as an example
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);

    // Assign read permissions to the SAS token
    BlobContainerSasPermission sasPermission = new BlobContainerSasPermission()
            .setReadPermission(true);

    BlobServiceSasSignatureValues sasSignatureValues = new BlobServiceSasSignatureValues(expiryTime, sasPermission)
            .setStartTime(OffsetDateTime.now().minusMinutes(5));

    String sasToken = containerClient.generateUserDelegationSas(sasSignatureValues, userDelegationKey);
    return sasToken;
}

Använda en SAS för användardelegering för att auktorisera ett klientobjekt

Du kan använda en SAS för användardelegering för att auktorisera ett klientobjekt för att utföra åtgärder på en container eller blob baserat på de behörigheter som beviljas av SAS.

I följande kodexempel visas hur du använder sas för användardelegering som skapades i det tidigare exemplet för att auktorisera ett BlobContainerClient-objekt . Det här klientobjektet kan användas för att utföra åtgärder på containerresursen baserat på de behörigheter som beviljas av SAS.

// Create a SAS token for a container
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient("sample-container");
String sasToken = createUserDelegationSASContainer(containerClient, userDelegationKey);

// Create a new BlobContainerClient using the SAS token
BlobContainerClient sasContainerClient = new BlobContainerClientBuilder()
        .endpoint(containerClient.getBlobContainerUrl())
        .sasToken(sasToken)
        .buildClient();

Resurser

Mer information om hur du skapar en SAS för användardelegering med hjälp av Azure Blob Storage-klientbiblioteket för Java finns i följande resurser.

Kodexempel

REST API-åtgärder

Azure SDK för Java innehåller bibliotek som bygger på Azure REST API, så att du kan interagera med REST API-åtgärder via välbekanta Java-paradigm. Klientbiblioteksmetoden för att hämta en användardelegeringsnyckel använder följande REST API-åtgärd:

Klientbiblioteksresurser

Se även

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Java. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Java-app.