如果 运行 作为托管身份,您可以创建/删除/更新存储的访问策略吗?

Can you create / delete / update stored access policies if running as a Managed Identity?

我不太确定如何在本地进行测试,因为我对使用托管身份的理解是我的代码需要作为 azure 资源发布,并且 运行 在该身份下才能访问另一个 azure已授予该身份特定权限的资源。

在我的例子中,我想测试我的 Web 应用程序,当 运行 使用托管身份时,可以创建存储访问策略,然后针对该策略生成 sas。代码基础来自this article。但是,正如该文章所述:

The underlying REST operation to create a stored access policy is Set Container ACL. You must authorize the operation to create a stored access policy via Shared Key by using the account access keys in a connection string.

因此,首先,如果我的网络应用 运行 在 azure 中使用对存储帐户具有完全权限的托管标识,它是否能够创建访问策略?其次,如何在不必将我的 Web 应用程序推送到 Azure 的情况下在本地进行测试?有没有办法使用 Azurite 对此进行测试?

您可以通过在 VS 或 VS Code 中将以下内容添加到您的启动文件来在本地进行测试,您的应用是否能够创建访问策略取决于您授予托管身份的访问权限,但可以肯定的是,如果你已经给了它正确的访问权限,那么是的,它可以做到这一点。

  var credentials = GetDefaultAzureCredential();

 private static DefaultAzureCredential GetDefaultAzureCredential() => new(new DefaultAzureCredentialOptions
        {
            ExcludeManagedIdentityCredential = false,
            ExcludeInteractiveBrowserCredential = false,
            ExcludeVisualStudioCodeCredential = false,

            ExcludeEnvironmentCredential = true,
            ExcludeAzureCliCredential = true,
            ExcludeSharedTokenCacheCredential = true,
            ExcludeVisualStudioCredential = true,

            VisualStudioCodeTenantId = Environment.GetEnvironmentVariable("TenantId"),
            InteractiveBrowserTenantId = Environment.GetEnvironmentVariable("TenantId")
        });

通过我的测试,它看起来像一个托管身份,即使在存储帐户上获得 'owner' 权限也无法创建/删除/更新访问策略。这需要使用 StorageSharedKeyCredential 来完成,因此创建的容器客户端将能够执行这些活动。