Java를 사용하여 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(공유 액세스 서명)를 사용하여 데이터에 대한 제한된 액세스 권한 부여를 참조하세요.

이 문서에서는 Java용 Blob Storage 클라이언트 라이브러리와 함께 스토리지 계정 키를 사용하여 Blob에 대한 서비스 SAS를 만드는 방법을 보여 줍니다.

서비스 SAS 정보

서비스 SAS는 계정 액세스 키로 서명됩니다. StorageSharedKeyCredential 클래스를 사용하여 서비스 SAS에 서명하는 데 사용되는 자격 증명을 만들 수 있습니다.

저장된 액세스 정책을 사용하여 SAS의 사용 권한 및 기간을 정의할 수도 있습니다. 기존에 저장된 액세스 정책의 이름을 제공하는 경우 해당 정책은 SAS와 연결됩니다. 저장된 액세스 정책에 대한 자세한 내용은 저장된 액세스 정책 정의를 참조하세요. 저장된 액세스 정책이 제공되지 않으면 이 문서의 코드 예제에서는 SAS에 대한 사용 권한 및 기간을 정의하는 방법을 보여 줍니다.

Blob에 서비스 SAS 만들기

다음 메서드를 사용하여 Blob 리소스에 대한 제한된 액세스를 위임하는 서비스 SAS를 만들 수 있습니다.

만료 시간 및 서명된 권한과 같은 SAS 서명 값은 BlobServiceSasSignatureValues 인스턴스 일부로 메서드에 전달됩니다. 권한은 BlobSasPermission 인스턴스로 지정됩니다.

다음 코드 예제에서는 Blob 리소스에 대해 읽기 권한이 있는 서비스 SAS를 만드는 방법을 보여 줍니다.

public String createServiceSASBlob(BlobClient blobClient) {
    // 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
    BlobSasPermission sasPermission = new BlobSasPermission()
            .setReadPermission(true);

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

    String sasToken = blobClient.generateSas(sasSignatureValues);
    return sasToken;
}

서비스 SAS를 사용하여 클라이언트 개체에 권한 부여

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

먼저 계정 액세스 키로 서명된 BlobServiceClient 개체를 만듭니다.

String accountName = "<account-name>";
String accountKey = "<account-key>";
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
        
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint(String.format("https://%s.blob.core.windows.net/", accountName))
        .credential(credential)
        .buildClient();

그런 다음, 이전 예제에 나타난 대로 서비스 SAS를 생성하고 SAS를 사용하여 BlobClient 개체에 권한을 부여합니다.

// Create a SAS token
BlobClient blobClient = blobServiceClient
        .getBlobContainerClient("sample-container")
        .getBlobClient("sample-blob.txt");
String sasToken = createServiceSASBlob(blobClient);

// Create a new BlobClient using the SAS token
BlobClient sasBlobClient = new BlobClientBuilder()
        .endpoint(blobClient.getBlobUrl())
        .sasToken(sasToken)
        .buildClient();

리소스

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

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

참고 항목