使用托管标识和 REST 从 VM 调用 Azure 函数 API
Calling Azure function from VM using managed identity and REST API
我们可以从 Azure VM 对 azure 函数进行 REST API 调用吗?我们无法存储 API 的用户名和密码。我们可以使用任何其他身份验证来调用 azure 函数吗?例如:托管身份、证书?
是的,您可以使用托管身份 (MSI) 获取令牌,然后使用令牌对您的 Azure 函数进行 REST API 调用,请按照以下步骤操作。
1.Navigate 到门户中的虚拟机 -> Identity
-> 启用 System-assigned 身份。
2.Navigate 到门户中的函数应用程序 -> Authentication / Authorization
-> 使用 Azure AD 身份验证配置函数应用程序,按照此 doc,不要忘记设置Log in with Azure Active Directory
,配置完成后,需要一段时间才能为你的函数应用创建一个广告应用,最后会出现如下所示。
3.Then在function app中,创建一个HTTP触发器进行测试,注意:其Authorization level
需要设置为Anonymous
.
4.In我的示例,我RDP进入VM,然后使用powershell获取token,然后使用token调用函数,在你的情况下,你也可以使用其他语言取决于你要求。我的函数名称是 joyfun111
,在脚本中将其替换为您的函数名称,它在我这边有效。
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://joyfun111.azurewebsites.net' -Method GET -Headers @{Metadata="true"}
$content = $response.Content | ConvertFrom-Json
$Token = $content.access_token
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?name=world' -Method POST -Headers @{Authorization="Bearer $Token"}
更新:
如果是这样,您只需将功能键与功能url一起使用,将Authorization level
更改为Function
,禁用[=13=中的Azure AD身份验证],然后使用如下命令。
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?code=10X/IKJIeElrCRIxxxxH6A==&name=world' -Method POST -UseBasicParsing
您可以在功能页面中获取url功能
我们可以从 Azure VM 对 azure 函数进行 REST API 调用吗?我们无法存储 API 的用户名和密码。我们可以使用任何其他身份验证来调用 azure 函数吗?例如:托管身份、证书?
是的,您可以使用托管身份 (MSI) 获取令牌,然后使用令牌对您的 Azure 函数进行 REST API 调用,请按照以下步骤操作。
1.Navigate 到门户中的虚拟机 -> Identity
-> 启用 System-assigned 身份。
2.Navigate 到门户中的函数应用程序 -> Authentication / Authorization
-> 使用 Azure AD 身份验证配置函数应用程序,按照此 doc,不要忘记设置Log in with Azure Active Directory
,配置完成后,需要一段时间才能为你的函数应用创建一个广告应用,最后会出现如下所示。
3.Then在function app中,创建一个HTTP触发器进行测试,注意:其Authorization level
需要设置为Anonymous
.
4.In我的示例,我RDP进入VM,然后使用powershell获取token,然后使用token调用函数,在你的情况下,你也可以使用其他语言取决于你要求。我的函数名称是 joyfun111
,在脚本中将其替换为您的函数名称,它在我这边有效。
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://joyfun111.azurewebsites.net' -Method GET -Headers @{Metadata="true"}
$content = $response.Content | ConvertFrom-Json
$Token = $content.access_token
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?name=world' -Method POST -Headers @{Authorization="Bearer $Token"}
更新:
如果是这样,您只需将功能键与功能url一起使用,将Authorization level
更改为Function
,禁用[=13=中的Azure AD身份验证],然后使用如下命令。
Invoke-RestMethod -Uri 'https://joyfun111.azurewebsites.net/api/HttpTrigger1?code=10X/IKJIeElrCRIxxxxH6A==&name=world' -Method POST -UseBasicParsing
您可以在功能页面中获取url功能