docs/documentation/platform/pki/migration.mdx
Your existing certificates, profiles, alerts, syncs, and approval policies continue to work. Certificates will keep renewing, alerts will keep firing, and syncs will keep running. Nothing breaks.
What you can still do at the product level:
What must now be done inside Applications:
Legacy profiles with enrollment methods configured will continue to issue certificates, but you cannot modify their enrollment configuration. New enrollment must be configured inside Applications.
Legacy alerts, syncs, and approval policies remain functional and can be modified, but new ones cannot be created at the product level. New ones must be created inside Applications.
The old project model put everything in one place (CAs, profiles, certificates, alerts, syncs) with project-level access control. The new model separates shared infrastructure from team operations.
Certificate Authorities, policies, and profiles now live at the product level, shared across your organization and managed by Product Admins. They're the building blocks that define what certificates can look like.
Applications are where teams actually work. An Application represents a service or workload that needs certificates: a payments API, an internal web app, a mobile backend. Each Application has its own:
Organization
└── Certificate Manager
├── Certificate Authorities ← shared, admin-managed
├── Certificate Policies ← shared, admin-managed
├── Certificate Profiles ← shared, admin-managed
└── Applications
├── payments-api
│ ├── Members
│ ├── Enrollment Methods
│ ├── Certificates
│ ├── Alerts, Syncs, Approval Policies
└── mobile-backend
└── ...
What this changes:
| Before (Projects) | After (Applications) |
|---|---|
| Everything in one project | Shared infrastructure + scoped Applications |
| Project-level access (see everything) | Application-level access (see only your service) |
| Enrollment baked into profiles | Enrollment configured per Application |
| Custom roles + conditions for scoping | Simple roles: Admin, Operator, Auditor |
| Alerts/syncs at project level | Alerts/syncs scoped to each Application |
For details, see Access Control.
Product Level:
| Role | What they see | What they can do |
|---|---|---|
| Product Admin | Everything | Full control of CAs, Policies, Profiles, Applications |
| Product Member | Applications they're assigned to | Operate within assigned Applications only |
Application Level:
| Role | What they can do |
|---|---|
| Admin | Configure enrollment methods, syncs, alerts, approvals. Manage members. |
| Operator | Issue, renew, revoke certificates |
| Auditor | View certificates and configuration (read-only) |
No custom roles. No attribute-based conditions. Add someone to an Application, pick a role, done.
1. Go to **Certificate Manager → Applications**
2. Click **Create Application**
3. Name it after the service (e.g., `payments-api`, `mobile-backend`)
Think about ownership: who is responsible for certificates for this service? That's who should be in this Application.
1. Go to the **Settings** tab and find the **Certificate Profiles** section
2. Attach profiles and configure enrollment methods (API, ACME, EST, SCEP)
<Note>
One profile can now serve multiple Applications with different enrollment methods. No more duplicating profiles.
</Note>
1. Go to the **Settings** tab and find the **Alerting** section
2. Create alerts for expiration, issuance, renewal, and revocation
<Note>
You can still modify or delete legacy alerts, but new alerts must be created inside Applications.
</Note>
1. Go to the **Certificate Syncs** tab
2. Configure syncs to push certificates to your destinations
<Note>
You can still modify or delete legacy syncs, but new syncs must be created inside Applications.
</Note>
1. Go to the **Settings** tab and find the **Approval Policies** section
2. Configure approval requirements for each attached profile
Pending approval requests appear in **Certificate Manager → Approval Requests**.
Go to the Application's **Members** tab to add members and assign roles.
- **ACME clients** (Certbot, [cert-manager](/documentation/platform/pki/guides/applications/k8s-cert-manager), etc.): Directory URLs now include both Application ID and Profile ID
- **[Infisical Agent](/documentation/platform/pki/guides/applications/infisical-agent)**: Update configuration to reference `application-name` and `profile-name`
- **EST/SCEP clients**: Endpoint URLs now include Application and Profile path segments
- **Terraform**: Update any `infisical_pki_*` resources to use the new Application-based configuration
- **API integrations**: Update endpoints to use the new Application context
If you have questions about migration, contact [email protected].