Означает ли подпись общего доступа Azure любой доступ к моим BLOB-объектам?

Я пишу службу резервного копирования для резервного копирования базы данных SQL и сохранения ее в облачном хранилище. На самом деле я уже реализовал это в Amazon S3, но поскольку приложение будет распространяться среди клиентов, я не могу хранить ключи API вместе с приложением. Я рассматривал возможность использования веб-службы для предоставления ключей, но в настоящее время это не лучший вариант (поскольку при этом сохраняется возможность кражи ключей).

Итак, я изучил Windows Azure, службу BLOB-объектов, и увидел, что у них есть эти подписи общего доступа, которые можно использовать для предоставления доступа к ресурсам в облаке. Вы также можете использовать подпись для размещения больших двоичных объектов в облаке. Но читая документы MSDN, я не могу не думать это небезопасная система. Любой, кто знает 1. точные имена контейнеров для моей учетной записи и 2. как формировать подпись, сможет получить доступ к объектам. При использовании этой подписи секретный ключ не требуется. По крайней мере, у меня такое впечатление от чтения документации.

Итак, наконец, к моему вопросу. Правильно ли я оцениваю подписи общего доступа в Azure, если нет, то почему? И может ли кто-нибудь предложить альтернативный способ сделать то, что я пытаюсь достичь.


person BrianB    schedule 24.06.2010    source источник
comment
Итак, теперь я вижу, что вы должны вычислить хэш подписи, зашифровав своим ключом. Так что это ответ на мой первый вопрос (я ошибся в своей первоначальной оценке). Azure позволяет создавать неограниченное количество контейнеров, поэтому у меня будет контейнер для каждого клиента. Клиент позвонит в мою веб-службу, которая затем сгенерирует уникальную для клиента подпись. Таким образом, любые ключи шифрования, имена контейнеров и т. Д. Могут быть защищены на моем сервере, а не в клиентской системе.   -  person BrianB    schedule 24.06.2010


Ответы (1)


Подписи общего доступа могут быть привязаны к определенному контейнеру или конкретному BLOB-объекту. Затем они могут указать, какие разрешения они предоставляют (чтение, запись, список BLOB-объектов), и они могут указать, как долго они действительны.

Единственный способ создать SAS - это иметь ключ хранилища, но любой, у кого есть SAS, может использовать его, чтобы делать то, что он позволяет.

Похоже, вы хотите разрешить всем своим клиентам писать капли, но не читать их? Если это так, то SAS, который указывает только разрешения на запись, должен помочь.

Но я предполагаю, что вы также хотите ограничить (или измерить) использование индивидуальных клиентов? Если это так, вам, вероятно, понадобится что-то активное на сервере (веб-служба?), Которая разрешает каждое использование и генерирует определенный SAS с коротким сроком действия, чтобы разрешить эту операцию. Затем вы можете отслеживать и выставлять счет за каждое использование.

person user94559    schedule 24.06.2010
comment
Мне также нужно будет разрешить чтение для функции восстановления, которую я еще не реализовал. Я думаю, что буду использовать веб-службу для генерации SAS в любое время, когда клиенту потребуется выполнить операцию в облаке. - person BrianB; 24.06.2010
comment
Наверное, глупый вопрос, но при создании подписи учитывается URL-адрес большого двоичного объекта? Значит, SAS, созданный для большого двоичного объекта, годится только для этого большого двоичного объекта? Если бы у меня был список URL-адресов больших двоичных объектов в этом контейнере, я не мог бы связать токен SAS с одного большого двоичного объекта на конце и получить доступ к другим? - person nmit026; 27.10.2017