다음을 통해 공유


Java를 사용하여 계정 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용 Azure Storage 클라이언트 라이브러리를 사용하여 계정 SAS를 만드는 방법을 보여 줍니다.

계정 SAS 정보

계정 SAS는 스토리지 계정 수준에서 만들어지고 계정 액세스 키로 서명됩니다. 계정 SAS를 만들어 다음을 수행할 수 있습니다.

저장된 액세스 정책은 아직 계정 SAS에서 지원되지 않습니다.

프로젝트 설정

이 문서의 코드 예제를 사용하려면 다음 import 지시문을 추가합니다.

import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.sas.*;
import com.azure.storage.common.sas.AccountSasPermission;
import com.azure.storage.common.sas.AccountSasResourceType;
import com.azure.storage.common.sas.AccountSasService;
import com.azure.storage.common.sas.AccountSasSignatureValues;

계정 SAS 만들기

다음 메서드를 사용하여 스토리지 계정 리소스에 대해 제한된 액세스를 위임할 계정 SAS를 만들 수 있습니다.

계정 SAS에 대한 서명 값을 구성하려면 다음 도우미 클래스를 사용합니다.

  • AccountSasPermission: SAS에서 허용하는 권한을 나타냅니다. 이 예제에서는 읽기 권한을 true로 설정합니다.
  • AccountSasService: SAS에서 액세스할 수 있는 서비스를 나타냅니다. 이 예제에서는 Blob 서비스에 대한 액세스를 허용합니다.
  • AccountSasResourceType: SAS에서 액세스할 수 있는 리소스 유형을 나타냅니다. 이 예제에서는 서비스 수준 API에 대한 액세스를 허용합니다.

도우미 클래스가 구성되면 AccountSasSignatureValues 인스턴스를 사용하여 SAS에 대한 매개 변수를 초기화할 수 있습니다.

다음 코드 예제에서는 SAS 매개 변수를 구성하고 generateAccountSas 메서드를 호출하여 계정 SAS를 가져오는 방법을 보여 줍니다.

public String createAccountSAS(BlobServiceClient blobServiceClient) {
    // Configure the SAS parameters
    OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
    AccountSasPermission accountSasPermission = new AccountSasPermission()
            .setReadPermission(true);
    AccountSasService services = new AccountSasService()
            .setBlobAccess(true);
    AccountSasResourceType resourceTypes = new AccountSasResourceType()
            .setService(true);

    // Generate the account SAS
    AccountSasSignatureValues accountSasValues = new AccountSasSignatureValues(
        expiryTime,
        accountSasPermission,
        services,
        resourceTypes);
    String sasToken = blobServiceClient.generateAccountSas(accountSasValues);

    return sasToken;
}

클라이언트에서 계정 SAS 사용

다음 코드 예제에서는 이전 예제에서 만든 계정 SAS를 사용하여 BlobServiceClient 개체에 권한을 부여하는 방법을 보여 줍니다. 그런 다음 이 클라이언트 개체를 사용하여 SAS에서 부여한 권한에 따라 서비스 수준 API에 액세스할 수 있습니다.

먼저 계정 액세스 키로 서명된 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를 사용하여 BlobServiceClient 개체에 권한을 부여합니다.

// Create a SAS token
String sasToken = createAccountSAS(blobServiceClient);

// Create a new BlobServiceClient using the SAS token
BlobServiceClient sasServiceClient = new BlobServiceClientBuilder()
        .endpoint(blobServiceClient.getAccountUrl())
        .sasToken(sasToken)
        .buildClient();

또한 그러한 리소스 유형에 서명 값의 일부로 액세스 권한이 부여된 경우 계정 SAS를 사용하여 권한을 부여하고 BlobContainerClient 개체 또는 BlobClient 개체를 사용할 수 있습니다.

리소스

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

코드 샘플

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

참고 항목