I\xe2\x80\x99m 尝试使用 Azure Key Vault 存储实体框架的 Web api 连接字符串。理想情况下,我\xe2\x80\x99d 希望避免将 Key Vault nuget 包与我的数据访问代码耦合。我的 dbContext 类有两个构造函数:
\n\npublic MyDbContext() : base("DefaultConnection")\n{ . . . }\n\npublic MyDbContext(string connectionString) : base(connectionString)\n{ . . . }\nRun Code Online (Sandbox Code Playgroud)\n\n我的代码使用无参数构造函数,它从 Web 配置获取连接字符串。在某些地方,我实例化了一个新的 MyDbContext 对象,这禁止使用注入的解决方案。
\n\n我采取的方法是使用连接字符串定位器在 dbcontext 上设置静态属性:
\n\npublic interface IConnectionStringLocator\n{ string Get(); }\n\npublic class DefaultConnectionStringLocator : IConnectionStringLocator\n{\n public string Get()\n {\n return "DefaultConnection";\n }\n}\n\npublic static IConnectionStringLocator ConnectionStringLocator { get; set; } =\n new DefaultConnectionStringLocator();\nRun Code Online (Sandbox Code Playgroud)\n\n我的 Web api 项目有用于检索密钥保管库机密的 nuget 包。所以在我的 Global.asax 文件中我有这个: …
entity-framework azure azure-keyvault azure-managed-identity
我想将多个用户分配的托管服务标识分配给 Azure 中的 VM 规模集。我可以通过遵循文档来做到这一点。
我还没有弄清楚如何为特定身份请求令牌。通过 IMDS 端点请求令牌的文档没有提到任何用于指定(例如 clientId)的请求参数。
有什么线索吗?
我正在使用适用于 .NET 的 Microsoft.Azure.Services.AppAuthentication 库 (v1.0.3),使用托管服务标识从 Azure Function 应用连接到 Blob 存储。授权码:
var tokenProvider = new AzureServiceTokenProvider();
string accessToken = await tokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
var tokenCredential = new TokenCredential(accessToken);
var credentials = new StorageCredentials(tokenCredential);
var storageUri = new Uri($"https://{accountName}.blob.core.windows.net");
var client = new CloudBlobClient(storageUri, credentials);
Run Code Online (Sandbox Code Playgroud)
无论给定的 RBAC 角色如何,现有存储帐户都拒绝接受 MSI:
Microsoft.WindowsAzure.Storage.StorageException: Server failed to authenticate the request.
Make sure the value of Authorization header is formed correctly including the signature.
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteAsyncInternal[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExistsAsync(BlobContainerPublicAccessType accessType, …Run Code Online (Sandbox Code Playgroud) azure azure-active-directory azure-blob-storage azure-functions azure-managed-identity
我设法让下面的代码工作(完整代码在这里)以使用 Azure 托管标识进行身份验证(通过 Visual Studio),并在不使用凭据的情况下访问 Azure 存储帐户。
const string storageResource = "https://storage.azure.com/";
var authResult = await azureServiceTokenProvider.GetAuthenticationResultAsync(storageResource, cancellationToken: cancellationToken);
Run Code Online (Sandbox Code Playgroud)
代码设法找到我的用户登录到 Visual Studio 并使用它来获取令牌,一切顺利。
但是,此代码作为 Azure DevOps 构建管道中库集成测试的一部分执行。
我找到了在 Azure DevOps 中创建到 Azure 的服务连接时创建的服务主体,并赋予它相同的Storage Blob Data Contributor角色,希望 Azure DevOps 会使用它来运行代码,但没有成功。
所以我的问题是:
如何获取在 Azure DevOps 构建管道中运行的代码,以便能够使用AzureServiceTokenProvider?
顺便说一句,错误信息:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException :参数:连接字符串:[未指定连接字符串],资源:https : //storage.azure.com/,权限:。异常消息:尝试了以下 3 种方法来获取访问令牌,但均无效。参数:连接字符串:[未指定连接字符串],资源:https : //storage.azure.com/,权限:。异常消息:尝试使用托管服务标识获取令牌。无法获取访问令牌。重试 5 次后失败。MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"} 参数:连接字符串:[未指定连接字符串],资源:https:, 权威: 。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。在“C:\Users\VssAdministrator\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json”中找不到 Visual …
将市场托管应用程序产品/服务部署到客户订阅中时,您可以在与托管应用程序关联的托管资源组中创建一个标识。但是,为了使该身份具有任何权限,必须为其分配角色。
当发布者和客户位于同一租户中时,可以按预期创建 roleAssignment,并且身份在托管资源组内具有权限。
但是,当客户位于不同的租户(和活动目录)中时,我会收到以下错误:
在租户“[PUBLISHER TENANT ID]”中找不到主体。如果您尝试将此角色分配放入租户“[CUSTOMER TENANT ID]”中,则必须指定 delegatedManagedIdentityResourceId 属性
看看上面提到的delegatedManagedIdentityResourceId,它很快就会变得非常棘手,我不确定这就是我想要走的路,或者它是否能让我到达我需要的地方,即在托管资源组中拥有一个身份,有权在托管资源组内执行读/写操作。
谢谢。
Azure CLI 世界中是否有用于以下命令的挂件?
New-AzureADServiceAppRoleAssignment -ObjectId $clientManagedIdentityObjectId -Id $serverAppRoleId -ResourceId $serverEnterpriseAppObjectId -PrincipalId $clientManagedIdentityObjectId
Run Code Online (Sandbox Code Playgroud)
我想将托管身份添加到appRole企业应用程序内。
az ad app permission add似乎没有做正确的事情,或者我误解了记录不足的参数。
EF Core 连接池似乎无法与用户分配的托管身份正常工作。我的网页从 Angular 前端向 Web API 控制器发出 3 次 Ajax 调用。控制器使用包含DbContext实现IDisposable.
我们使用默认依赖项容器和默认DbContext设置运行 .NET Core 3.1 和 EF Core,因此它是ServiceLifeTime.Scoped.
我的DbContextctor 有这样的托管身份代码。
var connection = (Microsoft.Data.SqlClient.SqlConnection)Database.GetDbConnection();
var options = new DefaultAzureCredentialOptions { ManagedIdentityClientId = surveyToolOptions.Value.ManagedIdentityClientId };
var credential = new DefaultAzureCredential(options);
var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
connection.AccessToken = token.Token;
Run Code Online (Sandbox Code Playgroud)
当我查看会话计数时,每次我点击该页面,它都会增加 3 个连接。它永远不会重用连接。它们在大约 4-5 分钟内也不会消失。
SELECT host_name, Program_name, COUNT(*)
FROM sys.dm_exec_sessions s
JOIN sys.databases AS d ON s.database_id = …Run Code Online (Sandbox Code Playgroud) 我遇到一个问题,无法通过 Azure 容器实例和 Azure 容器应用程序访问公司的容器注册表,这与 VNET 和公司注册表的私有链接以及无法链接动态启动的容器有关。最终我想使用 Kubernetes 作为我的批处理作业工作负载的平台,但现在我必须找到一种快速解决方案,使其能够运行至少一个容器,并且可能在必要时手动扩展这些容器(一个可能就足够了)大部分的时间)。
现在,我想要实现这一目标的方法是简单地启动一个虚拟机(必要时可能还会启动更多虚拟机)并使用(Python)应用程序代码在此虚拟机上运行 Docker 容器。
现在我想知道 Docker 容器是否可以使用分配给虚拟机的托管身份(系统/用户分配的),如果可以,如何使用。当分配给 ACI 容器并在启动时分配用户管理的标识时,我可以轻松地使用如下代码:
default_credential = DefaultAzureCredential()
q_client = QueueClient(
credential=default_credential,
queue_name='Queuename',
accounrt_url='someurl'
)
Run Code Online (Sandbox Code Playgroud)
并能够访问 - 例如 - 这个队列。无需请求任何类型的令牌,无需指定任何类型的环境变量。
现在我怀疑这是否适用于在分配了用户身份的虚拟机中运行的 docker 容器,因为用户身份并未真正直接分配给 docker 容器。有什么办法仍然可以实现这一目标,还是这是一个愚蠢的差事,我现在应该只使用环境变量吗?我不太喜欢后者的想法,但我还没有找到一种以这种特殊方式使用托管身份的方法。
virtual-machine azure docker azure-managed-identity azure-vm
是否可以配置托管标识来跨不同的 Azure 订阅访问 Azure 资源?
您能指出正确的方向吗?Azure 联盟不应该处理这个问题吗?
根据我的研发看来也不可行。 我似乎高估了这个Azure AD 功能吗?
Accounts in any organizational directory?
Run Code Online (Sandbox Code Playgroud)
我目前正在尝试使用 azure 二头肌部署资源组,但是,我在使用我的 azure 应用程序服务的密钥保管库时遇到了问题。我想知道我是否真的以正确的方式这样做。我有一个主要的二头肌文件,其内容如下:
// params removed for brevity...
targetScope = 'subscription'
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: 'rg-${appName}-${region}'
location: 'centralus'
}
module appServicePlan 'appplan.bicep' = {
params: {
sku: appServicePlanSku
appName: appName
region: region
}
scope: rg
name: 'AppServicePlanDeploy'
}
module keyVault 'keyvault.bicep' = {
params: {
keyVaultName: keyVaultName
sqlPassword: sqlServerPassword
webSiteManagedId: webSite.outputs.webAppPrincipal
}
scope: rg
name: 'KeyVaultDeploy'
dependsOn: [
webSite
]
}
module ai 'ai.bicep' = {
scope: rg
name: 'ApplicationInsightsDeploy'
params: {
name: appName
region: region …Run Code Online (Sandbox Code Playgroud) azure azure-keyvault azure-web-app-service azure-managed-identity azure-bicep