En este tema, se explica cómo almacenar datos sensibles en un secreto de Kubernetes y recuperar los datos de las variables de flujo en un flujo del proxy de API.
Introducción
Hay momentos en los que deseas almacenar datos para recuperarlos durante el entorno de ejecución, datos que no vencen y que no deben estar hard-coded en la lógica del proxy de API. Una opción es usar la función de mapa de clave-valor (KVM) híbrida. Si ya usas Kubernetes para la administración de secretos en un vault personalizado de datos sensibles, deberías considerar usar la característica secreta de Kubernetes descrita en este tema. Al igual que con los datos de KVM, puedes acceder a los datos del secreto de Kubernetes en las variables de flujo del proxy de API.
¿Qué tipos de datos se pueden almacenar en un secreto de Kubernetes?
Apigee Hybrid limita el almacenamiento de los siguientes tipos de archivos de datos en un secreto de Kubernetes. En ellos se incluye lo siguiente:
Formato del archivo | Extensiones de archivo compatibles |
---|---|
Certificado TLS y archivos de claves | *.crt , *.key y *.pem |
Archivos de propiedad | *.properties |
Los archivos de propiedad son archivos que contienen pares clave-valor. Por ejemplo:
username=admin password=1f2d1e2e7df
Crea un secreto de Kubernetes
En esta sección, se explica cómo crear un secreto de Kubernetes para almacenar datos sensibles en el clúster.
- Crea los archivos que deseas almacenar en el secreto de Kubernetes. Los archivos deben estar en uno de los formatos admitidos con las extensiones de archivo que se enumeran en Qué tipos de datos pueden almacenarse en un secreto de Kubernetes.
- Ejecuta el comando
kubectl create secret generic
. Por ejemplo:kubectl -n namespace create secret generic org-env-policy-secret \ --from-file=filepath/prop-file.properties \ --from-file=filepath/key-file.key \ --from-file="filepath/cert-file.pem
Aquí:
- namespace: El espacio de nombres de Kubernetes en el que se implementan tus componentes del entorno de ejecución.
- org: El nombre de tu organización de Apigee.
- env: El nombre de un entorno de tu organización.
- filepath: La ruta de acceso al archivo que deseas incluir en el secreto. Debes especificar al menos un archivo para incluir en el secreto.
- prop-file: El nombre de un archivo de propiedades que deseas incluir en el secreto.
- key-file: El nombre de un archivo de claves TLS que se incluirá en el secreto.
- cert-file: El nombre de un archivo de certificado TLS que se incluirá en el secreto.
Puedes incluir uno o más archivos en el secreto. Por ejemplo:
kubectl -n apigee create secret generic myorg-test-policy-secret \ --from-file="$policy_secrets_path"/credential.properties \ --from-file="$policy_secrets_path"/secrets.properties \ --from-file="$policy_secrets_path"/public.key \ --from-file="$policy_secrets_path"/fullchain.pem
Luego de la creación, el cambio puede demorar hasta 90 segundos en verse reflejado en todos los clústeres. Los procesadores de mensajes sondean los cambios secretos cada 30 segundos. La caché se actualiza si detectan un cambio.
Recupera datos de un secreto
Una vez que se crea el secreto y está disponible (generalmente, 90 segundos después de su creación), puedes acceder a los datos del secreto en una variable de flujos en un flujo de proxy de API en la organización o entorno en el que se almacena el secreto.
Por ejemplo, supongamos que tu secreto contiene un archivo *.properties
llamado credentials.properties
con una clave de API en él, como en el siguiente ejemplo:
apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
A continuación, puedes recuperar la clave de API desde una variable de flujo con una política como Asignar mensaje. Por ejemplo:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>my-apikey</Name> <Ref>private.secret.credential.properties.apikey</Ref> </AssignVariable> </AssignMessage>
El nombre de variable al que se hace referencia en el elemento Ref
, private.secret.credential.properties.apikey
, se compone de las siguientes partes:
Parte del nombre de variable | Descripción |
---|---|
private.secret |
El espacio de nombres fijo de la variable Todos los secretos de Kubernetes almacenados en el clúster híbrido comparten este espacio de nombres. |
credential.properties |
El nombre de un archivo almacenado en el secreto de Kubernetes. |
apikey |
El nombre de una clave almacenada en un archivo de propiedades. |
En este ejemplo, la política de mensaje asignado recupera el valor OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
de apikey
y lo almacena en la variable de flujo my-apikey
.
Actualiza un secreto
Debido a que kubectl
no admite la actualización de secretos de Kubernetes, primero debes
borrar el secreto existente y volver a crearlo. Para ello, sigue los pasos en
Crea un secreto de Kubernetes.