我试图允许应用程序服务(python)从azure keyvault获取秘密,而不使用硬编码的客户端id/秘密,因此我尝试使用ManagedIdentity。
代码:
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
使用新的MSI功能部署Microsoft.Web资源时,部署后可以看到创建的用户的principleId GUID.下面的屏幕截图显示了ARM模板中的结构.
稍后在管道中获取此GUID以便能够在(例如)Data Lake Store中分配访问权限的最佳方法是什么?
是否可以使用任何现有的ARM模板函数来执行此操作?
我需要在开发和调试期间访问我的Key Vault.是否可以通过使用托管服务标识?我看到我的代码可以在VM上部署应用程序时获得此凭据,但是如果我在本地工作站上进行开发时需要它们呢?
当 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 应用程序可以成功从数据库服务器检索令牌。(为了完整起见,我还尝试从它不应该访问的服务器访问令牌,并且无法按预期检索)
我还尝试过以下方法:
azure azure-active-directory azure-sql-database azure-web-app-service azure-managed-identity
我正在尝试设置我的应用程序容器服务,以便它可以使用托管身份从我们的 ACR 中提取 docker 映像,而不是将用户名和密码存储在应用程序设置中(除了我们想要编写这些部署的脚本之外,如果应用程序服务需要用户名和密码,那么我们必须将它们存储在源代码管理中)。
令人难以置信的是,我找不到有关此场景的任何文档。我发现的最接近的是使用托管身份从虚拟机中提取 ACR 映像[ https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication-management-identity],我不能将其用作指南,因为最后一步(我唯一缺少的一点)是通过SSH 进入虚拟机并az acr login --name myContainerRegistry在命令行中运行。
我必须去的地方:
ACR Pull应用Reader程序服务的系统分配身份我不知道下一步该做什么;就像我说的,我找不到关于这种情况的任何指南。
我们有一个 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
我在 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)应该是可能的,除非我误解了一些东西。我还没有设法让它工作。
我试过的是
该功能未在此设置中触发,所以我错过了什么或我做错了什么?如果您有任何建议可以帮助我走得更远,我将不胜感激。谢谢。
triggers azureservicebus azure-functions azure-managed-identity
我发现使用托管标识连接到 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 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
DocumentDB Account Contributor我为函数应用程序创建了一个托管身份,并按照以下两个部分将其分配给
Microsoft.Azure.Services.AppAuthentication
当我尝试运行以下部分中的代码时出现异常:
无法加载文件或程序集“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
和下面的代码
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)