Azure 事件中心 - 在发送事件之前对用户进行身份验证

Azure Event Hub - Authenticate user before Sending the events

我可以使用下面的方法将事件发送到 EventHub Link。

https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-framework-getstarted-send#send-events

以上文章是使用 Eventhub 连接字符串发送事件中心。如果某人(未知用户)知道我的事件中心连接字符串,他们也可以发送事件。

所以我想在门户中添加一些像下面这样的用户,下面的用户("Access control" 在下面的屏幕截图中)列表只能将事件发送到我的 EventHub。有什么办法可以这样限制吗?

不,你不能。评论中提到a preview feature,它使用azure ad RBAC角色授权访问eventhub,但这只是另一种不同的方式,如果有人知道你的连接字符串,他也可以发送事件。

我的解决方法是使用 Azure Keyvault 将连接字符串存储为机密。然后你可以设置keyvault的Access policies,添加你想要的user/service principal。然后只有 users/service 具有权限的主体才能检索秘密。

在你提到的示例中,它使用纯文本 static string connectionString = "namespace connection string",我想你可能认为它不安全。将连接字符串存储在密钥库中后,您可以使用 keyVaultClient.GetSecretAsync 获取秘密以避免暴露连接字符串。

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
             KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
             var secret = await keyVaultClient.GetSecretAsync("https://<YourKeyVaultName>.vault.azure.net/secrets/AppSecret")
                     .ConfigureAwait(false);
             Message = secret.Value;

更多详情,您可以参考以下链接。