Gestionar los controles de políticas

En este tutorial se explica cómo implementar controles de políticas en recursos del Servicio de Autoridades de Certificación.

Objetivos

En este tutorial se explica cómo configurar un grupo de autoridades de certificación (CA) compartidas para emitir certificados de DNS con los siguientes controles de políticas:

  • El usuario prod-dns-requester puede solicitar certificados TLS de servidor de entidad final para el dominio *.prod.example.com.
  • El usuario test-dns-requester puede solicitar certificados TLS de servidor de entidad final para el dominio *.test.example.com.
  • El usuario blank-check-requester puede solicitar cualquier tipo de certificado del pool de autoridades de certificación.

En este tutorial se usan la política de emisión de certificados de un pool de ACs, las plantillas de certificados y las vinculaciones de gestión de identidades y accesos condicionales para conseguir este objetivo.

Antes de empezar

Crear un grupo de autoridades de certificación

Para crear un grupo de autoridades de certificación, sigue estas instrucciones:

  1. Para crear un grupo de ACs que use el archivo issuance-policy.yaml, usa el siguiente comando gcloud:

    gcloud

    gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISE
    

    Donde:

    • LOCATION es la ubicación en la que quieres crear el grupo de autoridades de certificación. Para ver la lista completa de ubicaciones, consulta Ubicaciones.
    • La marca --tier se usa para especificar el nivel del grupo de CAs. Para obtener más información sobre los niveles, consulta Seleccionar los niveles de operaciones.
  2. Para crear una AC con recursos gestionados por Google en el grupo de ACs recién creado, usa el siguiente comando gcloud:

    gcloud

    gcloud privateca roots create CA_NAME \
        --pool=POOL_NAME \
        --location=LOCATION \
        --subject="CN=Example DNS Root, O=Example LLC, C=US" \
        --validity="10Y" \
        --max-chain-length=1 \
        --auto-enable
    

    Donde:

    • POOL_NAME es el identificador único del grupo de CAs.
    • LOCATION es la ubicación en la que quieres crear el grupo de autoridades de certificación. Para ver la lista completa de ubicaciones, consulta Ubicaciones.
    • La marca --subject se usa para transferir el nombre del sujeto del certificado.
    • --validity determina el periodo de validez de la CA. El periodo de validez predeterminado es de 10 años.
    • La marca --max-chain-length determina la profundidad máxima de las CAs subordinadas permitidas en una CA.
    • La marca --auto-enable crea la AC en el estado ENABLED, en lugar de en el estado STAGED. Para obtener más información sobre los estados de las AC, consulta Estados de las AC.

Configurar controles de políticas para certificados de prueba

Los cambios en la política de emisión entran en vigor inmediatamente. Te recomendamos que configures los controles de la política de prueba antes de usarlos en producción. En esta sección se describe cómo puedes configurar los controles de la política de prueba.

Tanto en la plantilla de DNS de prueba como en la de producción, debes usar los mismos valores predefinidos para los certificados TLS del servidor. Crea un archivo YAML leaf_server_tls_predefined_values.yaml y copia la siguiente configuración de TLS del servidor de entidad final en el archivo.

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false

Configurar controles de políticas para certificados DNS de prueba

En esta sección se describe cómo puedes definir controles de políticas para permitir que el usuario test-dns-requester solicite certificados de servidor de entidad final TLS para DNS en el dominio *.test.example.com.

Crear una plantilla de certificado DNS para certificados de prueba

En esta sección se describe cómo crear una plantilla de certificado que contenga la configuración de TLS del servidor de entidad final. Esta plantilla de certificado restringe los certificados para que solo usen SANs de DNS en el dominio *.test.example.com. Estas restricciones se implementan mediante una expresión del lenguaje de expresión común (CEL). La plantilla de certificado también elimina cualquier asunto especificado en la solicitud de certificado.

  1. Usa el siguiente comando gcloud para crear la plantilla de certificado que contiene las extensiones TLS del servidor de entidad final, elimina cualquier subject especificado en la solicitud de certificado y limita los SANs permitidos.

    gcloud

    gcloud privateca templates create test-server-tls-template \
    --predefined-values-file  ./leaf_server_tls_predefined_values.yaml \
    --no-copy-subject \
    --copy-sans \
    --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"
    

    Donde:

    • La marca --predefined-values-file se usa para transferir un archivo YAML que describe los valores X.509 predefinidos establecidos por la plantilla de certificado.
    • La marca --no-copy-subject elimina todos los asuntos especificados por la persona que llama de la solicitud de certificado.
    • La marca --copy sans asegura que la extensión SAN de la solicitud de certificado se copie en el certificado firmado.
    • La marca --identity-cel-expression se usa para transferir una expresión CEL que se evalúa en la identidad del certificado antes de que se emita. Para obtener más información sobre cómo usar expresiones CEL para implementar varios controles de políticas, consulta Usar CEL.

    Para obtener más información sobre cómo crear plantillas de certificados, consulta el artículo Crear una plantilla de certificado.

Crear enlaces de gestión de identidades y accesos para certificados de prueba de DNS

Para permitir que el usuario test-dns-requester@ del pool de AC de DNS solicite certificados TLS de servidor de prueba, cree un enlace de gestión de identidades y accesos condicional en el pool de AC. Asigna el rol privateca.certificateRequester al usuario test-dns-requester@ solo si la solicitud de certificado contiene una referencia a la plantilla test-server-tls-template. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos del servicio de CAs, consulta el artículo sobre el control de acceso con gestión de identidades y accesos.

  1. Crea un archivo YAML de política test_dns_condition.yaml y copia la siguiente configuración de TLS en el archivo.

      title: test DNS binding
      description: allows user to only create DNS test certificates
      expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/test-server-tls-template"
    

    El nombre de la plantilla proporcionado en la condición de IAM debe coincidir con el nombre de la plantilla de la solicitud de certificado. Por lo tanto, si proporciona un ID de proyecto en el atributo privateca.googleapis.com/template de la expresión CEL, también debe proporcionar un ID de proyecto al solicitar el certificado. Si proporciona un número de proyecto en la expresión CEL, también debe proporcionar un número de proyecto en la solicitud de certificado.

  2. Usa el siguiente comando gcloud para añadir controles de políticas que permitan a test-dns-requester@ solicitar únicamente certificados TLS de prueba de producción del grupo de ACs.

    gcloud

    gcloud privateca pools add-iam-policy-binding POOL_NAME \
        --location=LOCATION \
        --role='roles/privateca.certificateRequester' \
        --member='user:test-dns-requester@' \
        --condition-from-file=./test_dns_condition.yaml
    

    Donde:

    • La marca --role se usa para transferir el nombre del rol que se va a asignar a un miembro. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos del servicio de CA, consulta Control de acceso con gestión de identidades y accesos.
    • La marca --member se usa para transferir el miembro al que se va a añadir la vinculación.
    • La marca condition-from-file se usa para transferir el nombre del archivo con la condición CEL.
  3. Usa el siguiente gcloud para añadir controles de políticas que permitan a test-dns-requester@ usar la plantilla de certificado "test-server-tls-template".

    gcloud

    gcloud privateca templates add-iam-policy-binding test-server-tls-template \
        --role='roles/privateca.templateUser' \
        --member='user:test-dns-requester@'
    

    Donde:

    • La marca --role se usa para transferir el nombre del rol que se va a asignar a un miembro. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos del servicio de CA, consulta Control de acceso con gestión de identidades y accesos.
    • La marca --member se usa para transferir el miembro al que se va a añadir la vinculación.

    Para obtener más información sobre cómo configurar políticas de gestión de identidades y accesos, consulta Configurar políticas de gestión de identidades y accesos.

Configurar controles de políticas para certificados de producción

Una vez que hayas probado los controles de políticas, podrás usarlos en tu entorno de producción.

Configurar controles de políticas para certificados DNS de producción

En esta sección se describe cómo puedes definir controles de políticas para permitir que el usuario prod-dns-requester solicite certificados TLS de entidad final para el dominio .prod.example.com de DNS.

Crear una plantilla de certificado para certificados DNS de producción

Sigue estas instrucciones para crear una plantilla de certificado que contenga la configuración TLS de servidor de entidad final. Esta plantilla de certificado restringe los certificados para que solo usen SANs de DNS en el dominio *.prod.example.com. Estas restricciones se implementan mediante una expresión del lenguaje de expresión común (CEL). La plantilla de certificado también elimina cualquier asunto especificado en la solicitud de certificado.

Crea una plantilla de certificado prod-server-tls-template con el siguiente comando gcloud.

gcloud

gcloud privateca templates create prod-server-tls-template \
  --predefined-values-file ./leaf_server_tls_predefined_values.yaml \
  --no-copy-subject \
  --copy-sans \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.prod.example.com'))"

Donde:

  • La marca --predefined-values-file se usa para transferir un archivo YAML que describe los valores X.509 predefinidos establecidos por la plantilla de certificado.
  • La marca --no-copy-subject elimina todos los asuntos especificados por la persona que llama de la solicitud de certificado.
  • La marca --copy sans asegura que la extensión SAN de la solicitud de certificado se copie en el certificado firmado.
  • La marca --identity-cel-expression se usa para transferir una expresión CEL que se evalúa en la identidad del certificado antes de que se emita. Para obtener más información sobre las expresiones CEL, consulta el artículo Usar expresiones CEL.

Para obtener más información sobre cómo crear plantillas de certificados, consulta el artículo Crear una plantilla de certificado.

Para obtener más información sobre el comando gcloud privateca templates create, consulta gcloud privateca templates create.

Crear un enlace de gestión de identidades y accesos de DNS de producción

Para permitir que el usuario prod-dns-requester@ del grupo de ACs de DNS solicite certificados TLS de servidor de producción, crea un enlace de gestión de identidades y accesos condicional en el grupo de ACs. Asigna al usuario prod-dns-requester@ el rol privateca.certificateRequester solo si la solicitud de certificado contiene una referencia a la plantilla prod-server-tls-template. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos, consulta el artículo Control de acceso con gestión de identidades y accesos.

  1. Crea un archivo YAML de política prod_dns_condition.yaml y copia la siguiente configuración de TLS en el archivo.

    title: Production DNS binding
    description: allows user to only create DNS production certificates
    expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/prod-server-tls-template"
    
  2. Usa el siguiente comando gcloud para añadir controles de políticas que permitan a prod-dns-requester@ solicitar solo certificados TLS de servidor de producción del grupo de ACs.

    gcloud

    gcloud privateca pools add-iam-policy-binding POOL_NAME \
        --location=LOCATION \
        --role='roles/privateca.certificateRequester' \
        --member='user:prod-dns-requester@' \
        --condition-from-file=./prod_dns_condition.yaml
    

    Donde:

    • La marca --role se usa para transferir el nombre del rol que se va a asignar a un miembro. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos del servicio de CA, consulta Control de acceso con gestión de identidades y accesos.
    • La marca --member se usa para transferir el miembro al que se va a añadir la vinculación.
    • La marca condition-from-file se usa para transferir el nombre del archivo con la condición CEL.

    Para obtener más información sobre el comando gcloud privateca pools add-iam-policy-binding, consulta gcloud privateca pools add-iam-policy-binding.

  3. Para añadir controles de políticas que permitan a prod-dns-requester@ usar la plantilla de certificado "prod-server-tls-template", usa el siguiente comando gcloud:

    gcloud

    gcloud privateca templates add-iam-policy-binding prod-server-tls-template \
        --role='roles/privateca.templateUser' \
        --member='user:prod-dns-requester@'
    

    Donde:

    • La marca --role se usa para transferir el nombre del rol que se va a asignar a un miembro. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos del servicio de CA, consulta Control de acceso con gestión de identidades y accesos.
    • La marca --member se usa para transferir el miembro al que se va a añadir la vinculación.

Controles de políticas de usuarios sin restricciones

Para permitir que el usuario blank-check-requester@ solicite cualquier certificado sin limitaciones, crea un enlace de gestión de identidades y accesos sin condiciones que le asigne el rol privateca.certificateRequester.

gcloud

gcloud privateca pools add-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:blank-check-requester@example.com'

Donde:

  • El valor de la marca --role determina el rol que se asigna al usuario. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos de Servicio de Autoridades de Certificación, consulta el artículo sobre el control de acceso con gestión de identidades y accesos.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Haz los cambios siguientes:

  • POOL_NAME: identificador único del grupo de autoridades de certificación.
  • LOCATION: la ubicación del grupo de autoridades de certificación. Para ver la lista completa de ubicaciones, consulta Ubicaciones.

Probar los controles de políticas

Una vez que hayas implementado tus políticas de emisión de certificados y de gestión de identidades y accesos, es importante que las revises y pruebes para asegurarte de que funcionan correctamente.

Recuperar todos los enlaces de políticas

Obtén todas las políticas de gestión de identidades y accesos implementadas en tu grupo de CAs. Para obtener todas las políticas de gestión de identidades y accesos del grupo de CAs, usa el comando gcloud privateca pools get-iam-policy:

gcloud

gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION

Haz los cambios siguientes:

  • POOL_NAME: identificador único del grupo de autoridades de certificación.
  • LOCATION: la ubicación del grupo de autoridades de certificación. Para ver la lista completa de ubicaciones, consulta Ubicaciones.

Para obtener más información sobre el comando gcloud privateca pools get-iam-policy, consulta gcloud privateca pools get-iam-policy.

Generar certificados

En esta sección se proporciona información sobre cómo generar certificados de uso general y certificados DNS de prueba y de producción.

Generar certificados DNS de prueba

Para permitir que el usuario test-dns-requester@ solicite certificados DNS de prueba del grupo de la AC, usa el siguiente comando gcloud:

gcloud

gcloud privateca certificates create test-dns-1 \
    --project=PROJECT_ID \
    --issuer-location=LOCATION \
    --issuer-pool=POOL_NAME \
    --dns-san=foo.bar.test.example.com \
    --generate-key \
    --key-output-file=KEY_FILE_NAME \
    --cert-output-file=test_dns_cert.pem \
    --template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/test-server-tls-template

Donde:

  • La marca --dns-san se usa para definir uno o varios SANs de DNS separados por comas.
  • La marca --generate-key activa la generación de una nueva clave privada RSA-2048 en tu máquina.
  • La marca --key-output-file se usa para definir la ruta en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para definir la ruta en la que se escribe el archivo de cadena de certificados codificado en PEM resultante (ordenado de la entidad final a la raíz).
  • La marca --template se usa para definir el nombre de la plantilla de certificado que quieres usar para emitir este certificado. La plantilla especificada debe estar en la misma ubicación que el grupo de CAs emisoras. Para obtener más información sobre las plantillas de certificados, consulta el resumen de las plantillas de certificados y las políticas de emisión.

Haz los cambios siguientes:

  • PROJECT_ID: identificador único del proyecto.
  • LOCATION: la ubicación del grupo de autoridades de certificación desde el que se solicita el certificado. Para ver la lista completa de ubicaciones, consulta Ubicaciones.
  • POOL_NAME: identificador único del grupo de autoridades de certificación.

Generar certificados de producción

El usuario prod-dns-requester ahora puede solicitar certificados DNS de producción del grupo de autoridades de certificación. --dns-san=foo.bar.prod.example.com añade un SAN de tipo DNS con el valor especificado a la solicitud de certificado.

gcloud

gcloud privateca certificates create prod-dns-1 \
    --project=PROJECT_ID \
    --issuer-location=LOCATION \
    --issuer-pool=POOL_NAME \
    --dns-san=foo.bar.prod.example.com \
    --generate-key \
    --key-output-file=KEY_FILE_NAME \
    --cert-output-file=prod_dns_cert.pem \
    --template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/prod-server-tls-template

Donde:

  • La marca --issuer-location se usa para definir la ubicación del certificado. Para ver la lista completa de ubicaciones, consulta Ubicaciones.
  • La marca --issuer-pool define el grupo de AC desde el que se solicita el certificado.
  • La marca --dns-san se usa para definir uno o varios SANs de DNS separados por comas.
  • La marca --generate-key activa la generación de una nueva clave privada RSA-2048 en tu máquina.
  • La marca --key-output-file se usa para definir la ruta en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para definir la ruta en la que se escribe el archivo de cadena de certificados codificado en PEM resultante (ordenado de la entidad final a la raíz).
  • La marca --template se usa para definir el nombre de la plantilla de certificado que se usará para emitir este certificado. La plantilla especificada debe estar en la misma ubicación que el grupo de CAs emisoras. Para obtener más información sobre las plantillas de certificados, consulta el artículo Descripción general de las plantillas de certificados y las políticas de emisión.

Generar certificados de uso general

El usuario blank-check-requester@ puede solicitar cualquier certificado del grupo de la AC mediante el comando gcloud privateca certificates create.

Para solicitar un certificado de un grupo de ACs, puedes usar una clave pública o privada creada por el Servicio de Autoridades de Certificación. Para obtener más información sobre cómo solicitar certificados, consulta Solicitar un certificado y ver los certificados emitidos.

Limpieza

En esta sección se explica cómo puedes eliminar políticas de gestión de identidades y accesos de un grupo de CAs.

Quitar un enlace de IAM específico

Para quitar las vinculaciones condicionales de gestión de identidades y accesos en el grupo de CAs del usuario blank-check-requester, usa el siguiente comando gcloud:

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:blank-check-requester@'

Donde:

  • El valor de la marca --role determina el rol que se asigna al usuario. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos de Servicio de Autoridades de Certificación, consulta el artículo sobre el control de acceso con gestión de identidades y accesos.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Cuando elimines un enlace de gestión de identidades y accesos específico, debes proporcionar toda la información relacionada con el enlace en el comando gcloud privateca pools remove-iam-policy-binding. Un rol y un miembro pueden tener varias vinculaciones de IAM con diferentes condiciones. Es importante que proporciones todos los detalles relacionados con el enlace de IAM para evitar eliminar por error otro enlace.

Para obtener más información sobre el comando gcloud privateca pools remove-iam-policy-binding, consulta gcloud privateca pools remove-iam-policy-binding.

Quitar todas las vinculaciones condicionales de gestión de identidades y accesos

Para quitar un enlace de gestión de identidades y accesos, puedes usar el comando gcloud privateca pools remove-iam-policy-binding. Cuando elimines un enlace condicional de gestión de identidades y accesos, debes proporcionar toda la información sobre el enlace. Un usuario y un rol pueden tener más de un enlace condicional. Para quitar todos los enlaces condicionales, usa la marca --all en el comando gcloud.

Usa el siguiente comando gcloud para quitar todas las vinculaciones del usuario prod-code-signing-requester.

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --location=LOCATION \
    --role='roles/privateca.certificateRequester' \
    --member='user:prod-code-signing-requester@' \
    --all

Donde:

  • El valor de la marca --role determina el rol que se asigna al usuario. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos de Servicio de Autoridades de Certificación, consulta el artículo sobre el control de acceso con gestión de identidades y accesos.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.