Documentation
Solutions Guide
Machine Identity
Configure workload identity with SPIFFE/SPIRE. Eliminate hardcoded secrets with automatic credential management for services and CI/CD.
Estimated time: 25 minutes
Use Cases
CI/CD Pipelines
GitHub Actions, GitLab CI, Jenkins get short-lived credentials
Kubernetes Pods
Pods receive SPIFFE identities based on service account
Microservices
mTLS between services with automatic certificate rotation
Cloud Functions
Lambda, Cloud Functions receive workload identities
Setup Steps
1
Deploy SPIRE Server
Start the SPIRE server as part of TigerAccess auth service.
tigeraccess start --roles=auth \
--spire-enabled=true \
--trust-domain=company.com2
Install SPIRE Agent
Deploy the SPIRE agent on each workload host.
# On each host
tigeraccess start --roles=agent \
--spire-socket=/run/spire/sockets/agent.sock \
--auth-server=auth.company.com:30253
Register Workloads
Define which workloads can receive identities.
tacctl spiffe register \
--spiffe-id=spiffe://company.com/web-service \
--selector=k8s:ns:production \
--selector=k8s:sa:web-service \
--ttl=1h4
Configure CI/CD Integration
Enable OIDC federation for GitHub Actions, GitLab CI, etc.
tacctl create -f - <<EOF
kind: github_connector
metadata:
name: github-actions
spec:
client_id: ${GITHUB_APP_ID}
client_secret: ${GITHUB_APP_SECRET}
allowed_organizations:
- company
role_mappings:
- organization: company
roles: [deploy-agent]
EOF5
Use Machine Identity
Workloads automatically receive and renew certificates.
# In your application
import (
"github.com/spiffe/go-spiffe/v2/workloadapi"
)
client, _ := workloadapi.New(ctx)
svid, _ := client.FetchX509SVID(ctx)
// Use svid.Certificates for mTLSGitHub Actions Integration
Example Workflow
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Get TigerAccess credentials
uses: tigeraccess/auth-action@v1
with:
proxy: access.company.com:443
role: deploy-agent
- name: Deploy to Kubernetes
run: |
# Credentials are automatically available
kubectl apply -f k8s/
- name: Access database
run: |
# Short-lived database credentials
tac db connect prod-db --query="SELECT 1"Kubernetes Integration
Pod with SPIFFE Identity
# Kubernetes pod with SPIFFE identity
apiVersion: v1
kind: Pod
metadata:
name: web-service
namespace: production
spec:
serviceAccountName: web-service
containers:
- name: app
image: company/web-service:latest
volumeMounts:
- name: spiffe-workload-api
mountPath: /run/spire/sockets
readOnly: true
env:
- name: SPIFFE_ENDPOINT_SOCKET
value: unix:///run/spire/sockets/agent.sock
volumes:
- name: spiffe-workload-api
csi:
driver: csi.spiffe.io
readOnly: trueMachine Identity Enabled
With machine identity configured, your workloads benefit from:
- Zero hardcoded secrets in code or config
- Automatic credential rotation (1-24 hour TTL)
- mTLS between all services
- Complete audit trail for machine access