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) compartido para la emisión de certificados de DNS con los siguientes controles de políticas:
- El usuario
prod-dns-requesterpuede solicitar certificados TLS del servidor de entidad final para el dominio*.prod.example.com. - El usuario
test-dns-requesterpuede solicitar certificados TLS del servidor de entidad final para el dominio*.test.example.com. - El usuario
blank-check-requesterpuede 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 AC, plantillas de certificados y vinculaciones condicionales de IAM para lograr este escenario.
Antes de comenzar
- Lee sobre los diversos controles de políticas que ofrece el Servicio de CA.
- Lee cómo puedes crear plantillas de certificados.
- Obtén información sobre los perfiles de certificado que puedes usar para diversas situaciones de emisión de certificados.
- Lee cómo puedes usar Common Expression Language (CEL) para aplicar diversos controles de políticas para la emisión de certificados.
- Lee cómo puedes usar una política de emisión de certificados.
- Lee cómo puedes configurar, modificar y quitar políticas de IAM para crear y administrar recursos del Servicio de CA.
Cómo crear un grupo de CA
Para crear un grupo de CA, sigue estas instrucciones:
Para crear un grupo de CA que use el archivo
issuance-policy.yaml, usa el siguiente comandogcloud:gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEAquí:
- 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
--tierse usa para especificar el nivel del grupo de AC. Para obtener más información sobre los niveles, consulta Selecciona los niveles de operación.
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-enableAquí:
- 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
--subjectse usa para pasar el nombre del asunto del certificado. - La marca
--validitydetermina el período de validez de la CA. El período de validez predeterminado es de 10 años. - La marca
--max-chain-lengthdetermina la profundidad máxima de las AC subordinadas permitidas en una AC. - La marca
--auto-enablecrea la CA en el estadoENABLED, en lugar de en el estadoSTAGED. Para obtener más información sobre los estados de la AC, consulta Estados de la AC.
Cómo configurar controles de políticas para certificados de prueba
Los cambios en la política de emisión entrarán en vigencia de inmediato. Te recomendamos que configures los controles de la política de prueba antes de usarlos en 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 para las 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 de servidor de entidad final para DNS en el dominio *.test.example.com.
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 solo usen 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.
Usa el siguiente comando
gcloudpara crear la plantilla de certificado que contiene las extensiones TLS del servidor de entidad final, descarta cualquiersubjectespecificado en la solicitud de certificado y limita 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-filese usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido establecido por la plantilla de certificado. - La marca
--no-copy-subjectdescarta todos los asuntos especificados por el llamador de la solicitud de certificado. - El parámetro
--copy sansgarantiza que la extensión SAN de la solicitud de certificado se copie en el certificado firmado. - La marca
--identity-cel-expressionse usa para pasar una expresión de CEL que se evalúa en relación con la identidad del certificado antes de que se emita. Para obtener más información sobre el uso de expresiones de CEL para implementar diversos controles de políticas, consulta Uso de CEL.
Para obtener más información sobre cómo crear plantillas de certificados, consulta Crea una plantilla de certificado.
- La marca
Crea vinculaciones de IAM para los certificados de prueba de DNS
Para permitir que el usuario test-dns-requester@ del 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 CA Service, consulta Control de acceso con IAM.
Crea un archivo de políticas en formato YAML
test_dns_condition.yamly 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"La sintaxis de la plantilla usa
PROJECT_ID/-/TEMPLATE_IDen lugar del nombre completo estándar del recursoprojects/PROJECT_ID/locations/LOCATION/certificateTemplates/TEMPLATE_ID, ya que las plantillas de certificados deben residir en la misma ubicación que el grupo de CA. El guion (-) actúa como comodín de ubicación, lo que mantiene las condiciones de CEL concisas, legibles y sin importar la ubicación.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/templatede 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 de CEL, también debes proporcionar un número de proyecto en la solicitud de certificado.Usa el siguiente comando
gcloudpara agregar controles de políticas que permitan quetest-dns-requester@solo solicite certificados TLS de prueba de producción del grupo de AC.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.yamlAquí:
- La marca
--rolese 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 CA Service, consulta Control de acceso con IAM. - La marca
--memberse usa para pasar el miembro al que se agregará la vinculación. - La marca
condition-from-filese usa para pasar el nombre del archivo con la condición CEL.
- La marca
Usa el siguiente
gcloudpara agregar controles de políticas que permitan quetest-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
--rolese 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 CA Service, consulta Control de acceso con IAM. - La marca
--memberse 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.
- La marca
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 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 .prod.example.com de DNS.
Crea una plantilla de certificado para los certificados de DNS de producción
Sigue estas 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 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-filese usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido establecido por la plantilla de certificado. - La marca
--no-copy-subjectdescarta todos los asuntos especificados por el llamador de la solicitud de certificado. - El indicador
--copy sansgarantiza que la extensión SAN de la solicitud de certificado se copie en el certificado firmado. - La marca
--identity-cel-expressionse usa para pasar una expresión de CEL que se evalúa en relación con la identidad del certificado antes de que se emita. Para obtener más información sobre las expresiones CEL, consulta Cómo usar expresiones 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 la vinculación de IAM del 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. Asigna al usuario prod-dns-requester@ el rol de 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 IAM, consulta Control de acceso con IAM.
Crea un archivo de políticas en formato YAML
prod_dns_condition.yamly copia la siguiente configuración de TLS en él.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"Usa el siguiente comando
gcloudpara agregar controles de políticas que permitan queprod-dns-requester@solo solicite certificados TLS del servidor de producción desde el grupo de AC.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.yamlAquí:
- La marca
--rolese 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 CA Service, consulta Control de acceso con IAM. - La marca
--memberse usa para pasar el miembro al que se agregará la vinculación. - La marca
condition-from-filese 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 pools add-iam-policy-binding.- La marca
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 degcloud:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'Aquí:
- La marca
--rolese 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 CA Service, consulta Control de acceso con IAM. - La marca
--memberse usa para pasar el miembro al que se agregará la vinculación.
- La marca
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 condiciones 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
--roledetermina 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
--memberdetermina 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 AC. Para obtener la lista completa de ubicaciones, consulta Ubicaciones.
Prueba los controles de políticas
Una vez que implementes las políticas de IAM y de emisión de certificados, es importante que las revises y pruebes para asegurarte de que funcionen según lo previsto.
Recupera todas las vinculaciones de políticas
Recupera todas las políticas de IAM implementadas en tu grupo de CA.
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 --location=LOCATION
Reemplaza lo siguiente:
- POOL_NAME: Es el identificador único del grupo de CA.
- LOCATION: Es la ubicación del grupo de AC. 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, así como certificados 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 entidades de certificación, 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-sanse usa para establecer uno o más SAN de DNS separados por comas. - La marca
--generate-keyactiva la generación de una nueva clave privada RSA-2048 en tu máquina. - La marca
--key-output-filese usa para establecer la ruta de acceso en la que se escribe la clave privada generada (en formato PEM). - La marca
--cert-output-filese usa para establecer la ruta en la que se escribe el archivo de cadena de certificados con codificación PEM resultante (ordenado desde la entidad final hasta la raíz). - La marca
--templatese 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 AC 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 entidades certificadoras. El comando --dns-san=foo.bar.prod.example.com agrega 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
Aquí:
- La marca
--issuer-locationse usa para establecer la ubicación del certificado. Para obtener la lista completa de ubicaciones, consulta Ubicaciones. - La marca
--issuer-poolestablece el grupo de CA desde el que se solicita el certificado. - La marca
--dns-sanse usa para establecer uno o más SAN de DNS separados por comas. - La marca
--generate-keyactiva la generación de una nueva clave privada RSA-2048 en tu máquina. - La marca
--key-output-filese usa para establecer la ruta de acceso en la que se escribe la clave privada generada (en formato PEM). - La marca
--cert-output-filese usa para establecer la ruta en la que se escribe el archivo de cadena de certificados con codificación PEM resultante (ordenado desde la entidad final hasta la raíz). - La marca
--templatese 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 AC de emisión. 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.
Realiza una limpieza
En esta sección, se explica cómo puedes quitar políticas de IAM de un grupo de entidades de certificación.
Cómo quitar una vinculación de IAM específica
Para quitar las vinculaciones condicionales de IAM sobre el grupo de CA para el usuario blank-check-requester, usa el siguiente comando de 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
--roledetermina 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
--memberdetermina 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 la vinculación de IAM 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 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 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 tu 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 \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
Aquí:
- El valor de la marca
--roledetermina 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
--memberdetermina el usuario al que se le asigna el rol.