Instructivo: 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 sobre cómo configurar un grupo compartido de autoridades certificadoras (CA) para la emisión de certificados 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 al grupo de CA.

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

Antes de comenzar

Crea un grupo de CA

Para crear un grupo de AC, usa las siguientes instrucciones:

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

    gcloud

    gcloud privateca pools create POOL_NAME \
        --tier=ENTERPRISE
    

    Aquí:

  2. Para crear una AC con recursos administrados por Google en el grupo de AC recién creado, usa el siguiente comando gcloud:

    gcloud

    gcloud privateca roots create CA_NAME \
       --pool=POOL_NAME \
       --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.
    • La marca --subject se usa para pasar el nombre del sujeto del certificado.
    • La marca --validity determina el período de validez de la AC. El período de validez predeterminado es de 10 años.
    • La marca --max-chain-length determina la profundidad máxima de las AC subordinadas que se permiten en una AC.
    • La marca --auto-enable crea la AC en el estado ENABLED, en lugar de hacerlo en el estado STAGED. Para obtener más información sobre los estados de AC, consulta Estados de AC.

Configura controles de política para certificados de prueba

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

Para las plantillas de DNS de prueba y 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 controles de política para probar certificados DNS

En esta sección, se describe cómo 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 dominio *.test.example.com.

Crea una plantilla de certificado DNS para los 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 SAN de DNS en el dominio *.test.example.com. Estas restricciones se implementan mediante 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 de gcloud para crear la plantilla de certificado que contiene las extensiones de TLS del servidor de entidad final, descartar cualquier subject especificada en la solicitud de certificado y limitar los SAN 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'))"
    

    Aquí:

    • La marca --predefined-values-file se usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido que establezca la plantilla de certificado.
    • La marca --no-copy-subject descarta todos los sujetos especificados por el emisor de la solicitud de certificado.
    • La marca --copy sans garantiza que la extensión de 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 su emisión. Si quieres obtener más información sobre el uso de expresiones en CEL para implementar varios controles de políticas, consulta Usa CEL.

    Para obtener más información sobre la creación de plantillas de certificado, consulta Crea una plantilla de certificado.

Crear vinculaciones de IAM para 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 de IAM condicional 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. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, 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 proporcionado 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 CEL, también debes proporcionar un ID del proyecto cuando solicites el certificado. Si proporcionas un número de proyecto en la expresión CEL, también debes proporcionar un número de proyecto en la solicitud de certificado.

  2. Usa el siguiente comando de 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 \
        --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 de la función que se asignará a un miembro. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, 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 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 de la función que se asignará a un miembro. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, 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 controles de políticas para certificados de producción

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

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

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

Crea una plantilla de certificado para 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 solo usen SAN de DNS en el dominio *.prod.example.com. Estas restricciones se implementan mediante 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 que establezca la plantilla de certificado.
  • La marca --no-copy-subject descarta todos los sujetos especificados por el emisor de la solicitud de certificado.
  • La marca --copy sans garantiza que la extensión de 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 su emisión. Para obtener más información sobre las expresiones en CEL, consulta Usa expresiones en CEL.

Para obtener más información sobre la creación de plantillas de certificado, consulta Crea una plantilla de certificado.

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

Crear 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 de IAM condicional en el grupo de CA. Otorga al usuario prod-dns-requester@ la función 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 permisos y las funciones 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 de 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 \
        --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 de la función que se asignará a un miembro. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, 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 CEL.

    Para obtener más información sobre el comando gcloud privateca pools add-iam-policy-binding, consulta gcloud privateca pool 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 de 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 de la función que se asignará a un miembro. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, 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 del usuario sin restricciones

Para permitir que el usuario blank-check-requester@ solicite cualquier certificado sin limitaciones, crea una vinculación de IAM sin ningún condicional que le otorgue al usuario el rol privateca.certificateRequester.

gcloud

gcloud privateca pools add-iam-policy-binding POOL_NAME \
  --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. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Prueba los controles de la política

Una vez que implementes las políticas de IAM y emisión de certificados, es importante revisarlas y probarlas para asegurarte de que funcionen como se espera.

Recuperar todas las vinculaciones de políticas

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

gcloud

gcloud privateca pools get-iam-policy POOL_NAME

Aquí:

  • POOL_NAME es el identificador único del grupo de CA.

Para obtener más información sobre el comando gcloud privateca pools get-iam-policy, consulta gcloud privateca groups 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 DNS de prueba

Para permitir que el usuario test-dns-requester@ solicite certificados 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 --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 configurar uno o más SAN de DNS separados por comas.
  • La marca --generate-key activa la generación de una nueva clave privada RSA-2048 en el equipo.
  • La marca --key-output-file se usa para establecer la ruta de acceso en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para establecer la ruta de acceso en la que se escribe el archivo de cadena de certificados codificado con PEM (ordenado de entidad final a 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 certificado, consulta la Descripción general de las plantillas de certificado y las políticas de emisión.

Genera certificados de producción

El usuario prod-dns-requester ahora puede solicitar certificados de DNS de producción desde el grupo de CA. --dns-san=foo.bar.prod.example.com agrega una SAN de tipo de 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 configurar uno o más SAN de DNS separados por comas.
  • La marca --generate-key activa la generación de una nueva clave privada RSA-2048 en el equipo.
  • La marca --key-output-file se usa para establecer la ruta de acceso en la que se escribe la clave privada generada (en formato PEM).
  • La marca --cert-output-file se usa para establecer la ruta de acceso en la que se escribe el archivo de cadena de certificados codificado con PEM (ordenado de entidad final a 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 certificado, consulta la Descripción general de las plantillas de certificado 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 AC, puedes usar una clave pública/privada creada por un servicio de AC. Para obtener más información sobre la solicitud de certificados, consulte Cómo solicitar un certificado y ver los certificados emitidos.

Limpia

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

Quita una vinculación de IAM específica

A fin de quitar las vinculaciones condicionales de IAM del grupo de CA para el usuario blank-check-requester, usa el siguiente comando gcloud:

gcloud

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

Aquí:

  • El valor de la marca --role determina el rol que se asigna al usuario. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.

Cuando quitas una vinculación de IAM específica, debes proporcionar toda la información relacionada con ella 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 la vinculación de IAM para evitar borrar una vinculación diferente por accidente.

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

Quitar 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 quitas 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 el comando gcloud.

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

gcloud

gcloud privateca pools remove-iam-policy-binding POOL_NAME \
    --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. Si quieres obtener más información sobre las funciones y los permisos de IAM para CA Service, consulta Control de acceso con IAM.
  • El valor de la marca --member determina el usuario al que se le asigna el rol.