Blog
So konfigurieren Sie ein Google Pub/Sub-Push-Abonnement innerhalb eines VPC Service Control Perimeters

Wenn Ihr Projekt innerhalb eines VPC Service Control Perimeters läuft, werden Google Cloud Pub/Sub Push-Abonnements nicht unterstützt. In diesem Blog stelle ich Ihnen einen einfachen Egress-Proxy vor, mit dem Sie diese Einschränkung umgehen können.
Laut der Dokumentation der VPC-Dienststeuerung ist Google Pub/Sub ein vollständig unterstütztes Produkt. Mit einer Ausnahme für Push-Abonnements. Push-Abonnements können nur auf Request is prohibited by organization's policy.
Um dieses Problem zu umgehen, haben wir einen einfachen https-Proxy in go erstellt. Wenn Sie Ihr Push-Abonnement so ändern, dass es auf diesen Proxy zielt, leitet er die Anfragen an das ursprüngliche Ziel weiter.
den Proxy einsetzen
Um den Proxy einzusetzen, verwenden Sie das folgende Terraform-Snippet:
resource "google_cloud_run_service" "push_subscription_proxy" {
name = "push-subscription-proxy"
location = data.google_client_config.current.region
template {
spec {
service_account_name = google_service_account.push_subscription_proxy.email
containers {
image = "gcr.io/binx-io-public/simple-egress-proxy:0.1.0"
args = [ "--target-url", "https://httpbin.org/anything/event"]
}
}
}
}
Natürlich müssen Sie die URL auf Ihr ursprüngliches Ziel ändern.
das Push-Abonnement ändern
Als nächstes ändern Sie das Push-Abonnement so, dass es auf den Egress-Proxy verweist:
resource "google_pubsub_subscription" "proxied_push_subscription" {
name = "proxied-push-subscription"
topic = google_pubsub_topic.notifications.name
push_config {
push_endpoint = google_cloud_run_service.push_subscription_proxy.status[0].url
oidc_token {
service_account_email = google_service_account.push_subscription_proxy.email
}
}
}
Um sicherzustellen, dass der Dienst nur von diesem Abonnement aufgerufen werden kann, erstellen Sie ein separates Dienstkonto und verwenden Sie die folgende Richtlinie:
resource "google_service_account" "push_subscription_proxy" {
account_id = "push-subscription-proxy"
display_name = "Pub/Sub push subscription proxy"
}
resource "google_cloud_run_service_iam_binding" "push_subscription_proxy_run_invokers" {
location = google_cloud_run_service.push_subscription_proxy.location
project = google_cloud_run_service.push_subscription_proxy.project
service = google_cloud_run_service.push_subscription_proxy.name
role = "roles/run.invoker"
members = [
format("serviceAccount:%s", google_service_account.push_subscription_proxy.email)
]
depends_on = [google_cloud_run_service.push_subscription_proxy]
}
Sehen Sie sich die terraform Demo-Vorlage an, um eine voll funktionsfähige Version zu erhalten.
Fazit
Der einfache Egress-Proxy wurde mit nur wenigen Zeilen Code unter Verwendung der Standard-Golang-Proxy-Bibliothek geschrieben. Er bietet eine schnelle Lösung für die Beschränkung von Google Pub/Sub-Push-Benachrichtigungen innerhalb eines VPC-Dienstkontrollbereichs.
Bild von Екатерина Гусева von Pixabay
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



