Поделиться через


Создание и использование маркеров SAS учетной записи с помощью хранилища BLOB-объектов Azure и JavaScript

В этой статье показано, как создавать и использовать токены SAS учетной записи для использования библиотеки клиента Azure Blob Storage версии 12 для JavaScript. После подключения ваш код может работать с контейнерами, BLOB-объектами и функциями службы хранилища Blob.

Примеры фрагментов кода доступны на GitHub в виде исполняемых файлов Node.js.

Пакет (npm) | Примеры | Справочная документация по API | Исходный код библиотеки | Оставить отзыв

Токены SAS учетной записи

Маркер SAS учетной записи — это один из типов маркера SAS для делегирования доступа, предоставляемого службой хранилища Azure. Маркер SAS учетной записи предоставляет доступ к хранилищу Azure. Маркер является только ограничивающим, как определяется при его создании. Поскольку любой, у кого есть маркер, может использовать его для доступа к аккаунту хранения, следует определить маркер с самыми строгими разрешениями, которые всё ещё позволяют маркеру выполнить необходимые задачи.

Рекомендации по созданию маркеров включают ограничение разрешений:

  • Службы: BLOB, файл, очередь сообщений, таблица
  • Типы ресурсов: служба, контейнер или объект
  • Такие разрешения, как создание, чтение, запись, обновление и удаление

Добавление необходимых зависимостей в приложение

Включите необходимые зависимости для создания маркера SAS учетной записи.

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

Чтобы создать учетные данные общего ключа, получите переменные среды

Используйте имя и ключ учетной записи хранения BLOB-объектов для создания хранилища 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. Создайте объект options.

    Область возможностей маркера SAS определяется accountSASSignatureValues.

    Используйте следующие вспомогательные функции, предоставляемые пакетом SDK, чтобы создать правильные типы значений для значений:

  2. Передайте объект функции generateAccountSASQueryParameters вместе с SharedKeyCredential, чтобы создать маркер 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 до его использования.

Используйте службу хранения BLOB с токеном SAS учетной записи

Чтобы использовать маркер SAS учетной записи, необходимо объединить его с именем учетной записи для создания URI. Передайте URI для создания blobServiceClient. Получив blobServiceClient, вы можете использовать этого клиента для доступа к службе блобов.

// 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. Этот файл не следует добавлять в систему контроля версий.

См. также