Administra los controles de políticas

En este instructivo, se muestra cómo implementar controles de políticas en los recursos de Certificate Authority Service.

Objetivos

En este instructivo, se proporciona información para configurar un grupo de autoridades certificadoras (CA) compartidas para la emisión de certificados de DNS con los siguientes controles de políticas:

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

En este instructivo, se usa la política de emisión de certificados de un grupo de CA, las plantillas de certificados y las vinculaciones condicionales de IAM para lograr esta situación.

Antes de comenzar

Crea un grupo de CA

Para crear un grupo de CA, sigue estas instrucciones:

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

    gcloud

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

    Aquí:

    • LOCATION es la ubicación en la que deseas crear el grupo de CA. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.
    • La marca --tier se usa para especificar el nivel del grupo de CA. Para obtener más información sobre los niveles, consulta Selecciona los niveles de operación.
  2. Para crear una CA con recursos administrados por Google en el grupo de CA 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
    

    Aquí:

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

Configura los controles de políticas para los certificados de prueba

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

Tanto para las plantillas de DNS de prueba como 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

Configura los controles de políticas para los certificados de DNS de prueba

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

Crea una plantilla de certificado de DNS para los certificados de prueba

En esta sección, se describe cómo puedes 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 usen solo SAN de DNS en el dominio *.test.example.com. Estas restricciones se implementan con una expresión de Common Expression Language (CEL). La plantilla de certificado también descarta cualquier asunto especificado en la solicitud de certificado.

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

    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'))"
    

    Aquí:

    • La marca --predefined-values-file se usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido establecido por la plantilla de certificado.
    • La marca --no-copy-subject descarta todos los asuntos especificados por el llamador de la solicitud de certificado.
    • La marca --copy sans garantiza que la extensión SAN de la solicitud de certificado se copie en el certificado firmado.
    • La marca --identity-cel-expression se usa para pasar una expresión de CEL que se evalúa con la identidad en el certificado antes de que se emita. Para obtener más información sobre el uso de expresiones de CEL para implementar varios controles de políticas, consulta Usa CEL.

    Para obtener más información sobre cómo crear plantillas de certificados, consulta Crea una plantilla de certificado.

Crea vinculaciones de IAM para los certificados de prueba de DNS

Para permitir que el usuario test-dns-requester@ en el grupo de CA de DNS solicite certificados TLS del servidor de prueba, crea una vinculación condicional de IAM en el grupo de CA. Otorga 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 IAM para el servicio de CA, consulta Control de acceso con IAM.

  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 que se proporciona en la condición de IAM debe coincidir con el nombre de la plantilla en la solicitud de certificado. Por lo tanto, si proporcionas un ID del proyecto en el atributo privateca.googleapis.com/template de la expresión de CEL, también debes proporcionar un ID del proyecto cuando solicites el certificado. Si proporcionas un número de proyecto en la expresión de CEL, también debes proporcionar un número de proyecto en la solicitud de certificado.

  2. Usa el siguiente comando gcloud para agregar controles de políticas que permitan que test-dns-requester@ solo solicite certificados TLS de prueba de producción del grupo de CA.

    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
    

    Aquí:

    • La marca --role se usa para pasar el nombre del rol que se asignará a un miembro. Para obtener más información sobre los roles y permisos de IAM para el servicio de CA, consulta Control de acceso con IAM.
    • La marca --member se usa para pasar el miembro al que se agregará la vinculación.
    • La marca condition-from-file se usa para pasar el nombre del archivo con la condición de CEL.
  3. Usa el siguiente gcloud para agregar controles de políticas que permitan que test-dns-requester@ use 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@'
    

    Aquí:

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

    Para obtener más información sobre la configuración de políticas de IAM, consulta Configura políticas de IAM.

Configura los controles de políticas para los certificados de producción

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

Configura los controles de políticas para los certificados de DNS de producción

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

Crea una plantilla de certificado para los certificados de DNS de producción

Usa las siguientes instrucciones para 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 usen solo SAN de DNS en el dominio *.prod.example.com. Estas restricciones se implementan con una expresión de Common Expression Language (CEL). La plantilla de certificado también descarta 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'))"

Aquí:

  • La marca --predefined-values-file se usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido establecido por la plantilla de certificado.
  • La marca --no-copy-subject descarta todos los asuntos especificados por el llamador de la solicitud de certificado.
  • La marca --copy sans garantiza que la extensión SAN de la solicitud de certificado se copie en el certificado firmado.
  • La marca --identity-cel-expression se usa para pasar una expresión de CEL que se evalúa con la identidad en el certificado antes de que se emita. Para obtener más información sobre las expresiones de CEL, consulta Usa expresiones de CEL.

Para obtener más información sobre cómo crear plantillas de certificados, consulta Crea una plantilla de certificado.

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

Crea una vinculación de IAM de DNS de producción

Para permitir que el usuario prod-dns-requester@ en el grupo de CA de DNS solicite certificados TLS del servidor de producción, crea una vinculación condicional de IAM en el grupo de CA. Otorga el rol privateca.certificateRequester al usuario prod-dns-requester@ 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 IAM, consulta: Control de acceso con IAM.

  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 agregar controles de políticas que permitan que prod-dns-requester@ solo solicite certificados TLS del servidor de producción del grupo de CA.

    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
    

    Aquí:

    • La marca --role se usa para pasar el nombre del rol que se asignará a un miembro. Para obtener más información sobre los roles y permisos de IAM para el servicio de CA, consulta Control de acceso con IAM.
    • La marca --member se usa para pasar el miembro al que se agregará la vinculación.
    • La marca condition-from-file se usa para pasar el nombre del archivo con la condición de 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 agregar controles de políticas que permitan que prod-dns-requester@ use 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@'
    

    Aquí:

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

Controles de políticas de usuario sin restricciones

Para permitir que el usuario blank-check-requester@ solicite cualquier certificado sin limitaciones, crea una vinculación de IAM sin condicionales que le otorgue al usuario 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'

Aquí:

  • 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 IAM para el servicio de CA, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Reemplaza lo siguiente:

  • POOL_NAME: Es el identificador único del grupo de CA.
  • LOCATION: Es la ubicación del grupo de CA. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.

Prueba los controles de políticas

Una vez que hayas implementado tus políticas de emisión de certificados y de IAM, es importante revisarlas y probarlas para asegurarte de que funcionen según lo previsto.

Recupera todas las vinculaciones de políticas

Recupera todas las políticas de IAM que se implementan en tu grupo de CA. Para recuperar todas las políticas de IAM del grupo de CA, usa el gcloud privateca pools get-iam-policy comando:

gcloud

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

Reemplaza lo siguiente:

  • POOL_NAME: Es el identificador único del grupo de CA.
  • LOCATION: Es la ubicación del grupo de CA. Para obtener 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.

Genera certificados

En esta sección, se proporciona información para generar certificados de uso general y certificados de DNS de prueba y producción.

Genera certificados de DNS de prueba

Para permitir que el usuario test-dns-requester@ solicite certificados de DNS de prueba del grupo de CA, 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

Aquí:

  • La marca --dns-san se usa para establecer una o más SAN de DNS separadas 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 establecer la ruta en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para establecer 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 establecer el nombre de la plantilla de certificado que deseas usar para emitir este certificado. La plantilla especificada debe estar en la misma ubicación que el grupo de CA emisor. Para obtener más información sobre las plantillas de certificados, consulta Descripción general de las plantillas de certificados y las políticas de emisión.

Reemplaza lo siguiente:

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

Genera certificados de producción

El usuario prod-dns-requester ahora puede solicitar certificados de DNS de producción del grupo de CA. La --dns-san=foo.bar.prod.example.com agrega una 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

Aquí:

  • La marca --issuer-location se usa para establecer la ubicación del certificado. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.
  • La marca --issuer-pool establece el grupo de CA desde el que se solicita el certificado.
  • La marca --dns-san se usa para establecer una o más SAN de DNS separadas 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 establecer la ruta en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para establecer 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 establecer 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 CA emisor. Para obtener más información sobre las plantillas de certificados, consulta Descripción general de las plantillas de certificados y las políticas de emisión.

Genera certificados de uso general

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

Para solicitar un certificado de un grupo de CA, puedes usar una clave pública/privada creada por el servicio de CA. Para obtener más información sobre cómo solicitar certificados, consulta Solicita un certificado y consulta el certificado emitido.

Limpia

En esta sección, se explica cómo puedes quitar políticas de IAM en un grupo de CA.

Quita una vinculación de IAM específica

Para quitar las vinculaciones condicionales de IAM en el grupo de CA para el 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@'

Aquí:

  • 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 IAM para el servicio de CA, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Cuando quites una vinculación de IAM específica, debes proporcionar toda la información relacionada con la vinculación de IAM en el gcloud privateca pools remove-iam-policy-binding comando. Un rol y un miembro pueden tener varias vinculaciones de IAM con diferentes condiciones. Es importante que proporciones todos los detalles relacionados con la vinculación de IAM para evitar borrar accidentalmente una vinculación diferente.

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

Quita todas las vinculaciones condicionales de IAM

Para quitar una vinculación de IAM, puedes usar el comando gcloud privateca pools remove-iam-policy-binding. Cuando quites una vinculación condicional de IAM, debes proporcionar toda la información sobre la vinculación. Un usuario y un rol pueden tener más de una vinculación condicional. Para quitar todas las vinculaciones condicionales, usa la marca --all en tu 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

Aquí:

  • 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 IAM para el servicio de CA, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.