我是Azure机制的新手,遇到了这个问题。
我有一个azure函数,它应该由事件中心上发布的事件触发。我设置了在eventhub azure门户页面中获得的sas连接字符串(带有"manage"grant选项(,并在EventHubTrigger注释中使用了相同的密钥(这是一个Java 11函数(
起初,我收到一个错误,说明功能IP被阻止连接,错误我通过检查";允许可信的Microsoft服务";在事件集线器的网络设置中。
然后我得到了一个401未经授权的访问。
从事件中心删除所有IP限制(使其公开(,它开始侦听和处理事件中心中推送的事件。
显然,我想取消这些限制,但401例外不会停止。
我错过了什么?
编辑(添加功能代码(:
public class Function {
@FunctionName("feed-collector")
public void run(
@EventHubTrigger(name = "collect", consumerGroup = "$Default", connection = "AzureEventHubConnectionString", eventHubName = "feed-ordini", cardinality = Cardinality.MANY)
String message,
final ExecutionContext context
) {
context.getLogger().info(message);
}
}
AzureEventHubConnectionString在应用程序设置中定义,其值采用格式
Endpoint=sb://[集线器主机].servicebus.windows.net/;SharedAccessKeyName=[SasPolicyName];SharedAccessKey=[primarykey]
根据文档,
策略规则提供的权限可以是以下各项的组合:
- 发送–赋予向实体发送消息的权限
- 倾听–赋予实体倾听或接收的权利
- Manage–授予管理命名空间拓扑的权限,包括创建和删除实体
在您的情况下,由于您的功能正在侦听来自eventhub的事件,因此您应该使用侦听策略SAS。
SAS策略仅在实体级别而不在消费者级别提供粒度范围。
这意味着在命名空间级别或事件中心实例或主题级别定义的权限将应用于该实体的使用者组。
我设置了在事件中心azure门户页面中获得的sas连接字符串(带有"管理"授予选项(
事件中心令牌身份验证要求其客户端具有分配给其事件中心命名空间或事件中心实例或主题的管理权限或侦听特权
有关从策略生成签名(SAS令牌(的Java代码,请参阅此处。
要阅读有关策略规则的详细信息,如发送、侦听和管理、应用于命名空间或实体策略的规则限制以及使用SAS时的最佳实践,请查看此Microsoft文档。