Overview
Many SaaS apps can refuse sign-ins that do not come from an IP address you trust. With Cloudraw you can make that IP the public IP of your connector. People with access reach the app from anywhere, and the app always sees the connector's IP. Everyone else, and every stolen password used from somewhere else, is refused by the app itself.
The setup has three steps:
- Publish the app in Cloudraw as an egress resource, and give people access.
- Find the connector's public IP in Cloudraw.
- Allow only that IP in the SaaS admin settings.
You need
- A connector on a machine with a fixed public IP. If the IP changes, people are locked out. See Install a Cloudraw connector.
- The connector installed with the current Windows or Linux command, so that automatic updates are on. The connector reports its public IP through its update checks.
- Cloudraw Connect on the devices of the people who use the app.
- Admin rights in the SaaS app.
How egress works
An egress resource is a list of the app's real hostnames, for example login.salesforce.com, hosted by a connector.
- A person who has access opens the app as usual, by its real name.
- Cloudraw Connect on their device catches the connections to those names and sends them through the Cloudraw network to your connector.
- The connector looks up the real name in public DNS and connects to the app.
- The app sees the connector's public IP.
The browser still talks to the real site with its real certificate. Cloudraw does not decrypt the traffic. Names that are not in the list go out from the device as usual.
An egress resource is deny by default, like any application. Until you add an access rule, nobody's traffic goes through the connector, and the allow-list at the provider blocks everyone.
Step 1. Publish the SaaS as egress
- New applicationIn the admin console go to Applications→New application and choose Website / SaaS via connector IP.
- HostnamesAdd every hostname the app uses for sign-in and for the pages you want to protect. You can use a wildcard such as
*.example.com. The provider sections below list a starting set. - PortsLeave the default, 443 and 80, unless the app needs another TCP port. For example, add 22 for Git over SSH.
- Hosted byPick the connector whose IP the app will see. You can pick several. Then the app may see any of their IPs, so you must allow all of them.
- Publish and add an access ruleGive the people or groups who use the app access to it.
The application page then says "People reach <hostname> by its real name; the site sees your connector's IP …" and the app carries a via connector IP badge.
You can change the hostnames and ports later. Changes take effect in place. To rename the app, publish it again under the new name.
Step 2. Find the connector's public IP
- Open ConnectorsIn the admin console open Connectors. Switch to Expert view if the Public IP column is not shown.
- Copy the IPCopy the address in the Public IP column. Under it you see when it was last seen.
The connector reports this IP every 15 minutes. If the column says not reported, wait 15 minutes after installing. Connectors without automatic updates never report it. Then ask your network team for the public IP the machine uses to reach the internet.
Cloudraw sees the IP of the connector's update checks. If your network sends web traffic through a proxy or a different NAT address, the SaaS may see another IP. Check this with your network team, or confirm it in the provider's sign-in log after your first test (see Troubleshooting).
At the provider, enter one IP as a single address or as /32, for example 203.0.113.10/32. The examples below use 203.0.113.10. Use your own IP.
Step 3. Allow the IP at the provider
An IP allow-list can lock you out. Before you turn it on, keep one admin account that is not restricted (a break-glass account), test with one user first, and keep a browser session open as admin until the test works.
If people sign in to Cloudraw Connect with the same provider (Microsoft, Google or Okta), never restrict the Cloudraw app itself. People sign in to Cloudraw before their traffic goes through the connector. If the provider blocks that sign-in, nobody can connect.
Provider menus change from time to time. The paths below were checked in October 2026.
Microsoft 365 (Entra Conditional Access)
Needs Microsoft Entra ID P1 or higher.
Hostnames to publish (sign-in, then the apps you protect): login.microsoftonline.com, login.microsoft.com, and for example outlook.office.com, outlook.office365.com, *.sharepoint.com. Conditional Access checks the IP when the person signs in, so the sign-in names matter most.
- Create a named locationIn the Microsoft Entra admin center go to Entra ID→Conditional Access→Named locations (older menus: Protection→Conditional Access). Click + IP ranges location, name it
Cloudraw connector, add203.0.113.10/32, tick Mark as trusted location and click Create. - Create a policyGo to Conditional Access→Policies→+ New policy. Name it
Block outside Cloudraw. - UsersInclude a test user or group. Exclude your break-glass account.
- Target resourcesInclude Office 365 (or the apps you protect). If people sign in to Cloudraw with Microsoft, do not include All resources unless you exclude the Cloudraw app registration.
- NetworkUnder Conditions→Locations (newer menus: Network) set Configure to Yes. Include Any location (Any network). Exclude the
Cloudraw connectorlocation. - GrantChoose Block access.
- Test, then turn onStart with Report-only. Check the sign-in logs, then switch the policy to On.
Google Workspace (Context-Aware Access)
Context-Aware Access needs Enterprise Standard or Plus, Education Standard or Plus, or Cloud Identity Premium. Other editions cannot restrict by IP.
Hostnames to publish: the apps you protect, for example mail.google.com, drive.google.com, docs.google.com, calendar.google.com, and the sign-in page accounts.google.com. Do not use *.google.com unless you want all Google traffic, search included, to go through the connector.
- Create an access levelIn the Google Admin console go to Security→Access and data control→Context-Aware Access→Access levels. Click Create access level, name it
Cloudraw connector, add the condition IP subnet =203.0.113.10/32, and save. - Assign itGo to Context-Aware Access→Assign access levels. Pick a test organizational unit or group, select the apps (Gmail, Drive and Docs, Calendar…), click Assign and choose
Cloudraw connector. - Monitor, then enforceUse Monitor mode first if your console offers it. Check the Context-Aware Access log, then switch to Active mode.
Context-Aware Access applies to Google's apps. It does not block the Google sign-in page itself, so it does not affect signing in to Cloudraw with Google.
Salesforce (Login IP ranges)
Hostnames to publish: login.salesforce.com, yourcompany.my.salesforce.com, yourcompany.lightning.force.com, plus *.force.com and *.salesforce.com for the other Salesforce pages (Visualforce, files).
- Profile Login IP Ranges (blocks)In Setup, type Profiles in Quick Find, open the profile your users have, find Login IP Ranges and click New. Enter
203.0.113.10as both Start IP Address and End IP Address and save. Users of that profile can no longer sign in from any other IP. - Every request, not only sign-in (optional)In Setup→Session Settings, tick Enforce login IP ranges on every request. Then every page must come through the connector, so publish all the Salesforce hostnames you use.
Setup→Network Access (Trusted IP Ranges) does not block anyone. It only skips the e-mail verification code for sign-ins from that IP. Use Profile Login IP Ranges to restrict access.
GitHub (IP allow list)
Needs GitHub Enterprise Cloud. The list protects your organization's private resources on the web, in the API and over Git.
Hostnames to publish: github.com, api.github.com, codeload.github.com, uploads.github.com, *.githubusercontent.com. Ports: 443 and 80, plus 22 for Git over SSH.
- Add the IPFor an organization: open the organization, click Settings→Authentication security. For an enterprise: Your enterprises→Settings→Authentication security. Under IP allow list, enter
203.0.113.10, a description such asCloudraw connector, and click Add. - Turn it onTick Enable IP allow list and click Save.
GitHub-hosted Actions runners, webhooks and GitHub Apps do not come from your connector. If they need your private repositories, add their addresses too, or tick Enable IP allow list configuration for installed GitHub Apps.
AWS (IAM policy with aws:SourceIp)
Hostnames to publish: signin.aws.amazon.com, console.aws.amazon.com, *.console.aws.amazon.com, *.signin.aws.amazon.com, and for the AWS CLI and SDKs *.amazonaws.com. If you use IAM Identity Center, add your portal, for example yourcompany.awsapps.com.
- Create the policyIn the IAM console go to Policies→Create policy→JSON, paste the policy below with your IP, click Next, name it
DenyOutsideCloudrawand click Create policy. - Attach itGo to User groups, open the group, then Permissions→Add permissions→Attach policies. For a whole AWS organization, use the same statement as a service control policy in AWS Organizations→Policies→Service control policies.
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyOutsideCloudrawConnector",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": { "aws:SourceIp": ["203.0.113.10/32"] },
"Bool": { "aws:ViaAWSService": "false" }
}
}]
}
The aws:ViaAWSService line keeps AWS services working when they call other services for you. Requests through a VPC endpoint carry no public source IP, so this policy denies them. Do not attach it to roles that your workloads use.
Okta (network zones)
Hostnames to publish: your Okta org, for example yourcompany.okta.com and yourcompany-admin.okta.com, or your custom Okta domain, plus the apps you protect.
- Create a network zoneIn the Okta Admin Console go to Security→Networks, click Add zone→IP Zone, name it
Cloudraw connector, enter203.0.113.10under Gateway IPs and save. - Add a rule to the app's policyGo to Security→Authentication Policies, open the policy of the app you protect and click Add rule. Set User's IP is to Not in any of the following zones with
Cloudraw connector, set Access is to Denied, save, and move the rule to the top.
Put the rule on the apps you protect, not on the Global Session Policy, if people sign in to Cloudraw with Okta. A global rule would also block the Cloudraw sign-in.
Any other app
- Find the settingLook in the app's admin or security settings for IP allow list, trusted IPs, IP restrictions, network restrictions or login IP ranges.
- Find all hostnamesSign in once with your browser's developer tools open (F12, Network tab). Note the hostnames for the sign-in page, the app and its API. Publish those, using a wildcard where there are many.
- Add the IP and testAdd the connector's IP as a single address or
/32. Test with one user, then check the app's sign-in or audit log shows the connector's IP.
Limits
Cloudraw checks the egress resource when you publish or change it. It refuses:
| Rule | Example of what is refused |
|---|---|
| 1 to 20 hostnames per egress resource. For more, create a second egress resource. | 21 hostnames |
Only plain hostnames: letters, digits, hyphens and dots. No https://, paths, ports or IP addresses. | https://crm.example.com/login, 203.0.113.5 |
A wildcard only as *. at the start, and scoped to a domain. | *.com, crm.*.com |
| No Cloudraw names. | app.cloudraw.com, names ending in .cloudraw |
| Every name must resolve in public DNS. For a wildcard, the domain itself must resolve. | A name that does not exist yet |
| No private hostnames. A name that resolves to a private, loopback or link-local address is refused. Publish it as an application or a private network instead. | A name that resolves to 10.0.0.5 or 192.168.1.20 |
| 1 to 10 ports, each 1 to 65535. TCP only. Default: 443 and 80. | Port 0, port 70000, 11 ports |
| 1 to 5 connectors under Hosted by. | 6 connectors |
The error message names the hostname or port that was refused. Fix that entry and publish again.
If Cloudraw refuses a wildcard because its domain does not resolve, list the exact hostnames instead.
Troubleshooting
| Message or symptom | Cause and fix |
|---|---|
| The provider blocks a user who should have access | Check that Cloudraw Connect is connected on their device and that an access rule gives them the egress resource. Then check the provider's sign-in log for the IP it saw. |
| The sign-in log shows the user's home or office IP | The page they used is on a hostname that is not in your list. Find it (see Any other app) and add it to the egress resource. |
| The sign-in log shows an IP you do not recognize, not the connector's | The connector machine leaves through a different NAT address or proxy than Cloudraw saw. Ask your network team for the address, and allow that one. |
| Blocked sometimes, not always | The resource is hosted by several connectors and only some of their IPs are allowed. Allow every connector's IP. |
| Everyone was locked out after the connector's IP changed | The machine has no fixed public IP. Sign in with your break-glass account, update the allow-list, and move the connector to a machine with a fixed IP. |
| Nobody can sign in to Cloudraw Connect after the change | The provider policy also covers the Cloudraw sign-in. Exclude the Cloudraw app from the policy (see Step 3). |
| Public IP shows not reported | Wait 15 minutes after installing. Connectors without automatic updates (older installs, Docker) do not report it. See Updates. |
| "… resolves to a private address … publish it as an application or private network instead" | The name is internal. Egress is for public sites. Publish it as an application. |
| "a wildcard must be scoped to a domain" | Use *.crm.example.com or *.example.com, not *.com. |
| "Cloudraw names cannot be intercepted" | Remove the Cloudraw hostname from the list. |
| The app works but some parts do not load | Those parts use another hostname or port. Add it, or a wildcard for the domain. Only TCP is carried. |
| The app is unreachable for everyone with access | The connector is offline. With one connector there is no failover. Add a second connector under Hosted by, and allow its IP too. |