Configura la TLS mutua con una CA privada

En esta página, se proporcionan instrucciones para crear una autoridad certificadora (CA) privada mediante Certificate Authority Service y subir tus certificados a un recurso TrustConfig de Certificate Manager.

También debes crear los recursos de seguridad de red necesarios a fin de configurar TLS mutua para los balanceadores de cargas de aplicaciones.

Antes de comenzar

Permisos

Para obtener los permisos que necesitas a fin de completar esta guía, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

  • Para crear recursos del balanceador de cargas, como TargetHTTPProxy: Administrador de balanceador de cargas de Compute (roles/compute.loadBalancerAdmin)
  • Para usar recursos de Certificate Manager: Propietario de Certificate Manager (roles/certificatemanager.owner)
  • Para crear componentes de seguridad y de herramientas de redes: Administrador de red de Compute (roles/compute.networkAdmin) y Administrador de seguridad de Compute (roles/compute.securityAdmin)
  • Para crear un proyecto (opcional): Creador de proyectos (roles/resourcemanager.projectCreator)

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Crea una CA privada

Crea una CA privada mediante el Servicio de CA y, luego, crea un certificado raíz:

  1. Para crear un grupo de CA, usa el comando gcloud privateca pools create:

    gcloud privateca pools create CA_POOL \
       --location=us-central1
    

    Reemplaza CA_POOL por el ID o el nombre del grupo de CA superior.

  2. Para crear una CA privada en el grupo de CA, usa el comando gcloud privateca roots create:

    gcloud privateca roots create CA_ROOT \
       --pool=CA_POOL \
       --subject="CN=my-ca, O=Test LLC" \
       --location=us-central1
    

    Reemplaza lo siguiente:

    • CA_ROOT: el ID o el nombre de la CA privada
    • CA_POOL: el ID o el nombre del grupo de AC superior
  3. Para describir la CA nueva y crear el archivo root.cert, usa el comando gcloud privateca roots describe:

    gcloud privateca roots describe CA_ROOT \
       --pool=CA_POOL \
       --location=us-central1 \
       --format='value(pemCaCertificates)' > root.cert
    
    export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Reemplaza lo siguiente:

    • CA_ROOT: el ID o el nombre de la CA privada
    • CA_POOL: el ID o el nombre del grupo de AC superior

    Para obtener más información, consulta lo siguiente:

Crea TrustConfig con CA privada

Crea un recurso TrustConfig de Certificate Manager que represente tu PKI mediante el certificado raíz generado con la CA privada. Suponemos que el recurso TrustConfig es un almacén de confianza simple con un único ancla de confianza que representa un certificado raíz.

En los siguientes pasos, reemplaza TRUST_CONFIG_NAME por el nombre del recurso TrustConfig.

  • Para crear el archivo trust_config.yaml, usa el siguiente comando:

    cat << EOF > trust_config.yaml
    name: TRUST_CONFIG_NAME
    trustStores:
    - trustAnchors:
       - pemCertificate: "${ROOT?}"
    EOF
    
  • Para crear los recursos TrustConfig de Certificate Manager, usa el comando gcloud certificate-manager trust-configs import:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
       --source=trust_config.yaml \
       --location=REGION
    

    Reemplaza lo siguiente:

    REGION: usa global para el balanceador de cargas de aplicaciones interno entre regiones, el balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico. Para el balanceador de cargas de aplicaciones externo regional o el balanceador de cargas de aplicaciones interno regional, usa la región en la que configuraste el balanceador de cargas.

Crea los recursos de seguridad de red

Una política de TLS del servidor (recurso de seguridad de red ServerTLSPolicy) te permite especificar el modo de la TLS del servidor y el recurso TrustConfig para usar cuando se validan los certificados de cliente. Cuando el cliente presenta un certificado no válido o ningún certificado al balanceador de cargas, clientValidationMode especifica cómo se maneja la conexión del cliente.

  • Cuando clientValidationMode se establece como ALLOW_INVALID_OR_MISSING_CLIENT_CERT, todas las solicitudes se pasan al backend, incluso si la validación falla o si falta el certificado de cliente.
  • Cuando clientValidationMode se establece en REJECT_INVALID, solo las solicitudes que proporcionan un certificado de cliente que se puede validar en un recurso TrustConfig se pasan al backend.

Para crear el recurso ServerTLSPolicy, completa los siguientes pasos:

  1. Según cómo desees manejar la conexión, selecciona una de las siguientes opciones.

    En los siguientes pasos, reemplaza SERVER_TLS_POLICY_NAME por el nombre de la política de TLS del servidor y reemplaza PROJECT_ID por el ID de tu proyecto de Google Cloud.

    • Opción 1: clientValidationMode se establece en ALLOW_INVALID_OR_MISSING_CLIENT_CERT.

      Para crear el archivo server_tls_policy.yaml, usa el siguiente comando:

      global

      Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Opción 2: clientValidationMode se establece en REJECT_INVALID.

      Para crear el archivo server_tls_policy.yaml, usa el siguiente comando:

      global

      Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regional

      Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
        clientValidationMode: REJECT_INVALID
        clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
  2. Para crear el recurso ServerTlsPolicy, usa el comando gcloud network-security server-tls-policies import:

    global

    Para los balanceadores de cargas de aplicaciones externos y los balanceadores de cargas de aplicaciones internos entre regiones, usa el siguiente comando:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    regional

    Para los balanceadores de cargas de aplicaciones externos regionales y los balanceadores de cargas de aplicaciones internos regionales, usa el siguiente comando:

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=REGION
    

Para obtener más información, consulta los modos de validación del cliente de mTLS.

¿Qué sigue?