Skip to main content
Cynative connectors use credentials that are already present in your shell — there is no separate credential store, no new cloud identity to create, and no extra login step. Run Cynative from the shell where you normally run aws, gcloud, az, kubectl, gh, or glab, and the matching connectors register automatically. If a connector can retrieve credentials, it is listed in the startup inventory; if it cannot, it is skipped quietly.

Connector catalog

The model can look up an exact AWS, GitHub, GitLab, GCP, Azure, or Kubernetes operation — with a request template — through the api_reference tool.

Three layers of read-only enforcement

Cynative combines up to three independent controls on every request, applied in order before any credential is attached:

Defense at a glance

Cynative ships a vendor-curated, read-only baseline that you can re-point to a different policy or role per connector — a spectrum of exposure that is safe by default, not a binary read/write toggle. Only AWS has credential downscoping, and even there it applies to assumed-role identities only. For every other connector the action/RBAC gate is the sole client-side control. Kubernetes exposure is operator-selectable per connector via connectors.<id>.cluster_role (default the built-in view role).

Shared request model

All connector-backed requests go through the http_request tool. The model sets auth_provider to one of the registered connector ids and includes the connector-specific auth argument object (such as aws_auth, gcp_auth, or aks_auth). Cynative applies request authorization before attaching credentials, then applies the dial guard when the HTTP transport connects:
  1. The URL must use HTTPS.
  2. The selected connector must authorize the request host.
  3. The selected connector must authorize the requested action when it implements action authorization.
  4. Credentials are attached only after host and action authorization pass.
  5. At dial time, the selected connector or the default dial guard authorizes the resolved IP address before the credential-bearing request is sent. When the operator has configured a proxy through the standard HTTPS_PROXY / HTTP_PROXY / NO_PROXY variables, a proxied request connects only to that proxy and the address check is the proxy’s.

Shared configuration

Connector hardening is configured under the top-level connectors: key in ~/.cynative/config.yaml:
Most keys are also settable through CYNATIVE_* environment variables, for example CYNATIVE_CONNECTORS_AWS_POLICY, CYNATIVE_CONNECTORS_GCP_ROLE, CYNATIVE_CONNECTORS_AZURE_ROLE_DEFINITION, CYNATIVE_CACHE_DIR, and CYNATIVE_CACHE_TTL. The GitHub and GitLab permissions maps take a compact comma-separated key=value form, for example:
A non-empty environment value replaces the file map wholesale; a blank value is treated as unset.

Outbound proxies

Outbound proxy settings (HTTPS_PROXY, HTTP_PROXY, NO_PROXY) apply uniformly to every connector. See the proxy documentation for what is routed, what is not, and what an intercepting proxy can see.
Cynative itself reads almost no vendor environment variables directly — the vendor SDK/CLI does. The AWS SDK default chain reads AWS_PROFILE, AWS_ACCESS_KEY_ID, and related variables; Google ADC reads GOOGLE_APPLICATION_CREDENTIALS; the Azure credential chain reads AZURE_TENANT_ID and peers; go-gh reads GH_TOKEN; the GitLab connector reads GITLAB_TOKEN. To change which identity Cynative uses, set the vendor’s own variables (or run its login command) in the shell Cynative runs from. Cynative’s CYNATIVE_* variables control exposure settings and connector-specific knobs, not vendor credentials.