:_mod-docs-content-type: CONCEPT
[id="key-manager-service-hsm-adoption-approaches_{context}"]

= {key_manager} HSM adoption approaches

[role="_abstract"]
The {key_manager_first_ref} adoption approach depends on your source {OpenStackPreviousInstaller} environment configuration.

* Use the standard adoption approach if your environment includes only the `simple_crypto` plugin for secret storage and has no HSM integration.
* Use the HSM-enabled adoption approach if your source environment has HSM integration that uses Public Key Cryptography Standard (PKCS) #11, Key Management Interoperability Protocol (KMIP), or other HSM back ends alongside `simple_crypto`.

Standard adoption approach::
* Uses the existing {key_manager} adoption procedure
* Migrates a simple crypto back-end configuration
* Provides a single-step adoption process
* Is suitable for development, testing, and standard production environments

HSM-enabled adoption approach::
* Patches the `OpenStackControlPlane` custom resource with HSM-enabled configuration
* Creates required Kubernetes secrets (`hsm-login` and `proteccio-data`) for HSM credentials and certificates
* Preserves HSM metadata during database migration
* Supports both simple crypto and HSM back ends in the target environment
* Requires custom container images with HSM client libraries that are built by using the `rhoso_proteccio_hsm` Ansible role
* Requires HSM client certificates and configuration files
* Requires proper HSM partition and key configuration that matches your source environment
* The HSM-enabled adoption approach currently supports:
** Proteccio (Eviden Trustway): Fully supported with PKCS#11 integration
** Luna (Thales): PKCS#11 support available
** nCipher (Entrust): PKCS#11 support available

[IMPORTANT]
====
HSM adoption requires additional configuration steps, including:

* Custom Barbican container images with HSM client libraries that are built using the `rhoso_proteccio_hsm` Ansible role
* HSM client certificates and configuration files that are accessible from the host where you run the adoption commands
* Proper HSM partition and key configuration that matches your source environment

These approaches are mutually exclusive. Choose an approach based on your source environment configuration.
====

[options="header"]
|===
| Source environment characteristic | Approach | Rationale

| Only `simple_crypto` back-end configured
| Standard adoption
| No HSM complexity needed

| HSM integration present (PKCS#11, KMIP, and so on)
| HSM-enabled adoption
| Preserves HSM functionality and secrets

| Development or testing environment
| Standard adoption
| Simpler setup and maintenance

| Production with compliance requirements
| HSM-enabled adoption
| Maintains security compliance

| Unknown back-end configuration
| Check source environment first
| Determine appropriate approach
|===
