Cloud accounts
Connect an AWS, GCP, Azure, Databricks, Snowflake, Red Hat OpenShift, or Microsoft 365 account to ZopNight, choose its permission level, and rotate its credentials in place.
A cloud account is how ZopNight reaches your infrastructure: you connect one per AWS account, GCP project, Azure subscription or tenant, Databricks account, Snowflake account, OpenShift Cluster Manager organisation, or Microsoft 365 tenant. Connect read-only to discover resources and price the waste; grant Read + Write only where you want ZopNight to act. You can rotate credentials or switch auth methods later without losing anything.

Settings → Cloud Accounts: every connected account with its health badge, credential type, and permission level, plus Add Cloud Account, IAM import, and Manage clusters for OpenShift.
Before you start
For every provider you need:
- A ZopNight role that can add cloud accounts (the
cloud-account:createpermission; Admin has it by default). Removing an account later needscloud-account:delete, which a role can hold separately. - Admin access on the provider side, enough to create the role, service account, app registration, or credential the wizard asks for.
- A decision on the permission level. Read-only needs only the read grants; Read + Write also needs the start/stop grants for the services you want ZopNight to act on. See Read-only vs read + write and Cloud permissions.
What else to have ready depends on the provider:
AWS
- The 12-digit account ID.
- Rights to create an IAM role with a trust policy in that account (for WIF-Assume Role), or an IAM user’s access keys if you use Static Keys.
- The read policies from Cloud permissions: the CloudWatch metrics policy, discovery access (
ReadOnlyAccessis the simplest grant; support can provide a narrower describe-only list), and Cost Explorer read access for real billing cost.
GCP
- The project you want to connect (one cloud account per project).
- For One-Click Connect: a Google user who can administer the project’s IAM. A custom role, a group grant, or an inherited folder or organisation binding all qualify, not only
roles/owner. - For Service Account Key: a service account with
roles/monitoring.viewerandroles/cloudasset.viewer, plus the per-service viewer roles listed in Cloud permissions, and its JSON key. - For real billing cost: a BigQuery billing export, with
roles/bigquery.dataViewerandroles/bigquery.jobUseron the billing project.
Azure
- The subscription or tenant to connect. A tenant connection creates a child account for every subscription it can reach.
- An app registration, with either a client secret (Service Principal) or a federated credential (Workload Identity Federation), and the tenant, client, and subscription IDs.
Readeron the subscription (Monitoring Readeralso works), andCost Management Readeron the billing scope for real billing cost.
Databricks
- AWS or GCP workspaces: the Databricks Account ID and an account-level OAuth service principal (client ID and secret) that can list the workspace’s clusters.
- Azure workspaces: no separate connection. Connect the Azure subscription and grant the “Zopnight Databricks Access” role in the workspace.
Full detail is on the Databricks page.
Snowflake
- Your Snowflake account host. ZopNight reads the underlying cloud from it.
- A Snowflake user for ZopNight, authenticated by a key pair (JWT) or a programmatic access token (PAT).
- A role for that user that can query the
SNOWFLAKE.ACCOUNT_USAGEviews and runSHOWcommands, because discovery and cost come from them. To put warehouses on schedules, the role must also be able to suspend and resume them.
See Snowflake.
Red Hat OpenShift
- An OpenShift Cluster Manager (OCM) organisation and an OCM service account for ZopNight. The account connects to OCM, not to the AWS account the clusters run in.
- For each cluster you want to read, one of: the OCM Organization Administrator role (Automatic method), a cluster login you create with a read role, or a Kubernetes ServiceAccount token. See Connect an OpenShift cluster.
- A cluster API server ZopNight can reach. Clusters with a private API server cannot be connected.
Microsoft 365
- A Microsoft admin in your Entra tenant who can grant admin consent to ZopNight’s read-only application permissions.
See Microsoft 365.
How it works
Everything associated with an account (discovered resources, groups, recommendations, cost history, schedules) is keyed off the account’s stable cloud identity: the AWS 12-digit account number, Azure subscription or tenant GUID, GCP project id, or Databricks account id. That identity is always resolved live from the provider, never taken from what you type in, which is why rotation and auth-method switches keep all your data.
Supported providers & auth methods
AWS
WIF-Assume Role (recommended): a keyless cross-account IAM role with no long-lived secret stored · IAM User / Static Keys · Temporary Credentials (short-lived STS)
GCP
One-Click Connect (recommended): sign in with Google; ZopNight provisions and manages a dedicated service account · Service Account Key (customer-provided JSON)
Azure
Service Principal (recommended): app registration + client secret · Workload Identity Federation: federated OIDC, no client secret to store
Databricks
OAuth M2M: an account-level OAuth service principal. On AWS/GCP it’s a standalone connection; on Azure it rides the subscription. See Databricks.
Snowflake
Key-pair JWT or PAT: a standalone connection keyed on your Snowflake account. The underlying cloud is read from the account host, so there’s nothing to pick. Discovers nine resource types: the account, warehouses, databases, tables, materialized views, stages, pipes, users, and resource monitors. Cost is usage-based (warehouse credits and table storage), reconciled against your own Snowflake account-usage billing views, and warehouses can be put on start/stop schedules. See Snowflake.
Red Hat OpenShift
A standalone connection to an OpenShift Cluster Manager organisation, not to the AWS account the cluster runs in. See Connect an OpenShift cluster.
Microsoft 365
Admin consent in your Entra tenant, for Microsoft 365 Copilot seat licences. Connected from Settings → Integrations and then listed here like any other account. See Microsoft 365.
For the mechanics of each (trust policies, encryption, rotation cadence), see Authentication. For the IAM permissions each needs, see Cloud permissions.
Read-only vs read + write
Every account carries a permission level that governs what ZopNight may do with it.
| Level | ZopNight can | ZopNight cannot |
|---|---|---|
| Read-only | Discover resources, read metadata and billing, generate recommendations, and allow schedules to be attached | Start, stop, or remediate anything |
| Read + Write | All of the above, plus manual start/stop, bulk start/stop, scheduled execution, and auto-remediation | None |
Read-only is enforced server-side: the executor checks the account’s live permission level and returns a read-only error before any cloud call is made. The scheduler re-reads each account’s level whenever it reconnects to the config stream, so upgrading or downgrading takes effect on already-running schedules in real time, with no restart needed.
Connect an account
Open Add Cloud Account
Settings → Cloud Accounts → Add Cloud Account. The wizard runs in five steps: Select Provider, Auth Method, Permission Level, Setup Guide, and Enter Credentials.
Grant access on your side
Follow the in-wizard setup guide (trust policy, service account, or app registration). For GCP One-Click, a guided 3-step Google consent flow provisions the managed service account for you. The Google user who signs in must be able to administer the project’s IAM (a custom role, a group grant, or an inherited folder or organisation binding all qualify, not only
roles/owner).Verify
ZopNight verifies the credential live against the provider before it saves anything, so a successful connect is itself the proof. The
cloud_account_idis read from the provider’s response, not from your input. If verification fails, see Troubleshooting.
Rotate credentials or switch auth method
You can rotate an account’s credentials, or switch its auth method entirely, without deleting and recreating the account. All resources, groups, recommendations, cost history, and schedules are preserved.
| Provider | Supported transitions |
|---|---|
| AWS | Any-to-any across Static Keys, Temporary Credentials, and Assume Role (WIF) |
| Azure | Service Principal ↔ Workload Identity Federation; on a tenant parent the change cascades to every child subscription |
| GCP | One-Click Connect ↔ Service Account Key. Switching to One-Click runs the Google sign-in and finishes on the existing project in place. Switching away leaves the ZopNight-managed service account in your project, unused but not deleted |
| Databricks | Rotate the OAuth M2M credential via the inline rotation form |
This applies to rotations too, not just method switches: a same-method credential update runs the same live same-account check before storing, so a wrong or foreign credential can’t overwrite the vault and break discovery.
In the UI, the Edit Cloud Account drawer (AWS, Azure, and GCP) has an Update credentials button that opens a 3-step wizard (Auth Method → Setup Guide → Enter Credentials), the same steps as the Connect wizard. Step 1 preselects your current method (marked Current): keep it to rotate, pick another to switch. For GCP, picking One-Click runs the Google sign-in instead of a Save step. Databricks uses an inline rotation form.
Connect an OpenShift cluster
A ROSA cluster connects differently from EKS, GKE, or AKS. On those three, the cloud account’s own credentials can already talk to the cluster API, so there is nothing extra to do. An OpenShift Cluster Manager credential is not a Kubernetes credential. It authenticates to a different service, so a discovered ROSA cluster is listed but unreadable until you connect it explicitly.
Clusters are connected one at a time, from Manage clusters on the account card or from the cluster’s own page. There is no bulk action, because the three methods collect three different kinds of credential:
| Method | What happens | Needs |
|---|---|---|
| Automatic | ZopNight creates an htpasswd identity through OCM and grants it cluster-admins. The only method that writes to your cluster, and the only one where the identity it creates holds cluster-admin privileges. Pick one of the two below if that is more than you want to grant. | OCM Organization Administrator |
| Cluster login | You create the identity and bind a read role; ZopNight exchanges your username and password for a short-lived token and provisions nothing. | A cluster login you create |
| Service account | You create a Kubernetes ServiceAccount and hand over its token. Never touches OpenShift’s OAuth server, so this is the only method that works on a cluster running external authentication. | A ServiceAccount token |
Pod consolidation
On the cluster’s Settings tab, below the autoscaler, you can switch on pod consolidation. ZopNight configures the OpenShift descheduler to move pods off barely used nodes, so the cluster autoscaler can remove the emptied nodes. You set simulate or evict mode, how often it runs, caps on pods moved per node and in total, namespaces to leave alone, and how empty a node must be (10%, 20%, or 30% of requested capacity).
- It never removes a node itself. The autoscaler’s scale-down does that, so a save that could not free a node (scale-down off, no pool set to autoscale, or a threshold above the autoscaler’s own) is refused.
- Pods with their own storage are always skipped.
- The platform installs the descheduler operator the first time you switch consolidation on. Switching it off removes the configuration and leaves the operator in place.
- If the cluster’s scheduler spreads pods across nodes (the OpenShift default), evicted pods can land straight back on the same node. The tab warns you when evict mode is selected on such a cluster; only a cluster admin can change the scheduler profile.
- A descheduler configuration the platform did not create is shown read-only and never replaced.
- Only the Automatic connect method can write this configuration today. The Cluster login and Service account methods bind a read-only role, so a save on a cluster connected that way fails with a permission error. Connect the cluster with Automatic, or grant the identity write access to the descheduler configuration, before switching consolidation on.
Account actions
| Action | What it does |
|---|---|
| Update | Change display name, permission level, ZopDay access level (whether ZopDay may use this account for provisioning and deploys), credentials (verified rotation), or auth method (verified in-place change) |
| Permission upgrade (GCP One-Click) | Re-binds the managed service account’s roles using the stored OAuth token, so there is no need to re-mint the SA key |
| Cluster registration (ZopDay) | Register an EKS, GKE, or AKS cluster so ZopDay can deploy to it. See Cluster registration for what each cloud supports |
| Delete | Soft-deletes the account (marks it inactive), cascades to Azure tenant children, and cleans up anything imported via IAM Import |
Troubleshooting
Verification fails when connecting
The account is not saved and the wizard shows the reason. Common causes are a missing or misconfigured role or trust policy, an unresolvable service account or app registration, or the wrong scope. Fix the grant on your side and retry, or contact support.
Update credentials returns an error
New credentials must verify live and resolve to the same cloud identity as the existing account. Credentials for a different account, or ones that fail verification, are refused and nothing changes. Check that the new role, key, or app registration belongs to the same account, subscription, or tenant.
A ROSA cluster is listed but unreadable
An OpenShift Cluster Manager credential is not a Kubernetes credential, so each ROSA cluster must be connected explicitly from Manage clusters. A cluster whose API server is private cannot be connected at all; it is flagged rather than hidden. See Connect an OpenShift cluster.
Saving pod consolidation fails with a permission error
The Cluster login and Service account methods bind a read-only role. Reconnect the cluster with Automatic, or grant the identity write access to the descheduler configuration.