diff --git a/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go b/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go
new file mode 100644
index 000000000000..099429b5abe9
--- /dev/null
+++ b/mmv1/third_party/terraform/data_sources/data_source_google_logging_sink.go
@@ -0,0 +1,44 @@
+package google
+
+import (
+ "fmt"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func dataSourceGoogleLoggingSink() *schema.Resource {
+ dsSchema := datasourceSchemaFromResourceSchema(resourceLoggingSinkSchema())
+ dsSchema["id"] = &schema.Schema{
+ Type: schema.TypeString,
+ Required: true,
+ Description: `Required. An identifier for the resource in format: "projects/[PROJECT_ID]/sinks/[SINK_NAME]", "organizations/[ORGANIZATION_ID]/sinks/[SINK_NAME]", "billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_NAME]", "folders/[FOLDER_ID]/sinks/[SINK_NAME]"`,
+ }
+
+ return &schema.Resource{
+ Read: dataSourceGoogleLoggingSinkRead,
+ Schema: dsSchema,
+ }
+}
+
+func dataSourceGoogleLoggingSinkRead(d *schema.ResourceData, meta interface{}) error {
+ config := meta.(*Config)
+ userAgent, err := generateUserAgentString(d, config.userAgent)
+ if err != nil {
+ return err
+ }
+
+ sinkId := d.Get("id").(string)
+
+ sink, err := config.NewLoggingClient(userAgent).Sinks.Get(sinkId).Do()
+ if err != nil {
+ return handleNotFoundError(err, d, fmt.Sprintf("Logging Sink %s", d.Id()))
+ }
+
+ if err := flattenResourceLoggingSink(d, sink); err != nil {
+ return err
+ }
+
+ d.SetId(sinkId)
+
+ return nil
+}
diff --git a/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go b/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go
new file mode 100644
index 000000000000..3bd00be4cf2a
--- /dev/null
+++ b/mmv1/third_party/terraform/tests/data_source_google_logging_sink_test.go
@@ -0,0 +1,59 @@
+package google
+
+import (
+ "testing"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
+)
+
+func TestAccDataSourceGoogleLoggingSink_basic(t *testing.T) {
+ t.Parallel()
+
+ context := map[string]interface{}{
+ "project_name": getTestProjectFromEnv(),
+ "sink_name": "tf-test-sink-ds-" + randString(t, 10),
+ "bucket_name": "tf-test-sink-ds-bucket-" + randString(t, 10),
+ }
+
+ vcrTest(t, resource.TestCase{
+ PreCheck: func() { testAccPreCheck(t) },
+ Providers: testAccProviders,
+ Steps: []resource.TestStep{
+ {
+ Config: testAccDataSourceGoogleLoggingSink_basic(context),
+ Check: resource.ComposeTestCheckFunc(
+ checkDataSourceStateMatchesResourceStateWithIgnores(
+ "data.google_logging_sink.basic",
+ "google_logging_project_sink.basic",
+ map[string]struct{}{
+ "project": {},
+ "unique_writer_identity": {},
+ },
+ ),
+ ),
+ },
+ },
+ })
+}
+
+func testAccDataSourceGoogleLoggingSink_basic(context map[string]interface{}) string {
+ return Nprintf(`
+resource "google_logging_project_sink" "basic" {
+ name = "%{sink_name}"
+ project = "%{project_name}"
+ destination = "storage.googleapis.com/${google_storage_bucket.log-bucket.name}"
+ filter = "logName=\"projects/%{project_name}/logs/compute.googleapis.com%%2Factivity_log\" AND severity>=ERROR"
+
+ unique_writer_identity = false
+}
+
+resource "google_storage_bucket" "log-bucket" {
+ name = "%{bucket_name}"
+ location = "US"
+}
+
+data "google_logging_sink" "basic" {
+ id = google_logging_project_sink.basic.id
+}
+`, context)
+}
diff --git a/mmv1/third_party/terraform/utils/provider.go.erb b/mmv1/third_party/terraform/utils/provider.go.erb
index d68450f5e02b..e2aac274d241 100644
--- a/mmv1/third_party/terraform/utils/provider.go.erb
+++ b/mmv1/third_party/terraform/utils/provider.go.erb
@@ -253,6 +253,7 @@ func Provider() *schema.Provider {
"google_folders": dataSourceGoogleFolders(),
"google_folder_organization_policy": dataSourceGoogleFolderOrganizationPolicy(),
"google_logging_project_cmek_settings": dataSourceGoogleLoggingProjectCmekSettings(),
+ "google_logging_sink": dataSourceGoogleLoggingSink(),
"google_monitoring_notification_channel": dataSourceMonitoringNotificationChannel(),
"google_monitoring_cluster_istio_service": dataSourceMonitoringServiceClusterIstio(),
"google_monitoring_istio_canonical_service": dataSourceMonitoringIstioCanonicalService(),
diff --git a/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown b/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown
new file mode 100644
index 000000000000..db76682217cc
--- /dev/null
+++ b/mmv1/third_party/terraform/website/docs/d/logging_sink.html.markdown
@@ -0,0 +1,70 @@
+---
+subcategory: "Cloud (Stackdriver) Logging"
+description: |-
+ Get information about a Google Cloud Logging Sink.
+---
+
+# google\_logging\_sink
+
+Use this data source to get a project, folder, organization or billing account logging sink details.
+To get more information about Service, see:
+
+[API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/sinks)
+
+## Example Usage - Retrieve Project Logging Sink Basic
+
+
+```hcl
+data google_logging_sink "project-sink" {
+ id = "projects/0123456789/sinks/my-sink-name"
+}
+```
+
+## Argument Reference
+
+The following arguments are supported:
+
+
+
+- - -
+
+* `id` - (Required) The identifier for the resource.
+ Examples:
+
+ - `projects/[PROJECT_ID]/sinks/[SINK_NAME]`
+ - `organizations/[ORGANIZATION_ID]/sinks/[SINK_NAME]`
+ - `billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_NAME]`
+ - `folders/[FOLDER_ID]/sinks/[SINK_NAME]`
+
+
+## Attributes Reference
+
+In addition to the arguments listed above, the following computed attributes are exported:
+
+
+* `name` - The name of the logging sink.
+
+* `destination` - The destination of the sink (or, in other words, where logs are written to).
+
+* `filter` - The filter which is applied when exporting logs. Only log entries that match the filter are exported.
+
+* `description` - The description of this sink.
+
+* `disabled` - Whether this sink is disabled and it does not export any log entries.
+
+* `writer_identity` - The identity associated with this sink. This identity must be granted write access to the configured `destination`.
+
+* `bigquery_options` - Options that affect sinks exporting data to BigQuery. Structure is [documented below](#nested_bigquery_options).
+
+* `exclusions` - Log entries that match any of the exclusion filters are not exported. Structure is [documented below](#nested_exclusions).
+
+The `bigquery_options` block supports:
+
+* `use_partitioned_tables` - Whether [BigQuery's partition tables](https://cloud.google.com/bigquery/docs/partitioned-tables) are used.
+
+The `exclusions` block supports:
+
+* `name` - A client-assigned identifier, such as `load-balancer-exclusion`.
+* `description` - A description of this exclusion.
+* `filter` - An advanced logs filter that matches the log entries to be excluded.
+* `disabled` - Whether this exclusion is disabled and it does not exclude any log entries.