标签: azure-managed-identity

ManagedIdentityCredential 身份验证不可用,未找到托管身份端点

我试图允许应用程序服务(python)从azure keyvault获取秘密,而不使用硬编码的客户端id/秘密,因此我尝试使用ManagedIdentity。

  1. 我已在我的服务应用程序中启用系统和用户分配的功能
  2. 我在保管库中创建了一项策略,其中服务应用程序被授予访问机密的权限

代码:

credentials_object = ManagedIdentityCredential()
client = SecretClient(vault_url=VAULT_URL, credential=credentials_object)
value = client.get_secret('MYKEY').value
Run Code Online (Sandbox Code Playgroud)

错误(当部署应用程序和在本地运行时):

azure.identity._exceptions.CredentialUnavailableError: ManagedIdentityCredential 身份验证不可用,未找到托管标识终结点。

我缺少什么?谢谢你!

python credentials azure azure-keyvault azure-managed-identity

22
推荐指数
2
解决办法
4万
查看次数

在ARM模板部署中引用托管服务标识

使用新的MSI功能部署Microsoft.Web资源时,部署后可以看到创建的用户的principleId GUID.下面的屏幕截图显示了ARM模板中的结构.

在此输入图像描述

稍后在管道中获取此GUID以便能够在(例如)Data Lake Store中分配访问权限的最佳方法是什么?

是否可以使用任何现有的ARM模板函数来执行此操作?

azure-resource-manager azure-managed-identity

20
推荐指数
2
解决办法
3951
查看次数

如何在Visual Studio中使用MSI进行开发?

我需要在开发和调试期间访问我的Key Vault.是否可以通过使用托管服务标识?我看到我的代码可以在VM上部署应用程序时获得此凭据,但是如果我在本地工作站上进行开发时需要它们呢?

azure azure-keyvault azure-managed-identity

12
推荐指数
1
解决办法
2886
查看次数

当 Web 应用程序位于 AAD 组中时,用户“<令牌识别的主体>”登录失败

当 Azure Active Directory 管理员是 AAD 组时,我的 Web 应用程序无法登录数据库服务器

我一直在我的 Azure Web Apps 上推出“新”托管身份功能,并取得了不同程度的成功。简而言之,我们希望能够通过 Active Directory 控制对 Azure SQL 服务器的访问。我们已在 Web 应用程序上启用托管身份:

在此输入图像描述

我决定创建一个 AAD 组,添加所有 DBA 以及有权与该数据库服务器通信的 Azure Web 应用程序。然后,该 AAD 组将被分配为 Azure Active Directory 管理员。这是包含许多 DBA 和 Web 应用程序作为成员的 AAD 组:

在此输入图像描述

设置数据库服务器的 Azure Active Directory 管理员:

在此输入图像描述

此时,组内用户可以通过SSMS成功登录,而Web App则不能。"Login failed for user '<token-identified principal>'"我在 Web 应用程序日志中 收到错误。如果我直接将Web App设置为Azure Active Directory Admin,则可以成功登录。

我已通过 .scm 安装了 MSI 验证程序。(Kudu) 仪表板,并确认当组分配为管理员和 Web 应用程序直接分配为管理员时,Web 应用程序可以成功从数据库服务器检索令牌。(为了完整起见,我还尝试从它不应该访问的服务器访问令牌,并且无法按预期检索)

我还尝试过以下方法:

  • 删除并重新创建 AAD 组。
  • 向上或向下扩展 Web 应用程序和数据库以触发重新启动/缓存清除。 …

azure azure-active-directory azure-sql-database azure-web-app-service azure-managed-identity

11
推荐指数
1
解决办法
5万
查看次数

如何从 Azure 容器应用服务使用 Azure ACR 进行身份验证

我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从我们的 ACR 中提取 docker 映像,而不是将用户名和密码存储在应用程序设置中(除了我们想要编写这些部署的脚本之外,如果应用程序服务需要用户名和密码,那么我们必须将它们存储在源代码管理中)。

令人难以置信的是,我找不到有关此场景的任何文档。我发现的最接近的是使用托管身份从虚拟机中提取 ACR 映像[ https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-management-identity],我不能将其用作指南,因为最后一步(我唯一缺少的一点)是通过SSH 进入虚拟机并az acr login --name myContainerRegistry在命令行中运行。

我必须去的地方:

  • 我已经创建了 ACR 和容器应用服务
  • 我已将该角色授予ACR Pull应用Reader程序服务的系统分配身份
  • 尝试拉取容器映像时,应用程序服务访问被拒绝

我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。

azure azure-container-registry azure-managed-identity

10
推荐指数
2
解决办法
9611
查看次数

如何在本地和托管环境(Azure 和本地)中使用 DefaultAzureCredential 来访问 Azure Key Vault?

我们有一个 Web api(.NET 5),它可以从 Azure KeyVault 访问一些机密。
在用于开发的本地计算机中,由于我是创建的新保管库的所有者,因此我的电子邮件具有对 keyvault 的访问权限。

因此,我通过 VS --> 工具 > 选项 --> Azure 服务身份验证 --> 帐户选择 --> "myemail@.com" 选择了我的帐户

我有下面的代码来从 Keyvault 获取机密并通过配置进行访问,就像我们访问 appsettings 值一样。

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            var appSettings = config.Build();
            var credentialOptions = new DefaultAzureCredentialOptions();
            var credential = new DefaultAzureCredential(credentialOptions);
            config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
        })
       .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
Run Code Online (Sandbox Code Playgroud)

我们在服务和控制器层中访问像 _configuration["secret"] 这样的秘密值。

我的查询是

1,如果我将此代码部署到本地服务器,它将如何工作(开发环境是本地服务器)?

2,如果我将此Web API部署到Azure,如何使用身份AD应用程序访问密钥保管库而无需更改任何代码。我们注册了 AD 应用程序,该应用程序具有对此特定 Vault 的读取权限。

我希望代码能够在本地和 Azure 上无缝运行。

azure-keyvault azure-managed-identity .net-5 defaultazurecredential

10
推荐指数
1
解决办法
1万
查看次数

如何在 Azure Function 中使用 Azure 托管标识通过触发器访问服务总线?

我在 Azure 中创建了一个 ServiceBus 命名空间,以及一个主题和一个订阅。我还有一个简单的 Azure 版本 1 函数,它触发 ServiceBus 中接收到的主题,如下所示:

[FunctionName("MyServiceBusTriggerFunction")]
public static void Run([ServiceBusTrigger("myTopic", "mySubscription", Connection = "MyConnection")]string mySbMsg, TraceWriter log)
{
    log.Info($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
}
Run Code Online (Sandbox Code Playgroud)

当我使用主题的共享访问策略在函数应用程序设置中定义连接字符串时,该函数可以很好地触发 ServiceBus 中的主题,如下所示:

Endpoint=sb://MyNamespace.servicebus.windows.net/;SharedAccessKeyName=mypolicy;SharedAccessKey=UZ...E0=
Run Code Online (Sandbox Code Playgroud)

现在,我想使用托管服务标识 (MSI) 来访问 ServiceBus,而不是共享访问密钥。根据这个(https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/services-support-msi)应该是可能的,除非我误解了一些东西。我还没有设法让它工作。

我试过的是

  • 在 Azure 门户中为我的函数设置托管服务标识“开启”
  • 为 Azure 门户中 ServiceBus 访问控制部分中的函数赋予所有者角色
  • 像这样设置 MyFunction 的连接字符串:Endpoint=sb://MyNamespace.servicebus.windows.net/

该功能未在此设置中触发,所以我错过了什么或我做错了什么?如果您有任何建议可以帮助我走得更远,我将不胜感激。谢谢。

triggers azureservicebus azure-functions azure-managed-identity

9
推荐指数
2
解决办法
2021
查看次数

使用 Azure.Security.KeyVault.Secrets 的 Net core Key Vault 配置

我发现使用托管标识连接到 Azure KeyVault 很容易。该文档显示了如何做到这一点:

             var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var keyVaultClient = new KeyVaultClient(
                new KeyVaultClient.AuthenticationCallback(
                    azureServiceTokenProvider.KeyVaultTokenCallback));

            config.AddAzureKeyVault(
                $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
                keyVaultClient,
                new DefaultKeyVaultSecretManager());
        
Run Code Online (Sandbox Code Playgroud)

然后我意识到它需要Microsoft.Azure.KeyVault已弃用的包。所以我正在努力弄清楚如何使用 SDK 4 执行上述操作。我找到的所有文档都与 SDK 3 相关。

在此处输入图片说明

[编辑] 我发现以下代码可以使用带有 SDK 4 的托管标识来获取 azure KeyVault Secret。但是我看不到如何将它添加到我的配置中。它曾经是通过 config.AddAzureKeyVault()Microsoft.Extensions.Configuration.AzureKeyVault 包完成的,但它与 SDK 4 SecretClient 不兼容:

  return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                    var azureCredentialOptions = new DefaultAzureCredentialOptions();
                
                  
                    var credential = new DefaultAzureCredential(azureCredentialOptions);
                    var secretClient = new SecretClient(new System.Uri("https://mykeyvault.vault.azure.net/"), credential);
                    var secret = secretClient.GetSecret("StorageConnectionString");
                    config.AddAzureKeyVault()                 
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }); …
Run Code Online (Sandbox Code Playgroud)

azure azure-keyvault azure-managed-identity

9
推荐指数
2
解决办法
3169
查看次数

使用用户管理标识从 Azure Databricks 连接到 Azure SQL

我正在尝试从 Azure Databricks 工作区读取 Azure SQL 实例上的数据,避免使用用户名/密码个人凭据进行自动、定期数据获取和分析。我认为使用托管标识可以完成这项工作,但它看起来不如 Azure Functions 或 Web 服务顺利。Databricks 支持此功能吗?

我需要 Databricks 实例中不存在的环境变量,例如 IDENTITY_ENDPOINT 和 IDENTITY_HEADER,遵循文档https://learn.microsoft.com/en-us/azure/app-service/overview-management-identity

任何见解将不胜感激!

azure azure-sql-database azure-managed-identity azure-databricks

9
推荐指数
1
解决办法
1390
查看次数

使用本地和 Azure 上的 Azure Function App 中的托管标识连接 Azure CosmosDB

DocumentDB Account Contributor我为函数应用程序创建了一个托管身份,并按照以下两个部分将其分配给

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#assign-a-system-assigned-management-identity-to-a-function-app

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#grant-access-to-your-azure-cosmos-account

Microsoft.Azure.Services.AppAuthentication

当我尝试运行以下部分中的代码时出现异常:

https://learn.microsoft.com/en-us/azure/cosmos-db/management-identity-based-authentication#programmatically-access-the-azure-cosmos-db-keys

无法加载文件或程序集“System.Text.Encodings.Web,Version=6.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。该系统找不到指定的文件。在 System.Text.Json.Serialization.Metadata.JsonPropertyInfo.DeterminePropertyName() 在 System.Text.Json.Serialization.Metadata.JsonPropertyInfo.GetPolicies(Nullable 1 ignoreCondition, Nullable1 declaringTypeNumberHandling) 在 ... System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)位于 C:.ME\MyLab.Code\AzureCode\CosmosDB\azure-cosmos-dotnet- 中的 Cosmos.Samples.AzureFunctions.AzureFunctionsCosmosClientMI.d__7.MoveNext() 处的 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() v3-usage\AzureFunctions\AzureFunctionsCosmosClientMI.cs:第 85 行

Azure.身份

由于AppAuthenticationMS 不推荐,因此我Azure.Identity通过以下链接转而使用: https://learn.microsoft.com/en-us/dotnet/api/overview/azure/identity-readme ?view=azure-dotnet

https://joonasaijala.com/2021/07/01/how-to-using-management-identities-to-access-cosmos-db-data-via-rbac-and-disabling-authentication-via-keys/

和下面的代码

 static string cosmosUrl = "https://xxx.documents.azure.com:443/";
    private static CosmosClient client = new CosmosClient(cosmosUrl, new DefaultAzureCredential());
   var container = client.GetContainer("FamilyDatabase", "FamilyContainer");
        try
        {
            var result = await container.CreateItemAsync<Item>(data, new PartitionKey(data.LastName));
            return new OkObjectResult(result.Resource.Id);
        }
        catch (CosmosException cosmosException)
        {
            log.LogError("Creating item failed with …
Run Code Online (Sandbox Code Playgroud)

azure azure-functions azure-cosmosdb azure-managed-identity

8
推荐指数
1
解决办法
6448
查看次数