.NET을 사용하여 Blob에 대한 사용자 위임 SAS 만들기

SAS(공유 액세스 서명)를 사용하면 스토리지 계정의 컨테이너 및 Blob에 대한 제한된 액세스 권한을 부여할 수 있습니다. SAS를 만들 때 클라이언트에서 액세스할 수 있는 Azure Storage 리소스, 해당 리소스에 대한 사용 권한, SAS의 유효 기간 등의 해당 제약 조건을 지정합니다.

모든 SAS는 키로 서명됩니다. 다음 두 가지 방법 중 하나로 SAS에 서명할 수 있습니다.

  • Microsoft Entra 자격 증명을 사용하여 만들어진 키를 사용합니다. Microsoft Entra 자격 증명으로 서명된 SAS는 사용자 위임 SAS입니다. 사용자 위임 SAS를 만드는 클라이언트에는 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업을 포함하는 Azure RBAC 역할이 할당되어야 합니다. 자세한 내용은 사용자 위임 SAS 만들기를 참조하세요.
  • 스토리지 계정 키를 사용합니다. 서비스 SAS계정 SAS는 모두 스토리지 계정 키로 서명됩니다. 서비스 SAS를 만드는 클라이언트는 계정 키에 대한 직접 액세스 권한이 있거나 Microsoft.Storage/storageAccounts/listkeys/action 권한이 할당되어야 합니다. 자세한 내용은 서비스 SAS 만들기 또는 계정 SAS 만들기를 참조하세요.

참고 항목

사용자 위임 SAS는 스토리지 계정 키로 서명된 SAS에 뛰어난 보안을 제공합니다. 가능하면 사용자 위임 SAS를 사용하는 것이 좋습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 데이터에 대한 제한된 액세스 권한 부여를 참조하세요.

이 문서에서는 Microsoft Entra 자격 증명을 사용하여 .NET용 Azure Storage 클라이언트 라이브러리를 사용하여 Blob에 대한 사용자 위임 SAS를 만드는 방법을 보여 줍니다.

사용자 위임 SAS 정보

컨테이너 또는 Blob에 액세스하기 위한 SAS 토큰은 Microsoft Entra 자격 증명 또는 계정 키를 사용하여 보호될 수 있습니다. Microsoft Entra 자격 증명으로 보안이 설정된 SAS를 사용자 위임 SAS라고 합니다. SAS에 서명하는 데 사용되는 OAuth 2.0 토큰이 사용자를 대신하여 요청되기 때문입니다.

되도록이면 쉽게 손상될 수 있는 계정 키 대신 보안 모범 사례에 따라 Microsoft Entra 자격 증명을 사용하는 것이 좋습니다. 애플리케이션 디자인에 공유 액세스 서명이 필요한 경우 Microsoft Entra 자격 증명을 사용하여 뛰어난 보안을 위해 사용자 위임 SAS를 만듭니다. 사용자 위임 SAS에 대한 자세한 내용은 사용자 위임 SAS 만들기를 참조하세요.

주의

유효한 SAS를 소유한 클라이언트는 해당 SAS에서 허용한 스토리지 계정의 데이터에 액세스할 수 있습니다. 악의적이거나 의도하지 않은 사용으로부터 SAS를 보호하는 것이 중요합니다. SAS 배포는 신중해야 하고, 손상된 SAS를 철회하는 계획을 세워야 합니다.

공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

데이터 액세스를 위한 Azure 역할 할당

Microsoft Entra 보안 주체가 Blob 데이터에 액세스하려고 시도하는 경우 해당 보안 주체에는 리소스에 대한 권한이 있어야 합니다. 보안 주체가 Azure의 관리 ID이거나 개발 환경에서 코드를 실행하는 Microsoft Entra 사용자 계정인지 여부에 관계없이 보안 주체에는 Blob 데이터에 대한 액세스 권한을 부여하는 Azure 역할이 할당되어야 합니다. Azure RBAC를 통해 권한을 할당하는 방법에 관한 자세한 내용은 Blob 데이터에 액세스하기 위한 Azure 역할 할당을 참조하세요.

프로젝트 설정

이 문서의 코드 예제를 사용하려면 다음 단계에 따라 프로젝트를 설정합니다.

패키지 설치

다음 패키지를 설치합니다.

dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs

앱 코드 설정

다음 using 지시문을 추가합니다.

using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;

인증된 토큰 자격 증명 가져오기

코드에서 Blob Storage 요청에 권한을 부여하는 데 사용할 수 있는 토큰 자격 증명을 가져오려면 DefaultAzureCredential 클래스의 인스턴스를 만듭니다. DefaultAzureCredential 클래스를 사용하여 Blob Storage에 액세스할 수 있는 권한을 관리 ID에 부여하는 방법에 대한 자세한 내용은 .NET용 Azure ID 클라이언트 라이브러리를 참조하세요.

다음 코드 조각에서는 인증된 토큰 자격 증명을 가져와서 이를 사용하여 Blob Storage용 서비스 클라이언트를 만드는 방법을 보여 줍니다.

// Construct the blob endpoint from the account name.
string endpoint = $"https://{accountName}.blob.core.windows.net";

// Create a blob service client object using DefaultAzureCredential
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri(endpoint),
    new DefaultAzureCredential());

.NET SDK를 사용하여 애플리케이션에서 Blob Storage에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 Azure 서비스를 사용하여 .NET 애플리케이션을 인증하는 방법을 참조하세요.

사용자 위임 키 가져오기

모든 SAS는 키로 서명됩니다. 사용자 위임 SAS를 만들려면 먼저 SAS에 서명하는 데 사용되는 사용자 위임 키를 요청해야 합니다. 사용자 위임 키는 Microsoft Entra 자격 증명에 의존한다는 점을 제외하면 서비스 SAS 또는 계정 SAS에 서명하는 데 사용되는 계정 키와 유사합니다. 클라이언트가 OAuth 2.0 토큰을 사용하여 사용자 위임 키를 요청하면 Blob Storage가 사용자를 대신하여 사용자 위임 키를 반환합니다.

사용자 위임 키를 받은 후에는 해당 키를 사용하여 키의 수명이 끝날 때까지 사용자 위임 공유 액세스 서명을 개수 제한 없이 만들 수 있습니다. 사용자 위임 키는 해당 키를 획득하는 데 사용된 OAuth 2.0 토큰과 별개이므로 키가 여전히 유효하다면 토큰을 갱신할 필요가 없습니다. 키가 유효한 상태로 유지되는 기간을 최대 7일까지 지정할 수 있습니다.

다음 방법 중 하나를 사용하여 사용자 위임 키를 요청합니다.

다음 코드 예제에서는 사용자 위임 키를 요청하는 방법을 보여 줍니다.

public static async Task<UserDelegationKey> RequestUserDelegationKey(
    BlobServiceClient blobServiceClient)
{
    // Get a user delegation key for the Blob service that's valid for 1 day
    UserDelegationKey userDelegationKey =
        await blobServiceClient.GetUserDelegationKeyAsync(
            DateTimeOffset.UtcNow,
            DateTimeOffset.UtcNow.AddDays(1));

    return userDelegationKey;
}

Blob에 대한 사용자 위임 SAS 만들기

사용자 위임 키를 가져온 후에는 Blob 리소스에 대해 제한된 액세스를 위임하는 사용자 위임 SAS를 만들 수 있습니다. 다음 코드 예제에서는 Blob에 대한 사용자 위임 SAS를 생성하는 방법을 보여 줍니다.

public static async Task<Uri> CreateUserDelegationSASBlob(
    BlobClient blobClient,
    UserDelegationKey userDelegationKey)
{
    // Create a SAS token for the blob resource that's also valid for 1 day
    BlobSasBuilder sasBuilder = new BlobSasBuilder()
    {
        BlobContainerName = blobClient.BlobContainerName,
        BlobName = blobClient.Name,
        Resource = "b",
        StartsOn = DateTimeOffset.UtcNow,
        ExpiresOn = DateTimeOffset.UtcNow.AddDays(1)
    };

    // Specify the necessary permissions
    sasBuilder.SetPermissions(BlobSasPermissions.Read | BlobSasPermissions.Write);

    // Add the SAS token to the blob URI
    BlobUriBuilder uriBuilder = new BlobUriBuilder(blobClient.Uri)
    {
        // Specify the user delegation key
        Sas = sasBuilder.ToSasQueryParameters(
            userDelegationKey,
            blobClient
            .GetParentBlobContainerClient()
            .GetParentBlobServiceClient().AccountName)
    };

    return uriBuilder.ToUri();
}

사용자 위임 SAS를 사용하여 클라이언트 개체 권한 부여

다음 코드 예제에서는 사용자 위임 SAS를 사용하여 BlobClient 개체에 권한을 부여하는 방법을 보여 줍니다. 이 클라이언트 개체는 SAS에서 부여한 권한에 따라 Blob 리소스에 작업을 수행하는 데 사용할 수 있습니다.

// Create a Uri object with a user delegation SAS appended
BlobClient blobClient = blobServiceClient
    .GetBlobContainerClient("sample-container")
    .GetBlobClient("sample-blob.txt");
Uri blobSASURI = await CreateUserDelegationSASBlob(blobClient, userDelegationKey);

// Create a blob client object with SAS authorization
BlobClient blobClientSAS = new BlobClient(blobSASURI);

리소스

.NET용 Azure Blob Storage 클라이언트 라이브러리를 사용하여 사용자 위임 SAS를 만드는 방법에 대해 자세히 알아보려면 다음 리소스를 참조하세요.

REST API 작업

.NET용 Azure SDK에는 Azure REST API를 기반으로 빌드되는 라이브러리가 포함되어 있으므로 익숙한 .NET 패러다임을 통해 REST API 작업과 상호 작용할 수 있습니다. 사용자 위임 키를 가져오기 위한 클라이언트 라이브러리 메서드는 다음 REST API 작업을 사용합니다.

클라이언트 라이브러리 리소스

참고 항목