Azure SDK 使用 CLI Creds 或 Managed Identity

Azure SDK use CLI Creds or Managed Identity

使用 AWS 时,如果您使用 aws configure 登录,则可以使用 AWS SDK,而无需从本地计算机以任何编程语言公开凭据。如果稍后 运行ning 在 aws 中(Lambda、EC2 等),完全相同的代码会在没有任何配置的情况下使用分配给资源的 IAM 角色。

我尝试使用 Azure 进行同样的操作,我认为 Azure.Identity.DefaultAzureCredential 确实可以做到这一点。但是我什至无法在本地 运行 我的代码:

            var blobServiceClient = new BlobServiceClient(storageUri, new DefaultAzureCredential());
            var containerClient = await blobServiceClient.CreateBlobContainerAsync("test-container");

如果 运行在 AppService 中,如何获得使用本地计算机上的 CLI 凭据进行身份验证的 BlobServiceClient 和托管身份。

在您的方案中,如您所用,DefaultAzureCredential 是与 BlobServiceClient 一起的最佳选择,但它不使用 CLI 凭据进行身份验证。

要使其正常工作,只需将服务主体的 Environment variables 设置为 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_CLIENT_SECRET。在 Azure 中,它使用 MSI 进行身份验证。


如果要使用CLI凭据进行身份验证,有AzureServiceTokenProvider,它也可以访问Azure存储,但不能与BlobServiceClient一起使用,您需要获得访问权限带有资源 https://storage.azure.com

的令牌
var azureServiceTokenProvider2 = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider2.GetAccessTokenAsync("https://storage.azure.com").ConfigureAwait(false);

然后使用access token调用Storge REST API,我觉得第一种比较方便,用哪个,看你自己了。