每小时生成的 Azure Blob 存储 SAS 密钥数量是否有限制?

Is there a limit on the amout of Azure Blob Storage SAS keys generated per hour?

根据 to this article 对 Azure 存储限制的详细说明,可以发出的 Azure 资源管理器请求的数量是有限制的。

此外,this article details limits of the ARM API. A post here 声称他们 运行 在发出过多请求后遇到问题 运行 列表操作。

我的问题是,对于 blob 存储,每小时生成的 SAS 密钥数量是否有限制?创建 SAS Key 是 ARM 事件吗?

例如,如果我正在使用 Python Azure 存储 SDK 并尝试在一小时内为各种 blob(存储帐户中的容器中的文件)创建 160,000 个 SAS 密钥,我会受到限制还是停止了吗?

我的应用程序依赖这些密钥来允许微服务访问受保护的数据,但如果我无法在短时间内创建大量 SAS 密钥,我将无法扩展此应用程序。

创建 SAS 令牌根本不与 Azure Api 交互 -

来自Using shared access signatures

The SAS token is a string you generate on the client side A SAS token you generate with the storage client library, for example, is not tracked by Azure Storage in any way. You can create an unlimited number of SAS tokens on the client side.

我找不到构建 Storage SAS 令牌的代码,但原理类似于以下内容(来自 here

private static string createToken(string resourceUri, string keyName, string key)
{
    TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
    var week = 60 * 60 * 24 * 7;
    var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week);
    string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
    HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
    var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
    var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}", HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
    return sasToken;
}

基本上,SAS 令牌是存储凭证的散列,被锁定以提供服务的子集。您可以根据需要创建任意多个,而无需与 Azure API 进行任何交互。