다음을 통해 공유


Azure Blob Storage 및 JavaScript를 사용하여 계정 SAS 토큰 만들기 및 사용

이 문서에서는 계정 SAS 토큰을 만들고 사용하여 JavaScript용 Azure Blob Storage 클라이언트 라이브러리 v12를 사용하는 방법을 보여 줍니다. 연결되면 코드가 Blob Storage 서비스의 컨테이너, Blob 및 기능에서 작동할 수 있습니다.

샘플 코드 조각은 GitHub에서 실행 가능한 Node.js 파일로 사용할 수 있습니다.

패키지(npm) | 샘플 | API 참조 | 라이브러리 소스 코드 | 제공 피드백

계정 SAS 토큰

계정 SAS 토큰은 Azure Storage에서 제공하는 액세스 위임에 대한 SAS 토큰의 형식 중 하나입니다. 계정 SAS 토큰은 Azure Storage에 대한 액세스를 제공합니다. 토큰은 만들 때 정의하는 만큼만 제한적입니다. 토큰이 있는 사용자는 이를 사용하여 Storage 계정에 액세스할 수 있으므로 토큰이 필요한 작업을 완료할 수 있도록 허용하는 가장 제한적인 권한으로 토큰을 정의해야 합니다.

토큰 만들기에 대한 모범 사례에는 다음과 같은 제한적인 권한이 포함됩니다.

  • 서비스: Blob, 파일, 큐, 테이블
  • 리소스 종류: 서비스, 컨테이너 또는 개체
  • 만들기, 읽기, 쓰기, 업데이트 및 삭제와 같은 권한

애플리케이션에 필요한 종속성 추가

계정 SAS 토큰을 만드는 데 필요한 종속성을 포함합니다.

const { 
    BlobServiceClient, 
    generateAccountSASQueryParameters, 
    AccountSASPermissions, 
    AccountSASServices,
    AccountSASResourceTypes,
    StorageSharedKeyCredential,
    SASProtocol 
} = require('@azure/storage-blob');
require('dotenv').config()

공유 키 자격 증명을 만들기 위한 환경 변수 가져오기

Blob Storage 계정 이름 및 키를 사용하여 StorageSharedKeyCredential을 만듭니다. 이 키는 SAS 토큰을 만들고 SAS 토큰을 사용하는 데 필요합니다.

스토리지 계정 이름과 계정 키를 사용하여 StorageSharedKeyCredential을 만듭니다. 그런 다음 StorageSharedKeyCredential을 사용하여 BlobServiceClient를 초기화합니다.

const constants = {
    accountName: process.env.AZURE_STORAGE_ACCOUNT_NAME,
    accountKey: process.env.AZURE_STORAGE_ACCOUNT_KEY
};
const sharedKeyCredential = new StorageSharedKeyCredential(
    constants.accountName,
    constants.accountKey
);

비동기 작업 상용구

나머지 샘플 코드 조각에서는 다음과 같은 Node.js용 비동기 상용구 코드를 가정합니다.

async function main() {

    const sasToken = await createAccountSas();

    await useSasToken(sasToken);
}

main()
    .then(() => {
        console.log(`done`);
    }).catch((ex) => {
        console.log(`Error: ${ex.message}`)
    });

SAS 토큰 만들기

이 토큰은 Blob, 큐, 테이블 및 파일에서 사용할 수 있으므로 일부 설정은 Blob 옵션보다 더 광범위합니다.

  1. 옵션 개체를 만듭니다.

    SAS 토큰의 기능 범위는 AccountSASSignatureValues로 정의됩니다.

    SDK에서 제공하는 다음 도우미 함수를 사용하여 값에 대한 올바른 값 형식을 만듭니다.

  2. 개체를 SharedKeyCredential과 함께 generateAccountSASQueryParameters 함수에 전달하여 SAS 토큰을 만듭니다.

    SAS 토큰을 반환하기 전에 쿼리 문자열 구분 기호(?)를 앞에 추가합니다.

    async function createAccountSas() {
    
        const sasOptions = {
    
            services: AccountSASServices.parse("btqf").toString(),          // blobs, tables, queues, files
            resourceTypes: AccountSASResourceTypes.parse("sco").toString(), // service, container, object
            permissions: AccountSASPermissions.parse("rwdlacupi"),          // permissions
            protocol: SASProtocol.Https,
            startsOn: new Date(),
            expiresOn: new Date(new Date().valueOf() + (10 * 60 * 1000)),   // 10 minutes
        };
    
        const sasToken = generateAccountSASQueryParameters(
            sasOptions,
            sharedKeyCredential 
        ).toString();
    
        console.log(`sasToken = '${sasToken}'\n`);
    
        // prepend sasToken with `?`
        return (sasToken[0] === '?') ? sasToken : `?${sasToken}`;
    }
    
  3. 사용할 때까지 SAS 토큰을 보호합니다.

계정 SAS 토큰으로 Blob service 사용

계정 SAS 토큰을 사용하려면 계정 이름과 결합하여 URI를 만들어야 합니다. URI를 전달하여 blobServiceClient를 만듭니다. blobServiceClient가 있으면 해당 클라이언트를 사용하여 Blob service에 액세스할 수 있습니다.

// connect-with-sas-token.js
const { BlobServiceClient } = require('@azure/storage-blob');
require('dotenv').config()

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
const sasToken = process.env.AZURE_STORAGE_SAS_TOKEN;
if (!accountName) throw Error('Azure Storage accountName not found');
if (!sasToken) throw Error('Azure Storage accountKey not found');

const blobServiceUri = `https://${accountName}.blob.core.windows.net`;

// https://YOUR-RESOURCE-NAME.blob.core.windows.net?YOUR-SAS-TOKEN
const blobServiceClient = new BlobServiceClient(
  `${blobServiceUri}?${sasToken}`,
  null
);

async function main(){
  
  const containerName = 'REPLACE-WITH-EXISTING-CONTAINER-NAME';
  const blobName = 'REPLACE-WITH-EXISTING-BLOB-NAME';

  const timestamp = Date.now();
  const fileName = `my-new-file-${timestamp}.txt`;

  // create container client
  const containerClient = await blobServiceClient.getContainerClient(containerName);

  // create blob client
  const blobClient = await containerClient.getBlockBlobClient(blobName);

  // download file
  await blobClient.downloadToFile(fileName);

  console.log(`${fileName} downloaded`);
  
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(`error: ${ex.message}`));

dotenv 패키지는 .env 파일에서 스토리지 계정 이름을 읽는 데 사용됩니다. 이 파일은 소스 제어에 체크 인하면 안 됩니다.

참고 항목