mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
353 lines
17 KiB
Plaintext
353 lines
17 KiB
Plaintext
---
|
||
title: "Gateway"
|
||
sidebarTitle: "Overview"
|
||
description: "How to access private network resources from Infisical"
|
||
---
|
||
|
||

|
||
|
||
The Infisical Gateway provides secure access to private resources within your network without needing direct inbound connections to your environment.
|
||
This method keeps your resources fully protected from external access while enabling Infisical to securely interact with resources like databases.
|
||
Common use cases include generating dynamic credentials or rotating credentials for private databases.
|
||
|
||
<Info>
|
||
Gateway is a paid feature available under the Enterprise Tier for Infisical
|
||
Cloud users. Self-hosted Infisical users can contact
|
||
[sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise
|
||
license.
|
||
</Info>
|
||
|
||
## How It Works
|
||
|
||
The Gateway serves as a secure intermediary that facilitates direct communication between the Infisical server and your private network.
|
||
It’s a lightweight daemon packaged within the Infisical CLI, making it easy to deploy and manage. Once set up, the Gateway establishes a connection with a relay server, ensuring that all communication between Infisical and your Gateway is fully end-to-end encrypted.
|
||
This setup guarantees that only the platform and your Gateway can decrypt the transmitted information, keeping communication with your resources secure, private and isolated.
|
||
|
||
## Deployment
|
||
|
||
The Infisical Gateway is seamlessly integrated into the Infisical CLI under the `gateway` command, making it simple to deploy and manage.
|
||
You can install the Gateway in all the same ways you install the Infisical CLI—whether via npm, Docker, or a binary.
|
||
For detailed installation instructions, refer to the Infisical [CLI Installation instructions](/cli/overview).
|
||
|
||
To function, the Gateway must authenticate with Infisical. This requires a machine identity configured with the appropriate permissions to create and manage a Gateway.
|
||
Once authenticated, the Gateway establishes a secure connection with Infisical to allow your private resources to be reachable.
|
||
|
||
### Get started
|
||
|
||
<Steps>
|
||
<Step title="Create a Gateway Identity">
|
||
1. Navigate to **Organization Access Control** in your Infisical dashboard.
|
||
2. Create a dedicated machine identity for your Gateway.
|
||
3. **Best Practice:** Assign a unique identity to each Gateway for better security and management.
|
||

|
||
</Step>
|
||
|
||
<Step title="Configure Authentication Method">
|
||
You'll need to choose an authentication method to initiate communication with Infisical. View the available machine identity authentication methods [here](/documentation/platform/identities/machine-identities).
|
||
</Step>
|
||
|
||
<Step title="Deploy the Gateway">
|
||
Use the Infisical CLI to deploy the Gateway. You can run it directly or install it as a systemd service for production:
|
||
|
||
<Tabs>
|
||
<Tab title="Production (systemd)">
|
||
For production deployments on Linux, install the Gateway as a systemd service:
|
||
```bash
|
||
sudo infisical gateway install --token <your-machine-identity-token> --domain <your-infisical-domain>
|
||
sudo systemctl start infisical-gateway
|
||
```
|
||
This will install and start the Gateway as a secure systemd service that:
|
||
- Runs with restricted privileges:
|
||
- Runs as root user (required for secure token management)
|
||
- Restricted access to home directories
|
||
- Private temporary directory
|
||
- Automatically restarts on failure
|
||
- Starts on system boot
|
||
- Manages token and domain configuration securely in `/etc/infisical/gateway.conf`
|
||
|
||
<Warning>
|
||
The install command requires:
|
||
- Linux operating system
|
||
- Root/sudo privileges
|
||
- Systemd
|
||
</Warning>
|
||
</Tab>
|
||
|
||
<Tab title="Production (Helm)">
|
||
|
||
The Gateway can be installed via [Helm](https://helm.sh/). Helm is a package manager for Kubernetes that allows you to define, install, and upgrade Kubernetes applications.
|
||
|
||
For production deployments on Kubernetes, install the Gateway using the Infisical Helm chart:
|
||
|
||
### Install the latest Helm Chart repository
|
||
```bash
|
||
helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/'
|
||
```
|
||
|
||
### Update the Helm Chart repository
|
||
```bash
|
||
helm repo update
|
||
```
|
||
|
||
### Create a Kubernetes Secret containing gateway environment variables
|
||
|
||
The gateway supports all identity authentication methods through the use of environment variables.
|
||
The environment variables must be set in the `infisical-gateway-environment` Kubernetes secret.
|
||
|
||
|
||
#### Supported authentication methods
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="Universal Auth">
|
||
The Universal Auth method is a simple and secure way to authenticate with Infisical. It requires a client ID and a client secret to authenticate with Infisical.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_UNIVERSAL_AUTH_CLIENT_ID" type="string" required>
|
||
Your machine identity client ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET" type="string" required>
|
||
Your machine identity client secret.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `universal-auth` when using Universal Auth.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=universal-auth --from-literal=INFISICAL_UNIVERSAL_AUTH_CLIENT_ID=<client-id> --from-literal=INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET=<client-secret>
|
||
```
|
||
|
||
</Accordion>
|
||
<Accordion title="Native Kubernetes">
|
||
The Native Kubernetes method is used to authenticate with Infisical when running in a Kubernetes environment. It requires a service account token to authenticate with Infisical.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_KUBERNETES_SERVICE_ACCOUNT_TOKEN_PATH" type="string" optional>
|
||
Path to the Kubernetes service account token to use. Default: `/var/run/secrets/kubernetes.io/serviceaccount/token`.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `kubernetes` when using Native Kubernetes.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=kubernetes --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id>
|
||
```
|
||
|
||
</Accordion>
|
||
<Accordion title="Native Azure">
|
||
The Native Azure method is used to authenticate with Infisical when running in an Azure environment.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `azure` when using Native Azure.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=azure --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id>
|
||
```
|
||
</Accordion>
|
||
<Accordion title="Native GCP ID Token">
|
||
The Native GCP ID Token method is used to authenticate with Infisical when running in a GCP environment.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `gcp-id-token` when using Native GCP ID Token.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=gcp-id-token --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id>
|
||
```
|
||
|
||
</Accordion>
|
||
<Accordion title="GCP IAM">
|
||
The GCP IAM method is used to authenticate with Infisical with a GCP service account key.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_GCP_SERVICE_ACCOUNT_KEY_FILE_PATH" type="string" required>
|
||
Path to your GCP service account key file _(Must be in JSON format!)_
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `gcp-iam` when using GCP IAM.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=gcp-iam --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id> --from-literal=INFISICAL_GCP_SERVICE_ACCOUNT_KEY_FILE_PATH=<service-account-key-file-path>
|
||
```
|
||
|
||
|
||
</Accordion>
|
||
<Accordion title="Native AWS IAM">
|
||
The AWS IAM method is used to authenticate with Infisical with an AWS IAM role while running in an AWS environment like EC2, Lambda, etc.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `aws-iam` when using Native AWS IAM.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=aws-iam --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id>
|
||
```
|
||
|
||
</Accordion>
|
||
<Accordion title="OIDC Auth">
|
||
The OIDC Auth method is used to authenticate with Infisical via identity tokens with OIDC.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_JWT" type="string" required>
|
||
The OIDC JWT from the identity provider.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `oidc-auth` when using OIDC Auth.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=oidc-auth --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id> --from-literal=INFISICAL_JWT=<oidc-jwt>
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="JWT Auth">
|
||
The JWT Auth method is used to authenticate with Infisical via a JWT token.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_JWT" type="string" required>
|
||
The JWT token to use for authentication.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_MACHINE_IDENTITY_ID" type="string" required>
|
||
Your machine identity ID.
|
||
</ParamField>
|
||
<ParamField query="INFISICAL_AUTH_METHOD" type="string" required>
|
||
The authentication method to use. Must be `jwt-auth` when using JWT Auth.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_AUTH_METHOD=jwt-auth --from-literal=INFISICAL_JWT=<jwt> --from-literal=INFISICAL_MACHINE_IDENTITY_ID=<machine-identity-id>
|
||
```
|
||
</Accordion>
|
||
<Accordion title="Token Auth">
|
||
You can use the `INFISICAL_TOKEN` environment variable to authenticate with Infisical with a raw machine identity access token.
|
||
|
||
<ParamField query="Environment Variables">
|
||
<Expandable title="properties">
|
||
<ParamField query="INFISICAL_TOKEN" type="string" required>
|
||
The machine identity access token to use for authentication.
|
||
</ParamField>
|
||
</Expandable>
|
||
</ParamField>
|
||
|
||
```bash
|
||
kubectl create secret generic infisical-gateway-environment --from-literal=INFISICAL_TOKEN=<token>
|
||
```
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
|
||
#### Other environment variables
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="INFISICAL_API_URL">
|
||
The API URL to use for the gateway. By default, `INFISICAL_API_URL` is set to `https://app.infisical.com`.
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
|
||
### Install the Infisical Gateway Helm Chart
|
||
```bash
|
||
helm install infisical-gateway infisical-helm-charts/infisical-gateway
|
||
```
|
||
|
||
### Check the gateway logs
|
||
After installing the gateway, you can check the logs to ensure it's running as expected.
|
||
|
||
```bash
|
||
kubectl logs deployment/infisical-gateway
|
||
```
|
||
|
||
You should see the following output which indicates the gateway is running as expected.
|
||
```bash
|
||
$ kubectl logs deployment/infisical-gateway
|
||
INF Provided relay port 5349. Using TLS
|
||
INF Connected with relay
|
||
INF 10.0.101.112:56735
|
||
INF Starting relay connection health check
|
||
INF Gateway started successfully
|
||
INF New connection from: 10.0.1.8:34051
|
||
INF Gateway is reachable by Infisical
|
||
```
|
||
|
||
</Tab>
|
||
|
||
<Tab title="Local Installation (testing)">
|
||
For development or testing, you can run the Gateway directly. Log in with your machine identity and start the Gateway in one command:
|
||
```bash
|
||
infisical gateway --token $(infisical login --method=universal-auth --client-id=<> --client-secret=<> --plain)
|
||
```
|
||
|
||
Alternatively, if you already have the token, use it directly with the `--token` flag:
|
||
```bash
|
||
infisical gateway --token <your-machine-identity-token>
|
||
```
|
||
|
||
Or set it as an environment variable:
|
||
```bash
|
||
export INFISICAL_TOKEN=<your-machine-identity-token>
|
||
infisical gateway
|
||
```
|
||
</Tab>
|
||
</Tabs>
|
||
|
||
For detailed information about the gateway command and its options, see the [gateway command documentation](/cli/commands/gateway).
|
||
|
||
<Note>
|
||
Ensure the deployed Gateway has network access to the private resources you intend to connect with Infisical.
|
||
</Note>
|
||
|
||
</Step>
|
||
|
||
<Step title="Verify Gateway Deployment">
|
||
To confirm your Gateway is working, check the deployment status by looking for the message **"Gateway started successfully"** in the Gateway logs. This indicates the Gateway is running properly. Next, verify its registration by opening your Infisical dashboard, navigating to **Organization Access Control**, and selecting the **Gateways** tab. Your newly deployed Gateway should appear in the list.
|
||

|
||
</Step>
|
||
</Steps>
|