top of page

Secure Connectivity of OIC Endpoints: The Checks Behind the Architecture

  • abhinavkotnala2
  • Jul 10
  • 4 min read

Twenty years in IT teaches you one thing early: the platform will tell you what's possible. It won't tell you what's wise. That gap — between what a service exposes by default and what your architecture actually needs — is where most of the real work sits. This is a story about that gap, found in Oracle Integration Cloud.


The assumption that doesn't hold

Oracle Integration Cloud (OIC) is built with private connectivity in mind — for outbound traffic. If your integration needs to reach an on-premises system, or anything sitting inside a private network, OIC gives you a private endpoint for that. It's well documented, it works as advertised, and most architects reach for it without a second thought.

The assumption that quietly rides along with this is: if outbound is private, surely the platform is private end to end.

It isn't. To trigger an integration in OIC — to actually invoke it — you call OIC's public URL. There's no private endpoint for inbound traffic. Every consumer, whether it's an internal application three network hops away or something external entirely, reaches OIC the same way: over the public internet.

For an architecture that's supposed to be private by design, that's not a minor footnote. It's the one door that doesn't lock the way the rest of the house does.


Why this surfaces late

The reason this gap doesn't get caught early is structural, not careless. Provisioning OIC, wiring up the outbound private endpoint, and building the integration itself all happen inside the "this is secure" mental model — because for that half of the traffic, it genuinely is. The public URL requirement for inbound calls isn't a bug or a misconfiguration. It's simply how the service is built.

The question only gets asked when someone stops to check: can this integration be called without ever touching the public internet?On a recent project, that question came from wanting the whole path — consumer to integration — to sit inside the private network, matching the rest of the estate. OIC's default answer was no.


The fix: change the front door, not the platform

You can't make OIC's public URL disappear. What you can do is control who is allowed to approach it, and how.

The pattern that solved this was to deploy an OCI API Gateway in front of OIC's public URL, and give the Gateway itself a private endpoint.

Here's how the traffic actually moves:

  1. A consumer inside the private network calls the API Gateway's private endpoint. This call never leaves the private network — no public internet involved at this hop.

  2. The API Gateway, acting as the front door, forwards the call to OIC's public URL — but it does this using the OCI Service Gateway, not a route out to the public internet.

  3. The Service Gateway routes that call over Oracle's own backbone to reach OIC's public endpoint, without the traffic ever traversing the public internet.

The net effect: every consumer-facing hop is private. The one hop that has to reach a "public" URL does so over Oracle's internal network path rather than the open internet. OIC's public endpoint didn't change. What changed is that nothing outside the private network ever calls it directly, and the one thing that does call it never actually goes public to do so.


What this actually costs you

This is the part that's easy to skip in a diagram and expensive to skip in practice: adding the API Gateway means you've added a new component to own, not just a policy to configure.

A few things that come with it, and that I checked before calling this "solved":

  • DNS and hostname resolution. Consumers now resolve to the Gateway's private endpoint, not to OIC directly. Get this wrong and you've built a secure path nobody can actually reach.

  • Certificate lifecycle. The Gateway is now a TLS termination point in its own right. That's one more certificate with its own renewal cadence, and one more thing that breaks silently if nobody owns it.

  • Throttling and policy configuration. The Gateway isn't a passive pipe. Rate limits, request validation, and routing rules live here now, and they need to be deliberately set — not left at defaults.

  • Latency. An extra hop is an extra hop. It's usually small, but "usually small" is a sentence worth verifying under real load, not assuming.

  • Who owns this in six months. This is the one people skip. Deploying the Gateway is a project task. Renewing its certificate, reviewing its throttling policy, and patching it eighteen months from now is an operational one — and it needs an owner on day one, not after the first incident.

None of these are reasons not to do it. They're reasons to go in knowing that "secure" isn't a state you reach once. It's a set of things somebody keeps checking.


The principle underneath the pattern

This particular fix — API Gateway plus Service Gateway in front of OIC — is specific to Oracle Integration Cloud. But the underlying question isn't: does a platform expose something by default that I've stopped noticing, because it's always been that way?

Every managed service ships with a shape. Some of that shape is a deliberate security boundary. Some of it is just how the product was built, and it's on you to decide whether that shape matches what your architecture actually requires — not whether it's technically functional.

The checks that mattered here weren't exotic. They were: what's actually private versus what merely feels private, what new component am I introducing to close that gap, and who owns that component once it's live. That's usually where the real security work is — not in avoiding the exception, but in deciding, deliberately, how it gets controlled.

 
 
 

Comments


bottom of page