Azure Blob SAS с ограничением IP-диапазона - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь создать SAS URI / токены, чтобы разрешить загрузку моих BLOB-объектов хранилища Azure.

Я хотел бы сделать это на уровне BLOB-объектов, чтобы случайно не предоставить доступ к непреднамеренному ресурсу.

Текущий код, который я использую для этого:

public static string GetBlobSasUri(string containerName, string reference)
{
    // Create the CloudBlobContainer object
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExists();

    // Get a reference to a blob within the container.
    CloudBlockBlob blob = container.GetBlockBlobReference(reference);

    // Set the expiry time and permissions for the blob.
    // In this case, the start time is specified as a few minutes in the past, to mitigate clock skew.
    // The shared access signature will be valid immediately.
    SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
    sasConstraints.SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5);
    sasConstraints.SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMonths(1);
    sasConstraints.Permissions = SharedAccessBlobPermissions.Read;

    // Generate the shared access signature on the blob, setting the constraints directly on the signature.
    string sasBlobToken = blob.GetSharedAccessSignature(sasConstraints);

    // Return the URI string for the container, including the SAS token.
    return blob.Uri + sasBlobToken;
}

Это в значительной степени основано на примере в документации здесь:

Создание URI подписи общего доступа для BLOB-объекта

Это работает.Тем не менее, в другой документации по SAS я вижу, что можно также ограничиться определенным диапазоном IP-адресов:

Пример службы SAS Uri

Я понимаю токены SAS:что подпись подписывает все параметры, так что я не думаю, что это так просто, как просто добавить свой диапазон IP-адресов к SAS URI, возвращенному из кода, который я вставил выше, поскольку подпись тогда не будет соответствовать.

ОднакоSharedAccessBlobPolicy имеет только три поля, которые являются временем начала / окончания доступа, а также разрешениями.Я ничего не вижу о диапазонах IP-адресов.

Можно ли установить эти разрешенные диапазоны при создании URI SAS на уровне BLOB-объектов, а не для полной учетной записи?

1 Ответ

0 голосов
/ 06 февраля 2019

Пожалуйста, используйте код ниже:

        public static string GetBlobSasUri(string ipAddressFrom, string ipAddressTo)
        {
            CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("account_name", "account_key"), true);
            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
            var cloudBlobContainer = cloudBlobClient.GetContainerReference("test-1");

            cloudBlobContainer.CreateIfNotExists();

            CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference("a.txt");

            var ipAddressRange = new IPAddressOrRange(ipAddressFrom, ipAddressTo);

            var sasBlobToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.List,
                SharedAccessExpiryTime = new DateTimeOffset(DateTime.UtcNow.AddHours(1))
            }, null, null,null, ipAddressRange);


            return blob.Uri + sasBlobToken;
        }
...