2015-02-05 2 views
0

내 이벤트 허브 발행자 코드에서 device-ID (또는 publisher-Id)와 함께 SAS 토큰 인증을 사용하고 있습니다. 하지만 장치 ID를 사용하여 인증 한 경우에도 "CreatePartitionedSender"클라이언트를 사용하여 모든 파티션 ID에 이벤트를 보낼 수 있음을 알 수 있습니다. 반면에 두 개의 다른 device-Id가 같은 파티션에 이벤트를 게시하는 것을 원하지 않습니다. 일부 사용자 정의 "인증"코드를 SAS 인증과 함께 추가하여 모든 장치에 대한 제한된 파티션 액세스를 허용 할 수 있습니까?이벤트 허브의 인증

장치 및 파티션 -ID 조합에 대한 권한 부여를 추가하는 아이디어는 여러 테넌트에 대해 단일 이벤트 허브를 수용하는 것이 었습니다. 내가 누락 된 부분이 있으면 알려주십시오.

출판사의 코드는 아래를 참조하십시오 : 현재 인증 모델

 var publisherId = "1d8480fd-d1e7-48f9-9aa3-6e627bd38bae"; 
     string token = SharedAccessSignatureTokenProvider.GetPublisherSharedAccessSignature(
       new Uri("sb://anyhub-ns.servicebus.windows.net/"), 
       eventHubName, publisherId, "send", 
       sasKey, 
       new TimeSpan(0, 5, 0)); 

      var factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", "anyhub-ns", ""), new MessagingFactorySettings 
      { 
       TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(token), 
       TransportType = TransportType.Amqp 
      }); 

      var client = factory.CreateEventHubClient(String.Format("{0}/publishers/{1}", eventHubName, publisherId)); 

      var message = "Event message for publisher: " + publisherId; 

      Console.WriteLine(message); 

      var eventData = new EventData(Encoding.UTF8.GetBytes(message)); 

      await client.SendAsync(eventData); 

      await client.CreatePartitionedSender("5").SendAsync(eventData); 

      await client.CreatePartitionedSender("6").SendAsync(eventData); 
+0

농구대를 뛰어 넘지 않으면 파티션을 공유 할 부분에 대해서는 http://stackoverflow.com/questions/28292330/azure-eventhub-multiple-partition-key-points-to-same-partition을 참조하십시오. SAS 토큰을 직접 사용하지는 않았지만 SAS에서 제한된 게시자 URI ( .servicebus.windows.net/<이벤트 허브 이름>/publishers/)를 사용하여 추측하겠습니다. URI는 필요한 제한을 제공 할 수 있습니다. 결코 사용하지 않았지만 문서는 나에게 그것을 암시합니다. – cacsar

답변

-1

을, 당신은 게시자 이렇게 세분화 된 액세스 권한을 부여 할 수 없습니다. 파티션 당 인증은 Event Hubs Authentication and Security Model Overview에 따라 현재 지원되지 않습니다.

게시자를 신뢰하거나 다른 임차인 계획 (예 : 임차인 당 이벤트 허브)을 생각해야합니다.

+0

정말이에요? http://stackoverflow.com/questions/28292330/azure-eventhub-multiple-partition-key-points-to-same-partition 및 https://msdn.microsoft.com/en-us/library/azure/dn836025. aspx는 그렇지 않으면 제안합니다. CreatePartitionedSender가 게시자 SAS 제한을 우회하는 경우 문서에 따라 버그가 발생합니다. – cacsar

+0

@cacsar, SAS가 특정 PartitionID로만 제한되는 것을 이해하는 데 어려움을 겪고 있으므로 도움을 받으십시오. 다시 한 번, 더 좋은 대답과 실제 샘플이 있다면 여기에 자유롭게 게시 할 수 있습니다! 그리고 게시자가 다른 PartitionID에 게시하는 것을 중단시키는 것은 무엇입니까? 언급 한 문서는 더 나아갑니다. "게시자가 이벤트 허브 내의 파티션을 인식하지 못하는 것이 가장 좋습니다. – astaykov

+0

"서비스 버스는 SAS 정책을 제공합니다. 네임 스페이스 및 * 이벤트 허브 레벨 * .'에서는 '이벤트 허브 사전 수준'에 있지 않습니다. 그리고 마지막으로, 그러나 다시는 같은 문서. '파티션은 데이터 조직 메커니즘이며 Event Hub 처리량보다 다운 스트림 병렬 처리와 더 관련이 있습니다. ' – astaykov

0

난 당신이

var connStr = ServiceBusConnectionStringBuilder.CreateUsingSharedAde... 

이 다음이 당신이 토큰을 생성하는 데 사용되는 전송 키를 포함하는 연결 문자열을 사용했을 수 있음을 시사

CreateFromConnectionString(connectionString 

이 당신의 예제 코드에 주목 제한된 액세스 토큰이 아닌 내 자신의 테스트에서 나는 게시자 특정 토큰과 함께 AMQP 연결을 만드는 EventHubClient를 사용하여 EventHub에 연결할 수 없었습니다. 그렇다고해서 의미가있는 오류가 있다는 것을 지원하지 않는다는 의미는 아니며 그렇게 할 수있는 능력은 이 아니기 때문에이 표시됩니다.

설명되어 있고 example의 내용은 게시자에게 특정 토큰을 만들고 HTTP 인터페이스를 사용하여 EventHub에 이벤트를 보내는 것입니다. 당신은 SAS 토큰 생성 검사하는 경우에는 토큰 부여

[namespace].servicebus.windows.net/[eventhubname]/publishers/[publisherId] 

이 보안 모델에 documentation과 일치에 대한 액세스를 볼 및 overview의 게시자 정책의 일반적인 논의 할 수 있습니다. publisherId -> PartitionKey에 대한 보증이이 인터페이스를 유지할 것으로 기대합니다. 따라서 각 publisherId의 이벤트는 일관된 파티션으로 끝납니다.

이것은 멀티 테넌트 시스템에 이상적 일 수는 없지만 메시지를 전송하는 코드는 틀림없이 더 간단하며 기기 별 키의 사용 사례에 더 적합합니다. this question에서 논의했듯이 각 게시자에게 자신의 파티션을 제공하려면 다소 더러운 작업을해야하며 설계된 사용 사례 밖에 있어야합니다.

가교 questions이 유용 할 수있다.

+0

정확성에 문제가 있습니까? – cacsar

+0

오타를 미안하지만 SAS 토큰을 사용하더라도 다른 파티션에 게시 할 수 있습니다. 그것은 API의 버그처럼 보입니다. – bussa

0

이벤트 허브에 대한 자세한 설명은 게시자 정책 this blog을 참조하십시오.

간단히 말해서 게시자 정책을 원한다면 파티션 된 발신자를 얻을 수 없습니다.게시자 정책은 SAS 보안 모델을 확장 한 것으로 매우 많은 수의 보낸 사람을 지원하도록 설계되었습니다 (이벤트 허브에있는 수 백만 명의 보낸 사람에게).

+0

SAS 토큰을 사용할 때 CreatePartitionedSender를 사용하여 이벤트를 게시 할 수 없어야합니다.하지만 그 일을 시도 할 때 예외가 발생하지 않으며 통풍구가 임의의 파티션 ID에 게시됩니다. 대신 API에서 예외를 기대하고있었습니다. SAS 토큰을 사용하여 인증 된 경우에도 악의적 장치가 모든 파티션에 이벤트를 게시 할 수있는 가능성이 있습니다. – bussa

+1

안녕하세요 @ Bussa .. 귀하의 의견을 많이 주셔서 감사합니다. 나는 그 문제를 이해했다. 이것은 지금 고쳐졌습니다. 게시자 특정 발신자에게 분할 발신자를 더 이상 만들 수 없습니다. – Sreeram