mirror of
https://github.com/Infisical/infisical.git
synced 2026-01-08 23:18:05 -05:00
422 lines
16 KiB
Plaintext
422 lines
16 KiB
Plaintext
---
|
|
title: "Infisical Certificate Agent"
|
|
description: "Learn how to use Infisical CLI Agent to manage certificates automatically."
|
|
---
|
|
|
|
The Infisical Certificate Agent is a specialized feature of the Infisical CLI designed to automatically manage certificates from your Infisical instance. It operates as a daemon process that continuously monitors and handles certificate lifecycle events including issuance, renewal, and storage without manual intervention.
|
|
|
|
## Key features
|
|
|
|
- **Automated Certificate Management**: Automatically issue, monitor, and renew certificates from Infisical [Certificate Profiles](/documentation/platform/pki/certificates/profiles)
|
|
- **Certificate Signing Request (CSR) Support**: Submit pre-generated CSRs for certificate issuance
|
|
- **Intelligent Renewal**: Configurable renewal thresholds and automatic certificate renewal before expiration
|
|
- **Post-Event Hooks**: Execute custom commands after certificate issuance, renewal, or failure events
|
|
- **Multiple Authentication Methods**: Support for Universal Auth, Kubernetes, AWS, GCP, and Azure authentication
|
|
|
|
## Getting Started
|
|
|
|
To use the Certificate Agent, you'll need:
|
|
|
|
1. **Infisical CLI installed**: Download from [GitHub releases](https://github.com/Infisical/cli/releases)
|
|
2. **Certificate Profile configured**: Set up a [certificate profile](/documentation/platform/pki/certificates/profiles) in your Infisical project
|
|
3. **Authentication credentials**: [Machine identity](/documentation/platform/identities/overview) with appropriate permissions
|
|
|
|
The agent operates using a YAML configuration file that defines authentication, certificate profiles, and operational parameters. When started, it authenticates with Infisical and begins monitoring certificates according to your configuration.
|
|
|
|
## Certificate Management
|
|
|
|
### Manual Certificate Issuance
|
|
|
|
The agent will issue a certificate with specified parameters:
|
|
|
|
```yaml
|
|
version: v1
|
|
|
|
certificates:
|
|
- profile-id: "prof-web-server-12345"
|
|
common-name: "api.company.com"
|
|
alt-names:
|
|
- "www.api.company.com"
|
|
- "api-v2.company.com"
|
|
key-algorithm: "RSA_2048"
|
|
signature-algorithm: "RSA-SHA256"
|
|
key-usages:
|
|
- "digital_signature"
|
|
- "key_encipherment"
|
|
extended-key-usages:
|
|
- "server_auth"
|
|
ttl: "30d"
|
|
file-output:
|
|
private-key-path: "./certs/api/private.key"
|
|
certificate-path: "./certs/api/certificate.crt"
|
|
file-permissions: "0600"
|
|
```
|
|
|
|
### CSR-based Issuance
|
|
|
|
Submit a pre-generated [Certificate Signing Request](/documentation/platform/pki/certificates#guide-to-issuing-certificates):
|
|
|
|
```yaml
|
|
version: v1
|
|
|
|
certificates:
|
|
- profile-id: "prof-external-ca-12345"
|
|
csr-path: "/etc/ssl/requests/api.csr"
|
|
file-output:
|
|
certificate-path: "/etc/ssl/certs/api.crt"
|
|
ca-certificate-path: "/etc/ssl/certs/ca.crt"
|
|
file-permissions: "0644"
|
|
```
|
|
|
|
## Lifecycle Management
|
|
|
|
The Certificate Agent provides comprehensive certificate lifecycle management with configurable monitoring and renewal:
|
|
|
|
```yaml
|
|
version: v1
|
|
|
|
certificates:
|
|
- profile-id: "prof-web-server-12345"
|
|
common-name: "web.company.com"
|
|
alt-names: ["www.company.com"]
|
|
ttl: "90d"
|
|
lifecycle:
|
|
renew-before-expiry: "14d" # Renew 14 days before expiration
|
|
status-check-interval: "6h" # Check certificate status every 6 hours
|
|
file-output:
|
|
private-key-path: "./certs/web/private.key"
|
|
certificate-path: "./certs/web/certificate.crt"
|
|
file-permissions: "0600"
|
|
post-hooks:
|
|
on-issuance:
|
|
command: "systemctl reload nginx"
|
|
timeout: 30
|
|
on-renewal:
|
|
command: "systemctl reload nginx && logger 'Certificate renewed'"
|
|
timeout: 30
|
|
```
|
|
|
|
## Post-Event Hooks
|
|
|
|
Execute custom commands in response to certificate lifecycle events using the `post-hooks` configuration:
|
|
|
|
<Tabs>
|
|
<Tab title="Issuance Hook">
|
|
Runs when a new certificate is successfully issued:
|
|
|
|
```yaml
|
|
post-hooks:
|
|
on-issuance:
|
|
command: |
|
|
echo "New certificate issued for ${CERT_COMMON_NAME}"
|
|
chown nginx:nginx ${CERT_FILE_PATH}
|
|
chmod 644 ${CERT_FILE_PATH}
|
|
systemctl reload nginx
|
|
timeout: 30
|
|
```
|
|
</Tab>
|
|
|
|
<Tab title="Renewal Hook">
|
|
Runs when a certificate is successfully renewed:
|
|
|
|
```yaml
|
|
post-hooks:
|
|
on-renewal:
|
|
command: |
|
|
echo "Certificate renewed for ${CERT_COMMON_NAME}"
|
|
# Reload services that use the certificate
|
|
systemctl reload nginx
|
|
systemctl reload haproxy
|
|
|
|
# Send notification
|
|
curl -X POST https://hooks.slack.com/... \
|
|
-d "{'text': 'Certificate for ${CERT_COMMON_NAME} renewed successfully'}"
|
|
timeout: 60
|
|
```
|
|
</Tab>
|
|
|
|
<Tab title="Failure Hook">
|
|
Runs when certificate operations fail:
|
|
|
|
```yaml
|
|
post-hooks:
|
|
on-failure:
|
|
command: |
|
|
echo "Certificate operation failed for ${CERT_COMMON_NAME}: ${ERROR_MESSAGE}"
|
|
# Send alert
|
|
mail -s "Certificate Failure Alert" admin@company.com < /dev/null
|
|
# Log to syslog
|
|
logger -p daemon.error "Certificate agent failure: ${ERROR_MESSAGE}"
|
|
timeout: 30
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Authentication
|
|
|
|
The Certificate Agent uses the same authentication system as the Infisical CLI. Configure authentication in the `auth` section of your configuration file.
|
|
|
|
<AccordionGroup>
|
|
<Accordion title="Universal Auth">
|
|
The Universal Auth method uses a client ID and secret for authentication.
|
|
|
|
<Steps>
|
|
<Step title="Create a universal auth machine identity">
|
|
To create a universal auth machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/universal-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Update the agent configuration file with the auth method and credentials:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "universal-auth"
|
|
config:
|
|
client-id: "./client-id" # Path to file containing client ID
|
|
client-secret: "./client-secret" # Path to file containing client secret
|
|
remove-client-secret-on-read: false # Optional: remove secret file after reading
|
|
```
|
|
|
|
You can also provide credentials directly:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "universal-auth"
|
|
config:
|
|
client-id: "your-client-id"
|
|
client-secret: "your-client-secret"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Accordion>
|
|
<Accordion title="Kubernetes Auth">
|
|
The Kubernetes Auth method is used when running the agent in a Kubernetes environment.
|
|
|
|
<Steps>
|
|
<Step title="Create a Kubernetes machine identity">
|
|
To create a Kubernetes machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/kubernetes-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Configure the agent to use Kubernetes service account authentication:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "kubernetes-auth"
|
|
config:
|
|
identity-id: "your-kubernetes-identity-id"
|
|
service-account-token-path: "/var/run/secrets/kubernetes.io/serviceaccount/token"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Accordion>
|
|
<Accordion title="Azure Auth">
|
|
The Azure Auth method is used when running the agent in an Azure environment.
|
|
|
|
<Steps>
|
|
<Step title="Create an Azure machine identity">
|
|
To create an Azure machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/azure-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Configure the agent to use Azure managed identity authentication:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "azure-auth"
|
|
config:
|
|
identity-id: "your-azure-identity-id"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</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.
|
|
|
|
<Steps>
|
|
<Step title="Create a GCP machine identity">
|
|
To create a GCP machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/gcp-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Update the agent configuration file with the specified auth method and identity ID:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "gcp-id-token"
|
|
config:
|
|
identity-id: "your-gcp-identity-id"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
|
|
</Accordion>
|
|
<Accordion title="GCP IAM">
|
|
The GCP IAM method is used to authenticate with Infisical with a GCP service account key.
|
|
|
|
<Steps>
|
|
<Step title="Create a GCP machine identity">
|
|
To create a GCP machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/gcp-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Update the agent configuration file with the specified auth method, identity ID, and service account key:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "gcp-iam"
|
|
config:
|
|
identity-id: "your-gcp-identity-id"
|
|
service-account-key: "/path/to/service-account-key.json"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
|
|
</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.
|
|
|
|
<Steps>
|
|
<Step title="Create an AWS machine identity">
|
|
To create an AWS machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/aws-auth).
|
|
</Step>
|
|
<Step title="Configure the agent">
|
|
Update the agent configuration file with the specified auth method and identity ID:
|
|
|
|
```yaml
|
|
auth:
|
|
type: "aws-iam"
|
|
config:
|
|
identity-id: "your-aws-identity-id"
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
|
|
</Accordion>
|
|
</AccordionGroup>
|
|
|
|
## Retrying mechanism
|
|
|
|
The Certificate Agent will automatically attempt to retry failed API requests such as authentication, certificate issuance, and renewal operations.
|
|
By default, the agent will retry up to 3 times with a base delay of 200ms and a maximum delay of 5s.
|
|
|
|
You can configure the retrying mechanism through the agent configuration file:
|
|
|
|
```yaml
|
|
infisical:
|
|
address: "https://app.infisical.com"
|
|
retry-strategy:
|
|
max-retries: 3
|
|
max-delay: "5s"
|
|
base-delay: "200ms"
|
|
|
|
# ... rest of the agent configuration file
|
|
```
|
|
|
|
#### Certificate Configuration Parameters
|
|
|
|
| Parameter | Description |
|
|
| ------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
| `profile-id` | [Certificate profile](/documentation/platform/pki/certificates/profiles) identifier |
|
|
| `common-name` | Certificate common name |
|
|
| `alt-names` | List of alternative names |
|
|
| `ttl` | Certificate validity period |
|
|
| `key-algorithm` | Private key algorithm (RSA_2048, RSA_4096, ECDSA_P256, ECDSA_P384) |
|
|
| `signature-algorithm` | Signature algorithm (RSA-SHA256, RSA-SHA512, ECDSA-SHA256) |
|
|
| `key-usages` | List of key usage values |
|
|
| `extended-key-usages` | List of extended key usage values |
|
|
| `csr-path` | Path to CSR file |
|
|
| `file-output.private-key-path` | Where to store private key |
|
|
| `file-output.certificate-path` | Where to store certificate |
|
|
| `file-output.ca-certificate-path` | Where to store CA certificate |
|
|
| `file-output.file-permissions` | File permissions for generated files |
|
|
| `lifecycle.renew-before-expiry` | When to renew before expiration |
|
|
| `lifecycle.status-check-interval` | How often to check certificate status | |
|
|
| `post-hooks.on-issuance.command` | Command to run on certificate issuance |
|
|
| `post-hooks.on-issuance.timeout` | Timeout for issuance command |
|
|
| `post-hooks.on-renewal.command` | Command to run on certificate renewal |
|
|
| `post-hooks.on-renewal.timeout` | Timeout for renewal command |
|
|
| `post-hooks.on-failure.command` | Command to run on operation failure |
|
|
| `post-hooks.on-failure.timeout` | Timeout for failure command |
|
|
|
|
## Agent configuration file
|
|
|
|
The Certificate Agent configuration file is a YAML file that defines how the agent should behave. It includes authentication settings, certificate profiles, and operational parameters.
|
|
|
|
Below is a comprehensive example of a Certificate Agent configuration file:
|
|
|
|
```yaml example-cert-agent-config.yaml
|
|
version: v1
|
|
|
|
# Required: Infisical server configuration
|
|
infisical:
|
|
address: "https://app.infisical.com"
|
|
retry-strategy:
|
|
max-retries: 3
|
|
max-delay: "5s"
|
|
base-delay: "200ms"
|
|
|
|
# Authentication configuration
|
|
auth:
|
|
type: "universal-auth"
|
|
config:
|
|
client-id: "your-client-id"
|
|
client-secret: "your-client-secret"
|
|
|
|
certificates:
|
|
- profile-id: "prof-web-server-12345"
|
|
common-name: "web.company.com"
|
|
alt-names: ["web.company.com", "www.company.com"]
|
|
ttl: "90d"
|
|
key-algorithm: "RSA_2048"
|
|
signature-algorithm: "RSA-SHA256"
|
|
key-usages:
|
|
- "digital_signature"
|
|
- "key_encipherment"
|
|
extended-key-usages:
|
|
- "server_auth"
|
|
|
|
# Lifecycle management
|
|
lifecycle:
|
|
renew-before-expiry: "30d"
|
|
status-check-interval: "6h"
|
|
max-failure-retries: 3
|
|
failure-retry-interval: "1h"
|
|
|
|
# File output configuration
|
|
file-output:
|
|
private-key-path: "/etc/ssl/private/web.key"
|
|
certificate-path: "/etc/ssl/certs/web.crt"
|
|
ca-certificate-path: "/etc/ssl/certs/ca.crt"
|
|
file-permissions: "0600"
|
|
|
|
# Post-event hooks
|
|
post-hooks:
|
|
on-issuance:
|
|
command: |
|
|
echo "Certificate issued for ${CERT_COMMON_NAME}"
|
|
systemctl reload nginx
|
|
timeout: 30
|
|
|
|
on-renewal:
|
|
command: |
|
|
echo "Certificate renewed for ${CERT_COMMON_NAME}"
|
|
systemctl reload nginx
|
|
timeout: 30
|
|
|
|
on-failure:
|
|
command: |
|
|
echo "Certificate operation failed: ${ERROR_MESSAGE}"
|
|
mail -s "Certificate Alert" admin@company.com < /dev/null
|
|
timeout: 30
|
|
```
|
|
|
|
After defining the agent configuration file, run the command below pointing to the path where the agent configuration file is located.
|
|
|
|
```bash
|
|
infisical cert-manager agent --config /path/to/your/agent-config.yaml
|
|
```
|
|
|
|
The agent will start as a daemon process, continuously monitoring and managing certificates according to your configuration. You can also run it in the foreground for debugging:
|
|
|
|
```bash
|
|
infisical cert-manager agent --config /path/to/your/agent-config.yaml --verbose
|
|
```
|
|
|
|
For production deployments, consider running the agent as a system service to ensure it starts automatically and runs continuously.
|