@@ -323,13 +323,181 @@ message IngestionDataSourceSettings {
323323 string match_glob = 9 [(google.api.field_behavior ) = OPTIONAL ];
324324 }
325325
326+ // Ingestion settings for Azure Event Hubs.
327+ message AzureEventHubs {
328+ // Possible states for managed ingestion from Event Hubs.
329+ enum State {
330+ // Default value. This value is unused.
331+ STATE_UNSPECIFIED = 0 ;
332+
333+ // Ingestion is active.
334+ ACTIVE = 1 ;
335+
336+ // Permission denied encountered while consuming data from Event Hubs.
337+ // This can happen when `client_id`, or `tenant_id` are invalid. Or the
338+ // right permissions haven't been granted.
339+ EVENT_HUBS_PERMISSION_DENIED = 2 ;
340+
341+ // Permission denied encountered while publishing to the topic.
342+ PUBLISH_PERMISSION_DENIED = 3 ;
343+
344+ // The provided Event Hubs namespace couldn't be found.
345+ NAMESPACE_NOT_FOUND = 4 ;
346+
347+ // The provided Event Hub couldn't be found.
348+ EVENT_HUB_NOT_FOUND = 5 ;
349+
350+ // The provided Event Hubs subscription couldn't be found.
351+ SUBSCRIPTION_NOT_FOUND = 6 ;
352+
353+ // The provided Event Hubs resource group couldn't be found.
354+ RESOURCE_GROUP_NOT_FOUND = 7 ;
355+ }
356+
357+ // Output only. An output-only field that indicates the state of the Event
358+ // Hubs ingestion source.
359+ State state = 1 [(google.api.field_behavior ) = OUTPUT_ONLY ];
360+
361+ // Optional. Name of the resource group within the azure subscription.
362+ string resource_group = 2 [(google.api.field_behavior ) = OPTIONAL ];
363+
364+ // Optional. The name of the Event Hubs namespace.
365+ string namespace = 3 [(google.api.field_behavior ) = OPTIONAL ];
366+
367+ // Optional. The name of the Event Hub.
368+ string event_hub = 4 [(google.api.field_behavior ) = OPTIONAL ];
369+
370+ // Optional. The client id of the Azure application that is being used to
371+ // authenticate Pub/Sub.
372+ string client_id = 5 [(google.api.field_behavior ) = OPTIONAL ];
373+
374+ // Optional. The tenant id of the Azure application that is being used to
375+ // authenticate Pub/Sub.
376+ string tenant_id = 6 [(google.api.field_behavior ) = OPTIONAL ];
377+
378+ // Optional. The Azure subscription id.
379+ string subscription_id = 7 [(google.api.field_behavior ) = OPTIONAL ];
380+
381+ // Optional. The GCP service account to be used for Federated Identity
382+ // authentication.
383+ string gcp_service_account = 8 [(google.api.field_behavior ) = OPTIONAL ];
384+ }
385+
386+ // Ingestion settings for Amazon MSK.
387+ message AwsMsk {
388+ // Possible states for managed ingestion from Amazon MSK.
389+ enum State {
390+ // Default value. This value is unused.
391+ STATE_UNSPECIFIED = 0 ;
392+
393+ // Ingestion is active.
394+ ACTIVE = 1 ;
395+
396+ // Permission denied encountered while consuming data from Amazon MSK.
397+ MSK_PERMISSION_DENIED = 2 ;
398+
399+ // Permission denied encountered while publishing to the topic.
400+ PUBLISH_PERMISSION_DENIED = 3 ;
401+
402+ // The provided MSK cluster wasn't found.
403+ CLUSTER_NOT_FOUND = 4 ;
404+
405+ // The provided topic wasn't found.
406+ TOPIC_NOT_FOUND = 5 ;
407+ }
408+
409+ // Output only. An output-only field that indicates the state of the Amazon
410+ // MSK ingestion source.
411+ State state = 1 [(google.api.field_behavior ) = OUTPUT_ONLY ];
412+
413+ // Required. The Amazon Resource Name (ARN) that uniquely identifies the
414+ // cluster.
415+ string cluster_arn = 2 [(google.api.field_behavior ) = REQUIRED ];
416+
417+ // Required. The name of the topic in the Amazon MSK cluster that Pub/Sub
418+ // will import from.
419+ string topic = 3 [(google.api.field_behavior ) = REQUIRED ];
420+
421+ // Required. AWS role ARN to be used for Federated Identity authentication
422+ // with Amazon MSK. Check the Pub/Sub docs for how to set up this role and
423+ // the required permissions that need to be attached to it.
424+ string aws_role_arn = 4 [(google.api.field_behavior ) = REQUIRED ];
425+
426+ // Required. The GCP service account to be used for Federated Identity
427+ // authentication with Amazon MSK (via a `AssumeRoleWithWebIdentity` call
428+ // for the provided role). The `aws_role_arn` must be set up with
429+ // `accounts.google.com:sub` equals to this service account number.
430+ string gcp_service_account = 5 [(google.api.field_behavior ) = REQUIRED ];
431+ }
432+
433+ // Ingestion settings for Confluent Cloud.
434+ message ConfluentCloud {
435+ // Possible states for managed ingestion from Confluent Cloud.
436+ enum State {
437+ // Default value. This value is unused.
438+ STATE_UNSPECIFIED = 0 ;
439+
440+ // Ingestion is active.
441+ ACTIVE = 1 ;
442+
443+ // Permission denied encountered while consuming data from Confluent
444+ // Cloud.
445+ CONFLUENT_CLOUD_PERMISSION_DENIED = 2 ;
446+
447+ // Permission denied encountered while publishing to the topic.
448+ PUBLISH_PERMISSION_DENIED = 3 ;
449+
450+ // The provided bootstrap server address is unreachable.
451+ UNREACHABLE_BOOTSTRAP_SERVER = 4 ;
452+
453+ // The provided cluster wasn't found.
454+ CLUSTER_NOT_FOUND = 5 ;
455+
456+ // The provided topic wasn't found.
457+ TOPIC_NOT_FOUND = 6 ;
458+ }
459+
460+ // Output only. An output-only field that indicates the state of the
461+ // Confluent Cloud ingestion source.
462+ State state = 1 [(google.api.field_behavior ) = OUTPUT_ONLY ];
463+
464+ // Required. The address of the bootstrap server. The format is url:port.
465+ string bootstrap_server = 2 [(google.api.field_behavior ) = REQUIRED ];
466+
467+ // Required. The id of the cluster.
468+ string cluster_id = 3 [(google.api.field_behavior ) = REQUIRED ];
469+
470+ // Required. The name of the topic in the Confluent Cloud cluster that
471+ // Pub/Sub will import from.
472+ string topic = 4 [(google.api.field_behavior ) = REQUIRED ];
473+
474+ // Required. The id of the identity pool to be used for Federated Identity
475+ // authentication with Confluent Cloud. See
476+ // https://docs.confluent.io/cloud/current/security/authenticate/workload-identities/identity-providers/oauth/identity-pools.html#add-oauth-identity-pools.
477+ string identity_pool_id = 5 [(google.api.field_behavior ) = REQUIRED ];
478+
479+ // Required. The GCP service account to be used for Federated Identity
480+ // authentication with `identity_pool_id`.
481+ string gcp_service_account = 6 [(google.api.field_behavior ) = REQUIRED ];
482+ }
483+
326484 // Only one source type can have settings set.
327485 oneof source {
328486 // Optional. Amazon Kinesis Data Streams.
329487 AwsKinesis aws_kinesis = 1 [(google.api.field_behavior ) = OPTIONAL ];
330488
331489 // Optional. Cloud Storage.
332490 CloudStorage cloud_storage = 2 [(google.api.field_behavior ) = OPTIONAL ];
491+
492+ // Optional. Azure Event Hubs.
493+ AzureEventHubs azure_event_hubs = 3
494+ [(google.api.field_behavior ) = OPTIONAL ];
495+
496+ // Optional. Amazon MSK.
497+ AwsMsk aws_msk = 5 [(google.api.field_behavior ) = OPTIONAL ];
498+
499+ // Optional. Confluent Cloud.
500+ ConfluentCloud confluent_cloud = 6 [(google.api.field_behavior ) = OPTIONAL ];
333501 }
334502
335503 // Optional. Platform Logs settings. If unset, no Platform Logs will be
@@ -408,6 +576,78 @@ message IngestionFailureEvent {
408576 }
409577 }
410578
579+ // Failure when ingesting from an Amazon MSK source.
580+ message AwsMskFailureReason {
581+ // Optional. The ARN of the cluster of the topic being ingested from.
582+ string cluster_arn = 1 [(google.api.field_behavior ) = OPTIONAL ];
583+
584+ // Optional. The name of the Kafka topic being ingested from.
585+ string kafka_topic = 2 [(google.api.field_behavior ) = OPTIONAL ];
586+
587+ // Optional. The partition ID of the message that failed to be ingested.
588+ int64 partition_id = 3 [(google.api.field_behavior ) = OPTIONAL ];
589+
590+ // Optional. The offset within the partition of the message that failed to
591+ // be ingested.
592+ int64 offset = 4 [(google.api.field_behavior ) = OPTIONAL ];
593+
594+ // Reason why ingestion failed for the specified message.
595+ oneof reason {
596+ // Optional. The Pub/Sub API limits prevented the desired message from
597+ // being published.
598+ ApiViolationReason api_violation_reason = 5
599+ [(google.api.field_behavior ) = OPTIONAL ];
600+ }
601+ }
602+
603+ // Failure when ingesting from an Azure Event Hubs source.
604+ message AzureEventHubsFailureReason {
605+ // Optional. The namespace containing the event hub being ingested from.
606+ string namespace = 1 [(google.api.field_behavior ) = OPTIONAL ];
607+
608+ // Optional. The name of the event hub being ingested from.
609+ string event_hub = 2 [(google.api.field_behavior ) = OPTIONAL ];
610+
611+ // Optional. The partition ID of the message that failed to be ingested.
612+ int64 partition_id = 3 [(google.api.field_behavior ) = OPTIONAL ];
613+
614+ // Optional. The offset within the partition of the message that failed to
615+ // be ingested.
616+ int64 offset = 4 [(google.api.field_behavior ) = OPTIONAL ];
617+
618+ // Reason why ingestion failed for the specified message.
619+ oneof reason {
620+ // Optional. The Pub/Sub API limits prevented the desired message from
621+ // being published.
622+ ApiViolationReason api_violation_reason = 5
623+ [(google.api.field_behavior ) = OPTIONAL ];
624+ }
625+ }
626+
627+ // Failure when ingesting from a Confluent Cloud source.
628+ message ConfluentCloudFailureReason {
629+ // Optional. The cluster ID containing the topic being ingested from.
630+ string cluster_id = 1 [(google.api.field_behavior ) = OPTIONAL ];
631+
632+ // Optional. The name of the Kafka topic being ingested from.
633+ string kafka_topic = 2 [(google.api.field_behavior ) = OPTIONAL ];
634+
635+ // Optional. The partition ID of the message that failed to be ingested.
636+ int64 partition_id = 3 [(google.api.field_behavior ) = OPTIONAL ];
637+
638+ // Optional. The offset within the partition of the message that failed to
639+ // be ingested.
640+ int64 offset = 4 [(google.api.field_behavior ) = OPTIONAL ];
641+
642+ // Reason why ingestion failed for the specified message.
643+ oneof reason {
644+ // Optional. The Pub/Sub API limits prevented the desired message from
645+ // being published.
646+ ApiViolationReason api_violation_reason = 5
647+ [(google.api.field_behavior ) = OPTIONAL ];
648+ }
649+ }
650+
411651 // Required. Name of the import topic. Format is:
412652 // projects/{project_name}/topics/{topic_name}.
413653 string topic = 1 [(google.api.field_behavior ) = REQUIRED ];
@@ -419,6 +659,18 @@ message IngestionFailureEvent {
419659 // Optional. Failure when ingesting from Cloud Storage.
420660 CloudStorageFailure cloud_storage_failure = 3
421661 [(google.api.field_behavior ) = OPTIONAL ];
662+
663+ // Optional. Failure when ingesting from Amazon MSK.
664+ AwsMskFailureReason aws_msk_failure = 4
665+ [(google.api.field_behavior ) = OPTIONAL ];
666+
667+ // Optional. Failure when ingesting from Azure Event Hubs.
668+ AzureEventHubsFailureReason azure_event_hubs_failure = 5
669+ [(google.api.field_behavior ) = OPTIONAL ];
670+
671+ // Optional. Failure when ingesting from Confluent Cloud.
672+ ConfluentCloudFailureReason confluent_cloud_failure = 6
673+ [(google.api.field_behavior ) = OPTIONAL ];
422674 }
423675}
424676
0 commit comments