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
- Consulta información sobre los distintos controles de políticas que ofrece el servicio de CA.
- Consulta cómo puedes crear plantillas de certificados.
- Consulta los perfiles de certificado que puedes usar en diferentes situaciones de emisión de certificados.
- Consulta cómo puedes usar el lenguaje de expresión común (CEL) para aplicar varios controles de políticas en la emisión de certificados.
- Consulta cómo puedes usar una política de emisión de certificados.
- Consulta cómo configurar, modificar y quitar políticas de gestión de identidades y accesos para crear y gestionar recursos del Servicio de Autoridades de Certificación.
Crear un grupo de autoridades de certificación
Para crear un grupo de autoridades de certificación, sigue estas instrucciones:
Para crear un grupo de ACs que use el archivo
issuance-policy.yaml
, usa el siguiente comandogcloud
: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.
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 estadoENABLED
, en lugar de en el estadoSTAGED
. 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.
Usa el siguiente comando
gcloud
para crear la plantilla de certificado que contiene las extensiones TLS del servidor de entidad final, elimina cualquiersubject
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.
- La marca
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.
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.Usa el siguiente comando
gcloud
para añadir controles de políticas que permitan atest-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.
- La marca
Usa el siguiente
gcloud
para añadir controles de políticas que permitan atest-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.
- La marca
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.
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"
Usa el siguiente comando
gcloud
para añadir controles de políticas que permitan aprod-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.- La marca
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 comandogcloud
: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.
- La marca
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.