首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图以访问权限禁止的方式访问调用Azure IMDS的套接字

试图以访问权限禁止的方式访问调用Azure IMDS的套接字
EN

Stack Overflow用户
提问于 2019-07-11 23:31:10
回答 1查看 755关注 0票数 2

从应用程序服务调用Azure实例元数据服务(IMDS)以获取令牌时遇到问题。我们有一个创建于18个月前的App Service。最近我们为它启用了Managed Identity。在azure门户页面上,有一个描述MI以及如何使用它的great link

然而,当我尝试使用文档中的参数对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.,是否有一些我们需要启用的本地配置才能使这个端点工作?这是不是因为这个App Service在很久以前就创建了而无法工作?

我可以成功地使用MSI VM Extension并获取令牌,但文档中提到该接口应该在2019年1月被弃用。我还可以成功地使用Microsoft.Azure.Services.AppAuthentication库并获得有效的令牌。

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

有人能帮我理解一下最好的选择吗?

MSI VM扩展(工作正常,但已记录为已弃用)

代码语言:javascript
运行
复制
var endpoint = environment.MSI_ENDPOINT;
uri = new Uri($"{endpoint}?api-version=2017-09-01&resource=https://{audience}");
var req = new HttpRequestMessage(HttpMethod.Get, uri);
req.Headers.Add("Secret", environment.MSI_SECRET); 
var resp = await client.SendAsync(req);
var text = await resp.Content.ReadAsStringAsync();

使用TokenProvider nuget (可以工作,但会向代码添加另一个nuget )

代码语言:javascript
运行
复制
var azureServiceTokenProvider = new AzureServiceTokenProvider();
token = await azureServiceTokenProvider.GetAccessTokenAsync($"https://{audience}/");

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

代码语言:javascript
运行
复制
uri = new Uri($"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://{audience}");
var req = new HttpRequestMessage(HttpMethod.Get, uri);
req.Headers.Add("Metadata", "true"); // api requirement
var resp = await client.SendAsync(req);
var text = await resp.Content.ReadAsStringAsync();
EN

回答 1

Stack Overflow用户

发布于 2019-07-12 02:34:00

link you provided可以更清楚地了解这一点,但是IMDS只存在于Azure VM上,并且特定于Azure VM。

要从应用程序服务获取访问令牌,可以使用MSI_ENDPOINT和MSI_SECRET环境变量。这就是您给出的前两个选项的工作原理(请参阅implementation in AppAuth library)。这两个示例也使用相同的REST调用/API版本,这意味着使用这两个选项中的任何一个在功能上都是等效的。因此,当在这两个选项之间进行选择时,它会降低您的偏好。:)

AppAuth库/Nuget中的AzureServiceTokenProvider确实提供了令牌检索逻辑的抽象层,以及内置的令牌缓存,并在本地开发和生产/测试部署之间提供了简化的身份验证体验。您可以阅读有关AppAuth库及其好处的更多信息here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56992713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档