venafi.ansible_role_venafi

Venafi Licencia Apache 2.0 Soporte Comunitario Compatible con TPP 17.3+ & VaaS
:warning: Este proyecto de código abierto, respaldado por la comunidad, ha alcanzado su FIN DE VIDA y solo recibirá actualizaciones relacionadas con seguridad y correcciones de errores críticos en adelante. Todas las funcionalidades de este proyecto (y más) están disponibles en la Colección Ansible para Venafi, que está en desarrollo activo. La transición es fácil, simplemente instala la colección venafi.machine_identity usando Ansible Galaxy y reemplaza role: venafi.ansible_role_venafi con role: venafi.machine_identity.certificate en tus playbooks. Por favor, realiza la transición a la mayor brevedad posible.

Rol de Venafi para Ansible

Esta solución agrega capacidades de inscripción de certificados a Red Hat Ansible integrándose fácilmente con la Plataforma de Protección de Confianza de Venafi o Venafi como Servicio, asegurando cumplimiento con la política de seguridad corporativa y proporcionando visibilidad en la emisión de certificados en toda la empresa.

:red_car: Prueba nuestras integraciones hoy mismo

Déjanos mostrarte paso a paso cómo agregar certificados a tu Infraestructura como Código utilizando Ansible.

Productos Ejemplos de integración disponibles...
F5 BIG-IP Cómo configurar una entrega de aplicaciones segura usando F5 BIG-IP y el rol de Venafi para Ansible
Citrix ADC Cómo configurar una entrega de aplicaciones segura usando Citrix ADC y el rol de Venafi para Ansible

NOTA Si no ves un ejemplo para un producto que usas, revisa más tarde. Estamos trabajando arduamente para agregar más ejemplos de integración.

Requisitos

Revisa los requisitos de Venafi, luego instala Ansible y VCert-Python (v0.10.0 o superior) usando pip:

pip install ansible vcert --upgrade

Uso con Ansible Galaxy

Para más información sobre Ansible Galaxy, visita https://galaxy.ansible.com/docs/using/installing.html

  1. Instala el Rol de Venafi para Ansible desde Ansible Galaxy:

    ansible-galaxy install venafi.ansible_role_venafi
    
  2. Crea el archivo credentials.yml y complétalo con los parámetros de conexión:

    Plataforma de Protección de Confianza:

    cat <<EOF >>credentials.yml
    access_token: 'p0WTt3sDPbzm2BDIkoJROQ=='
    url: 'https://tpp.venafi.example'
    zone: "DevOps\\Ansible"
    trust_bundle: "/path/to/bundle.pem"
    EOF
    

    Venafi como Servicio:

    cat <<EOF >>credentials.yml
    token: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    zone: 'Business App\\Enterprise CIT'
    EOF
    

    El Rol de Venafi para Ansible soporta los siguientes ajustes de conexión y credenciales:

    Nombre de Variable Descripción
    access_token Token de acceso de la Plataforma de Protección de Confianza para la API "ansible-by-venafi"
    password [OBSOLETO] Contraseña del WebSDK de la Plataforma de Protección de Confianza, use access_token si es posible
    test_mode Cuando es "true", el rol opera sin conectarse a la Plataforma de Protección de Confianza o a Venafi como Servicio
    token Clave de API de Venafi como Servicio
    trust_bundle Archivo de texto que contiene certificados de anclaje de confianza en formato PEM (texto), generalmente requerido para la Plataforma de Protección de Confianza
    url URL del servicio de Venafi (por ejemplo, "https://tpp.venafi.example"), generalmente solo aplicable a la Plataforma de Protección de Confianza
    user [OBSOLETO] Nombre de usuario del WebSDK de la Plataforma de Protección de Confianza, use access_token si es posible
    zone Carpeta de políticas para TPP o nombre de aplicación y alias de plantilla para API de VaaS (por ejemplo, "Business App\Enterprise CIT")
  3. Usa ansible-vault para encriptar el archivo credentials.yml usando una contraseña. Esto es opcional pero muy recomendado. Siempre que conozcas la contraseña, puedes descifrar el archivo para hacer cambios y luego volver a encriptarlo. Visita https://docs.ansible.com/ansible/latest/user_guide/vault.html para más información.

    ansible-vault encrypt credentials.yml
    
  4. Escribe un playbook simple llamado, por ejemplo, sample.yml.

    - hosts: localhost
      roles:
        - role: venafi.ansible_role_venafi
          certificate_cert_dir: "/tmp/etc/ssl/{{ certificate_common_name }}"
    
  5. Ejecuta el playbook.

    ansible-playbook sample.yml --ask-vault-pass
    

    Ejecuar el playbook generará un certificado y lo colocará en una carpeta en el directorio /tmp/etc/ssl/. El parámetro --ask-vault-pass es necesario si encriptaste el archivo credentials.yml. Se pueden agregar variables adicionales al playbook para especificar propiedades del certificado y el par de claves, ubicaciones de archivos, y para anular comportamientos predeterminados.

    Nombre de Variable Descripción
    credentials_file Nombre del archivo que contiene credenciales de Venafi y ajustes de conexión
    Predeterminado: credentials.yml
    certificate_common_name Nombre Común para solicitar el certificado.
    Predeterminado: "{{ ansible_fqdn }}"
    certificate_alt_name Lista separada por comas de Nombres Alternativos de Sujeto para solicitar el certificado. Prefija cada valor con el tipo de SAN.
    Ejemplo: "DNS:host.example.com,IP:10.20.30.40,email:[email protected]"
    certificate_privatekey_type Algoritmo de clave, "RSA" o "ECDSA"
    Predeterminado: "RSA" (de VCert)
    certificate_privatekey_size Tamaño de clave en bits para claves RSA
    Predeterminado: "2048" (de VCert)
    certificate_privatekey_curve Curva Elíptica para claves ECDSA
    Predeterminado: "P251" (de VCert)
    certificate_privatekey_passphrase Contraseña para encriptar la clave privada
    certificate_chain_option Especifica si el certificado CA raíz aparece "último" (predeterminado) o "primero" en el archivo de cadena
    certificate_cert_dir Directorio padre local donde se almacenarán los activos criptográficos
    Predeterminado: "/etc/ssl/{{ certificate_common_name }}"
    certificate_cert_path Directorio local donde se almacenarán los archivos de certificado
    Predeterminado: {{ certificate_cert_dir }}/{{ certificate_common_name }}.pem
    certificate_chain_path Directorio local donde se almacenarán los archivos de cadena de certificados
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.chain.pem"
    certificate_privatekey_path Directorio local donde se almacenarán los archivos de clave privada
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.key"
    certificate_csr_path Directorio local donde se almacenarán los archivos de solicitud de firma de certificado
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.csr"
    certificate_remote_execution Especifica si se generarán los activos criptográficos de forma remota, o localmente y luego se provisionarán al host remoto
    Predeterminado: false
    certificate_remote_cert_path Directorio en el host remoto donde se almacenarán los archivos de certificado
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.pem"
    certificate_remote_chain_path Directorio en el host remoto donde se almacenarán los archivos de cadena de certificados
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.chain.pem"
    certificate_remote_privatekey_path Directorio en el host remoto donde se almacenarán los archivos de clave privada
    Predeterminado: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.key"
    certificate_copy_private_key_to_remote Especifica si se copiará el archivo de clave privada al host remoto
    Predeterminado: true
    certificate_before_expired_hours Número de horas antes de la expiración del certificado en que se puede renovar
    Predeterminado: 72
    certificate_renew Especifica si se renovará el certificado si se encuentra dentro de la ventana de "before_expired_hours" cuando se ejecuta el playbook
    Predeterminado: true
    certificate_force Especifica si se solicitará un nuevo certificado cada vez que se ejecute el playbook
    Predeterminado: false

    Los valores predeterminados están definidos en el archivo defaults/main.yml.

Preparando un entorno de demostración con Docker para ejecutar Ansible

  1. (Opcional) Prepara el entorno de demostración. Si deseas usar tu propio inventario, actualiza el archivo tests/inventory.

    1. Para ejecutar nuestro playbook de prueba/demostración necesitarás el rol de aprovisionamiento de Docker. Descárgalo en el directorio tests/roles/provision_docker:

      git clone https://github.com/chrismeyersfsu/provision_docker.git tests/roles/provision_docker
      
    2. Luego construye las imágenes de Docker necesarias para el playbook de demostración:

      docker build ./tests --tag local-ansible-test
      

    Los certificados de demostración se colocarán en el directorio /tmp/ansible/etc/ssl en el host de Ansible. Desde allí se distribuirán al directorio /etc/ssl/ de los hosts remotos.

  2. Genera un archivo de credenciales para la Plataforma de Protección de Confianza o Venafi como Servicio como se describió en la sección anterior.

  3. Ejecuta el playbook de Ansible (elimina docker_demo=true si deseas usar tu propio inventario). El contenido de credentials.yml se utilizará para decidir si se utiliza la Plataforma de Protección de Confianza o Venafi como Servicio. Si configuras el parámetro token, el playbook asume que estás usando Venafi como Servicio. Si configuras los parámetros access_token o password, el playbook asume que estás usando la Plataforma de Protección de Confianza.

    ansible-playbook -i tests/inventory \
      tests/venafi-playbook-example.yml \
      --extra-vars "credentials_file=credentials.yml docker_demo=true" \
      --ask-vault-pass
    

    Se te pedirá la contraseña para descifrar el credentials.yml como antes. El archivo de origen para las credenciales puede ser anulado utilizando la variable credentials_file y esto se puede especificar en la línea de comandos usando el parámetro --extra-vars como se muestra.

Ejemplo de Playbook

- hosts: servers
  roles:
    - role: "ansible-role-venafi"
      certificate_common_name: "{{ ansible_fqdn }}.venafi.example.com"
      certificate_cert_dir: "/tmp/ansible/etc/ssl/{{ certificate_common_name }}"
      certificate_cert_path: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.pem"
      certificate_chain_path: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.chain.pem"
      certificate_privatekey_path: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.key"
      certificate_csr_path: "{{ certificate_cert_dir }}/{{ certificate_common_name }}.csr"

      # Dónde ejecutar el módulo venafi_certificate. Si se establece en false, el certificado se creará 
      # en el host maestro de ansible y luego se copiará al servidor remoto.
      certificate_remote_execution: false
      # Ubicación remota donde colocar el certificado.
      certificate_remote_cert_dir: "/etc/ssl"
      certificate_remote_cert_path: "{{ certificate_remote_cert_dir }}/{{ certificate_common_name }}.pem"
      certificate_remote_chain_path: "{{ certificate_remote_cert_dir }}/{{ certificate_common_name }}.chain.pem"
      certificate_remote_privatekey_path: "{{ certificate_remote_cert_dir }}/{{ certificate_common_name }}.key"
      # Establecer en false si no deseas copiar la clave privada a la ubicación remota.
      certificate_copy_private_key_to_remote: true

Para ejemplos de playbook, consulta el archivo venafi-playbook-example.yml. Para ejemplos de roles, consulta el archivo venafi-role-playbook-example.yml

Para más información sobre cómo usar roles ve a https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html

Licencia

Copyright © Venafi, Inc. Todos los derechos reservados.

Esta solución está licenciada bajo la Licencia Apache, Versión 2.0. Consulta LICENSE para el texto completo de la licencia.

Por favor, dirige preguntas/comentarios a opensource@venafi.com.

Acerca del proyecto

Streamline machine identity (certificate and key) acquisition using Venafi vcert.

Instalar
ansible-galaxy install venafi.ansible_role_venafi
Licencia
apache-2.0
Descargas
4.1k
Propietario
Venafi solutions find, protect and secure machine identities for our hyper-connected world.