【问题标题】:Azure SDK use CLI Creds or Managed IdentityAzure SDK 使用 CLI 凭据或托管标识
【发布时间】:2020-05-18 11:40:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: azure azure-sdk-.net azure-sdk azure-managed-identity


    【解决方案1】:

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

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


    如果要使用CLI凭据进行身份验证,有AzureServiceTokenProvider,它也可以访问azure storage,但不能与BlobServiceClient一起使用,需要通过资源@987654334获取访问令牌@,

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

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

    【讨论】:

    • 感谢您的建议,我无法让 AzureServiceTokenProvider 与我的托管标识一起使用,即使它们在我的本地计算机上运行。访问令牌调用始终会导致以下错误:尝试使用托管服务标识获取令牌。无法获取访问令牌。收到不可重试的错误。 MSI ResponseCode: BadRequest, Response: {"StatusCode":400,"Message":"No MSI found for specified ClientId/ResourceId.","CorrelationId":"5063fe91-5ee4-4685-ac01-731ad7a41abb"}
    • @Console 您为您的 Web 应用程序使用了系统分配的 MSI 还是用户分配的 MSI?你有没有为你的web应用设置AzureServicesAuthConnectionString,针对不同的场景,你需要设置不同的值,关注docs.microsoft.com/en-us/azure/key-vault/general/…
    • @Console 如果使用系统分配的MSI,需要使用RunAs=App,如果使用的是用户分配的MSI,需要使用RunAs=App;AppId={ClientId of user-assigned identity}。还要确保您使用的Microsoft.Azure.Services.AppAuthentication 是最新版本。
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2022-11-11
    • 2020-12-30
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多