【问题标题】:ArgumentNullException when attempting to create KeyVault via Azure Management Fluent Api in Azure Function尝试通过 Azure Function 中的 Azure Management Fluent Api 创建 KeyVault 时出现 ArgumentNullException
【发布时间】:2021-06-17 02:01:52
【问题描述】:

我添加了一个服务总线触发函数,以通过 Microsoft.Azure.Management.Fluent 库创建密钥库。

该函数在本地运行良好,并在我的 MSDN 订阅中创建了一个新的密钥保管库,但是,当它部署到 Azure 并尝试使用函数应用托管服务标识在我们公司的测试订阅中创建密钥保管库时,它失败并显示 @ 987654324@ 来自Guid.Parse

堆栈跟踪

Inner exception System.ArgumentNullException handled at CollectorFunctions.Proxies.KeyVaultProxy+d__9.MoveNext:
at System.Guid.Parse (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.WrapModel (Microsoft.Azure.Management.KeyVault.Fluent, Version=1.0.0.68, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.Define (Microsoft.Azure.Management.KeyVault.Fluent, Version=1.0.0.68, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
at Microsoft.Azure.Management.KeyVault.Fluent.VaultsImpl.Microsoft.Azure.Management.ResourceManager.Fluent.Core.CollectionActions.ISupportsCreating<Microsoft.Azure.Management.KeyVault.Fluent.Vault.Definition.IBlank>.Define (Microsoft.Azure.Management.KeyVault.Fluent, Version=1.0.0.68, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
at CollectorFunctions.Proxies.KeyVaultProxy+d__9.MoveNext (CollectorFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullCollectorFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: D:\a\1\s\src\Server\CollectorFunctions\Proxies\IKeyVaultProxy.csCollectorFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: 86)

运行以下语句时发生错误,该语句取自从此复制链接的ManageKeyVault sample project。提供的参数都具有有效值,并且通过 IAzure.ResourceGroups.GetByNameAsync(resourceGroupName) 查找了 resourceGroup。

await _azure.Vaults
      .Define(newKeyVaultName)
      .WithRegion(resourceGroup.Region)
      .WithExistingResourceGroup(resourceGroupName)
      .WithEmptyAccessPolicy()
      .CreateAsync();

【问题讨论】:

  • 因此,在本地运行时,您的身份将被用于在 sub 中创建密钥保管库。在 Azure 中运行时,使用的是什么身份?该身份是否与您拥有相同的权利?
  • 它使用函数应用的托管服务标识。该身份最初被分配给资源组的 Key Vault 参与者角色,然后提升为参与者角色,最后是资源组的所有者,但总是得到相同的错误。
  • 我认为是这一行:github.com/Azure/azure-libraries-for-net/blob/… 正在寻找一个 TenantId,但我不知道如何提供它。

标签: azure azure-functions azure-management-api


【解决方案1】:

在我的例子中,我在获取凭据时没有意识到有一个tenantId 参数。我需要提供tenantId:

var msi = new MSILoginInformation(MSIResourceType.VirtualMachine);
var creds = SdkContext.AzureCredentialsFactory.FromMSI(msi,
 AzureEnvironment.AzureGlobalCloud, 
*** tenantId ***);

由于您的堆栈跟踪看起来与我的完全一样,我猜这就是问题所在。如果您在获得凭据时指定tenantID,那么我认为它应该适合您。要获取 TenantId,请转到您的身份所在的 Azure AD,它应该列在概览页面上。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2012-10-12
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多