Azure Key Vault puede almacenar nombres de usuario y contraseñas y gestionar información sensible en Azure. Una vez que Azure Key Vaults almacena la información, los servicios de Azure que especifique (y SÓLO los servicios de Azure que especifique) pueden acceder a ella

En esta entrada de blog, voy a mostrarte cómo usar Azure Key Vault para almacenar las credenciales de Couchbase Server y acceder a ellas desde una Azure Function.

Esta entrada de blog sobre cómo almacenar credenciales y contraseñas de bases de datos en Azure Key Vault se basará en entradas de blog anteriores sobre Couchbase en Azure, por lo que es posible que desee revisarlas antes de continuar:

Como siempre, si quieres seguirnos, puedes encontrar el fuente completa en GitHub.

Instalación y configuración de Couchbase Server

El resto de este post asume que tienes un Couchbase Server configurado en Azure. Puedes seguir los enlaces anteriores para aprender sobre este proceso (¡es fácil!).

En mi configuración para esta entrada del blog, he creado un clúster (que requiere la creación de credenciales de administrador) y un único cubo llamado "mybucket".

Estoy usando Couchbase Enterprise Edition 5.5.2 ya que es la más fácil de configurar en Azure. La edición Community y versiones anteriores de Couchbase también deberían funcionar.

Creación de una bóveda de claves de Azure

Se puede crear una bóveda de claves de Azure con Azure Portal UI, o se puede crear con la línea de comandos. En un post anterior sobre el uso del Operador Couchbase Kubernetes con AzureTambién he utilizado la línea de comandos. Es posible que desee revisar que si usted no ha utilizado el Línea de comandos Azure utilidad antes.

El primer paso sólo debe ejecutarse una vez por cada suscripción de Azure. Suponiendo que su línea de comandos está configurada para la suscripción que desea, registre Azure Key Vault con esa suscripción con este comando:

El siguiente paso es crear una bóveda. Con este comando necesitas especificar un grupo de recursos. He creado un grupo de recursos de antemano llamado "KeyVaultDemo". También decidí utilizar la región North Central US de Azure.

Azure tardará unos instantes en terminar (pero el proceso es asíncrono, por lo que la línea de comandos aparecerá inmediatamente). La línea de comandos le indicará cómo comprobar el progreso.

Ahora que ha creado el nombre de usuario y la contraseña de la tienda en Azure Key Vault creado, usted puede comenzar a poner sus secretos en ella. Voy a almacenar 4 piezas de información en mi bóveda con estos 4 comandos:

(Nota: He redactado parte de la información secreta utilizando equis)

Puede examinar sus secretos en el Portal Azure.

Azure Portal UI showing the Azure Key Vault

Ventajas de Azure Key Vault

Antes de seguir, hablemos de por qué querrá utilizar Azure Key Vault.

En entradas anteriores del blog, almacené las credenciales de Couchbase como configuración de la aplicación. En comparación con la configuración de la aplicación, Azure Key Vault te ofrece las siguientes capacidades de credenciales:

  • App Settings almacena los valores como texto sin formato. Azure Key Vault los almacena cifrados.
  • Cada aplicación tiene su propia configuración. Con Azure Key Vault, cada una de tus aplicaciones puede compartir una única bóveda de claves.
  • Azure Key Vault almacena un historial de versiones de los valores, y cada secreto tiene una fecha de activación (opcional) y una fecha de caducidad.

Azure Key Vault no sustituir configuración de la aplicación. El uso de Azure Key Vault es mejor cuando se desea almacenar de forma segura información confidencial (como credenciales/contraseñas/claves de API) y/o utilizarlas en varios servicios.

Cómo preparar Azure Functions para Azure Key Vault

En un entrada anterior sobre Azure Functionsalmacené las credenciales de Couchbase en la configuración de la aplicación. Ahora que tengo esas credenciales en Azure Key Vault, voy a cambiar mi código Azure Functions para usar Azure Key Vault en su lugar.

En primer lugar, he creado un servicio Azure Functions. Puedes crearlo desde el Azure Portal UI, o desde Visual Studio o Visual Studio Code directamente. Esta vez, utilicé Visual Studio Code (para más información, echa un vistazo a la sección Extensión de Azure Functions). Se me ocurrió nombrar mi servicio Azure Functions cbkeyvaultdemo.

A continuación, he anotado los URI de cada uno de los secretos que he creado. Tengo 4 secretos, así que necesito 4 URIs ("Secret Identifier" como en esta captura de pantalla):

Azure Key Vault URIs

He creado 4 constantes y pegado estos valores en mi código. (Es posible que desee almacenar estos eventualmente en la configuración de la aplicación).

El siguiente paso es instalar un par de paquetes con NuGet: Microsoft.Azure.Services.AppAuthentication y Microsoft.Azure.KeyVault. He aquí un ejemplo de instalación de esos paquetes con la línea de comandos:

Obtención de secretos de Azure Key Vault

El siguiente paso es escribir algo de código para obtener los valores secretos de Azure Key Vault. He creado una pequeña función de ayuda que podría reutilizar:

Como antes, utilizaré Inicialización perezosa en esta función de Azure. Esto es lo que parece cuando se utiliza la configuración de la aplicación (antes):

Y así es como se ve cuando lo cambio para usar el botón GetBucket (después):

Una cosa importante a tener en cuenta sobre esta función de ayuda. Obtener secretos de Azure Key Vault es una operación asíncrona. Sin embargo, Perezoso espera una lambda síncrona. Una opción es utilizar el método AsyncLazy. Otra opción (que es lo que yo hice) es llamar a un método asíncrono de forma síncrona utilizando .resultado.

¿Dónde cliente ¿De dónde viene? Fácil, he añadido private static HttpClient client = new HttpClient(); a la clase. Puede consulte el código fuente completo en GitHub.

He seguido principalmente esta excelente entrada del blog de Jeff Hollan titulada Obtención de secretos de bóveda de claves en Azure Functions (excepto que él almacenó una cadena de conexión EventHub y yo estoy almacenando credenciales Couchbase).

Autorización

Te estarás preguntando: Matt, ¿por qué publicaste los URI reales en tu código de ejemplo?

Es porque los propios URI no son secretos sensibles. Solo los servicios autorizados por Azure pueden obtener información útil de estas URI.

Para autorizar este servicio Azure Function, debe hacer dos cosas:

  1. Habilitar una identidad de servicio gestionada para el servicio Azure Functions. Esto es tan fácil como hacer clic en "Managed service identity" en el portal de Azure y cambiar un "off" a un "on".

Managed Service Identity

  1. Añadir una política de acceso a su Azure Key Vault. Solo tienes que buscar Azure Key Vault en la interfaz de usuario del portal de Azure, hacer clic en "Políticas de acceso" en Configuración y añadir una nueva política de acceso. Puedes definir permisos detallados para acceder a claves, secretos y certificados (que, por cierto, Azure Key Vault también puede almacenar). Yo sólo necesitaba permisos de "Obtención", así que mi política de acceso era muy sencilla:

Access policy

Eso es todo. Pero sin este importante paso, la cámara acorazada de claves no permitirá que ninguna persona o aplicación recupere una clave.

Resumen y próximos pasos

En lugar de desplegar Azure Functions (u otros servicios de aplicación) con las credenciales de Couchbase almacenadas en la configuración de la aplicación, ahora podemos poner esas credenciales (y cualquier otra información sensible) en una Azure Key Vault.

Damos permiso a la(s) aplicación(es) para acceder a los secretos de la cámara acorazada, y Azure impedirá que nadie más obtenga esos secretos.

Las aplicaciones extraen los secretos de Azure Key Vault.

Si tienes alguna pregunta sobre esta entrada del blog, no dudes en dejar un comentario a continuación o búscame en Twitter @mgroves.

Si está utilizando Couchbase con Azure, toda la plataforma Comunidad Couchbase nos encantaría conocer tu experiencia. O, si usted apenas está entrando en Couchbase con Azure, también puede encontrar y preguntar a otros miembros de la comunidad por sus consejos o recomendaciones de alto nivel.

Si tiene alguna pregunta técnica específica sobre Couchbase, consulte la sección Foros de Couchbase.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Dejar una respuesta