问题标签 [azure-managed-identity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8075 浏览

azure-devops - 在 Azure DevOps 构建管道中使用托管标识

我设法让下面的代码工作(完整的代码在这里)使用 Azure 托管标识进行身份验证(通过 Visual Studio)并可以在不使用凭据的情况下访问 Azure 存储帐户。

该代码设法找到我的用户登录到 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,响应:{"error":"invalid_request","error_description":"Identity not found"} 参数:连接字符串:[未指定连接字符串],资源:https:, 权威: 。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。在“C:\Users\VssAdministrator\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json”中找不到 Visual Studio 令牌提供程序文件参数:连接字符串:[未指定连接字符串],资源:https://storage.azure。 com/ , 权限: . 异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。错误:请运行“az login”来设置帐户。

TearDown : System.NullReferenceException : 对象引用未设置为对象的实例。

0 投票
1 回答
425 浏览

c# - Azure 托管标识本地调试身份验证失败

我有一个非常基本的例子,我似乎无法开始工作。我使用的用户是订阅所有者,因此应该可以访问所有内容。如果我在它尝试实际获取 blob 文本时运行以下命令,则它是当它跌倒时:

StorageException:服务器未能对请求进行身份验证。确保 Authorization 标头的值正确形成,包括签名。

不知道我在这里做错了什么,我已经检查过它正在尝试使用的用户,并且看起来正确并且具有正确的 AD 租户 ID:

在此处输入图像描述

我看到提到使用 UTCNow 在我的本地机器上检查时间,并确认它与 GMT 时间是正确的,除了我没有发现其他关于如何调试它的信息。

任何帮助表示赞赏

0 投票
1 回答
661 浏览

azure - 获取启用 MSI 的应用服务的 AAD 应用程序 ID 的最简单方法是什么

我部署了启用 MSI 的应用服务(具有系统分配的标识)。此应用服务将使用 MSI 检索对 AAD 保护的 Web API 的访问令牌。Web API 将从令牌中检索 appid 并根据预先配置的白名单检查 appid,如果 appid 不在白名单中,则拒绝访问。

因此,要允许启用 MSI 的应用服务访问 Web API,我需要知道 MSI 应用服务的应用程序 ID 并将其添加到白名单中。

我知道我可以在我的应用服务调试控制台中运行以下 powershell 脚本来检索令牌并通过解码令牌来获取 appid。

但我想知道是否有更简单的方法可以在不检索令牌的情况下获取 MSI 应用服务的 appid。

0 投票
1 回答
819 浏览

azure-active-directory - 尝试以调用 Azure IMDS 的访问权限禁止的方式访问套接字

我无法从应用服务调用 Azure 实例元数据服务 (IMDS) 以获取令牌。我们有一个 > 18 个月前创建的应用服务。最近我们启用Managed Identity了它。在 azure 门户页面上有一个很好的链接,描述了 MI 以及如何使用它。

但是,当我尝试http://169.254.169.254/metadata/identity/oauth2/token使用记录的参数进行 REST 调用时,我总是会遇到异常an attempt was made to access a socket in a way forbidden by its access permissions. 是否需要启用一些本地配置才能使该端点正常工作?这是因为这个应用服务是很久以前创建的吗?

我可以MSI VM Extension成功使用并获取令牌,但文档提到此 API 应该在 2019 年 1 月弃用。我也可以Microsoft.Azure.Services.AppAuthentication成功使用该库并获取有效令牌。

我更喜欢进行简单的 REST 调用,因为这是我们与其他依赖服务进行通信的方式。示例片段如下。

有人可以帮助我了解这里的最佳选择吗?

MSI VM 扩展(有效,但记录为已弃用)

使用 TokenProvider nuget(有效,但在代码中添加了另一个 nuget)

调用 Azure IMDS(抛出an attempt was made to access a socket in a way forbidden by its access permissions.

0 投票
1 回答
809 浏览

azure - java.lang.IllegalArgumentException:除非 ServiceClient 使用帐户密钥凭据,否则无法创建共享访问签名

我正在尝试使用 MSI 访问 Azure Blob 存储容器以生成共享访问签名。但是每次我尝试访问时,都会出现以下错误:

我不想使用凭据或 AAD 访问 blob 存储容器。只想使用 MSI,因为这是我们想要在应用程序中调整以访问 Azure 资源的独特模式。我错过了什么。我在我的 Splunk 日志中检查了 MSI 令牌正在成功生成。下面是我创建 CloudBlobClient 以访问 Blob 容器的方式:

我在stackoverflow上搜索了很多线程,这似乎与这个重复,但不是真的。有些是2017年的。

0 投票
2 回答
3167 浏览

azure-active-directory - 使用托管标识从本地 Azure 函数查询 Azure SQL 数据库

我想使用托管身份(即连接到 Visual Studio 的用户的身份,而不是在我的连接字符串中提供 UserId 和密码)从在我的机器上执行的 Azure 函数中查询 Azure SQL 数据库。

我按照Microsoft 文档上的本教程进行操作,因此我的 Azure SQL Server 有一个 AD 用户作为管理员,它允许我向使用我的 Azure 函数标识和其中的用户(以及我的函数应用程序)创建的 Azure AD 组授予权限(db_datareader)部署在 Azure 中)。

如果我在 Azure 中部署并运行我的 Azure Function,它能够查询我的数据库并且一切正常。但是当我在本地运行 Azure Function 时,出现以下错误:

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

我的函数代码如下:

代码正确检索令牌,错误发生在线await connection.OpenAsync()

如果我在 Azure Data Studio 中使用与连接到 Visual Studio 的用户相同的用户(该用户是具有数据库权限的 AD 组的成员)打开数据库,我可以毫无问题地连接和查询数据库。

这是一个已知问题还是我在这里遗漏了什么?

0 投票
2 回答
1443 浏览

azure - 在 Azure 数据工厂中使用 MSI 对 Azure Web 作业进行身份验证

通过 ADF 中的 Web 活动对 Azure Web 作业进行 MSI 身份验证给出错误 403 - 此 Web 应用程序已停止。问题,而通过基本身份验证调用相同的 Web 作业。

Web 作业作为手动触发托管在 Windows 应用服务上。

在 ADF V2 中,我创建了一个网络活动并提供了以下设置:
  • 我已在部署 Web 作业的应用服务中启用了 MSI,并在 AAD 中确认了这一点。
  • MSI 也在 ADF 上启用,在 AAD 中确认。
  • 在应用程序服务中,我在ACCESS CONTROL中添加了我的 ADF ,角色为Contributor并尝试了其他几个角色,例如Managed Application Operator Role

注意:在分配角色和启用 MSI 后,我也重新启动了我的应用服务。

这是 adf 中网络活动的代码:

我希望身份验证成功并且应该触发 Web 作业,但实际上 Web 应用程序没有通过 MSI 身份验证被调用,并且活动失败并输出错误 403 - 此 Web 应用程序已停止。

0 投票
2 回答
2064 浏览

c# - Azure 应用服务无法访问 SQL Server - 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

我在 Azure 中有一个应用服务作为我正在设计的系统的 API 运行。由于 API 负责直接访问数据库,我显然不想在任何地方存储包含凭据的连接字符串,因此我希望使用托管身份来授予应用服务对数据库的访问权限(也托管在 Azure 上) .

在 Azure 门户中,我在应用服务的“设置”部分启用了系统分配标识,然后通过 SQL Server -> 访问控制 -> 角色分配-> 添加为该服务赋予 SQL Server 所有者的角色。

据我了解,Active Directory 用户甚至不应该参与其中,因为他们是用户分配的身份而不是系统分配的身份,并且需要进行更多设置(或将其凭据存储在连接字符串中)。

至于代码,它几乎是这个 >> https://github.com/medhatelmasry/JwtAuthentication的副本,唯一的区别是我添加了

ConfigureServices方法的末尾,并按照 Microsoft 的说明Startup.cs将以下内容添加到构造函数中:ApplicationDbContext

但是,当尝试在 Azure 中运行此服务时,调用时出现异常services.BuildServiceProvider().GetService<ApplicationDbContext>().Database.Migrate();

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

我已经尝试过 StackOverflow、MSDN、Azure Help、Pluralsight 和任何来自 Google 的随机论坛,但都没有找到答案。我刚刚熬过了整整一个星期,每天熬夜到愚蠢的凌晨,试图修复连接字符串配置,却发现 Azure 正在更改我给它的连接字符串参数的名称,而没有说一句话它(任何微软文档中也没有关于它的任何内容)。

Azure 让我很头疼,我什至还没有开始向 API 添加端点,更不用说创建一个实际的应用程序来使用它了,这太荒谬了。

0 投票
3 回答
543 浏览

azure - 从 Azure VM 连接到 KeyVault 时出现异常

我正在从 Azure VM 运行我的应用程序并尝试与 KeyVault 连接。但我越来越低于例外

参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a 。异常消息:尝试了以下 3 种方法来获取访问令牌,但都没有奏效。

参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a 。异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识 (MSI) 端点。请检查您是否在具有 MSI 设置的 Azure 资源上运行。

参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a 。异常消息:尝试使用 Visual Studio 获取令牌。无法获取访问令牌。Visual Studio 令牌提供程序 Microsoft.Asal.TokenService.exe 的异常:TS003:错误,TS001:此帐户“用户名”需要重新验证。请转到工具->Azure 服务身份验证,然后重新对您要使用的帐户进行身份验证。

参数:连接字符串:[未指定连接字符串],资源:https ://vault.azure.net ,权限:https ://login.windows.net/1e465dc8-5f36-4ab9-9a49-57cbfdcfdf9a 。异常消息:尝试使用 Azure CLI 获取令牌。无法获取访问令牌。'az' 不是内部或外部命令、可运行程序或批处理文件。

我已经检查了先决条件,例如 - 1. 在 VM 的同一资源组中创建了 KeyVault 并添加了 2 个机密。2. 检查虚拟机是否已在 Active Directory 中注册,并且它具有系统分配的身份。3. 添加了允许读取和列出 VM 机密的访问策略。

这是代码,我缺少什么

0 投票
2 回答
412 浏览

azure - 如何在 Azure API 管理中指定用户分配的托管标识

在 Azure API 管理中设置系统分配的托管标识很容易 - 只需翻转刀片中的切换开关,或在 ARM 模板中使用以下代码片段

但是,我有几个 API 管理实例,我希望它们都使用相同的标识,正常的 Azure 解决方案是用户分配的 MSI。

但是,我找不到任何建议如何将对用户分配的 MSI 的引用添加到我的 Azure APIM 实例或在门户中进行设置的任何内容。