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 la configuración de un grupo compartido de autoridades certificadoras (AC) 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 del grupo de AC.
En este instructivo, se usa la política de emisión de certificados de un grupo de AC, plantillas de certificados y vinculaciones de IAM condicionales para lograr esta situación.
Antes de comenzar
- Obtén información sobre los diversos controles de políticas que ofrece CA Service.
- Obtén más información sobre cómo crear plantillas de certificados.
- Obtén información sobre los perfiles de certificados que puedes usar para varias situaciones de emisión de certificados.
- Obtén más información sobre cómo usar Common Expression Language (CEL) para aplicar varios controles de políticas para la emisión de certificados.
- Consulta 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 de CA Service.
Crea un grupo de AC
Para crear un grupo de AC, usa las siguientes instrucciones:
Para crear un grupo de AC que use el archivo
issuance-policy.yaml
, usa el siguiente comando degcloud
:gcloud
gcloud privateca pools create POOL_NAME \ --tier=ENTERPRISE
Aquí:
- La marca
--tier
se 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.
- La marca
Para crear una AC con recursos administrados por Google en el grupo de AC recién creado, usa el siguiente comando de
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 AC.
- 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 AC subordinadas permitidas en una AC. - La marca
--auto-enable
crea la AC en el estadoENABLED
, en lugar de hacerlo en el estadoSTAGED
. 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 entran en vigor de inmediato. Te recomendamos que configures los controles de política 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.
En 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íticas para certificados 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 el DNS en el dominio *.test.example.com
.
Crea 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 se usen SAN de DNS en el dominio *.test.example.com
. Estas restricciones se implementan mediante una expresión Common Expression Language (CEL). La plantilla de certificado también descarta cualquier tema 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, descarta cualquiersubject
especificado 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-file
se usa para pasar un archivo YAML que describe cualquier valor X.509 predefinido establecido por la plantilla del certificado. - La marca
--no-copy-subject
descarta todos los asuntos 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 en CEL que se evalúa según la identidad del certificado antes de que se emita. 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 certificados, consulta Crea una plantilla de certificado.
- La marca
Crea vinculaciones de IAM para certificados de prueba de DNS
Para permitir que el usuario test-dns-requester@
del grupo de AC de DNS solicite certificados TLS del servidor de prueba, crea una vinculación de IAM condicional en el grupo de AC. 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 deseas obtener más información sobre los roles y los permisos de IAM para CA Service, consulta Control de acceso con IAM.
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
privateca.googleapis.com/template
de la expresión CEL, debes también puedes proporcionar un ID del proyecto cuando solicites el certificado. Si proporcionas un proyecto en la expresión CEL, debes proporcionar un número de proyecto en la solicitud de certificado.Usa el siguiente comando de
gcloud
para 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 \ --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 deseas obtener más información sobre los roles 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.
- La marca
Usa los siguientes
gcloud
para agregar controles de políticas que permitan quetest-dns-requester@
use “test-server-tls-template” plantilla de certificado.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 deseas obtener más información sobre los roles 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.
- La marca
Configura controles de políticas para certificados de producción
Una vez que hayas probado tus controles de políticas, puedes usarlos en tu entorno de producción.
Configura controles de políticas para certificados DNS de producción
En esta sección, se describe cómo 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 certificados 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 se usen SAN de DNS en el dominio *.prod.example.com
. Estas restricciones se implementan mediante una expresión Common Expression Language (CEL). La plantilla de certificado también descarta cualquier tema 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 del certificado. - La marca
--no-copy-subject
descarta todos los asuntos 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 en CEL que se evalúa según la identidad del certificado antes de que se emita. Para obtener más información sobre las expresiones en CEL, consulta Usa expresiones CEL.
Para obtener más información sobre la creación de 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.
Crear vinculación de IAM de DNS de producción
Para permitir que el usuario prod-dns-requester@
del grupo de AC de DNS solicite certificados TLS del servidor de producción, crea una vinculación de IAM condicional en el grupo de AC. Otorga 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 IAM, consulta Control de acceso con IAM.
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 de
gcloud
para agregar controles de políticas que permitan queprod-dns-requester@
solo solicite certificados TLS del servidor de producción del grupo de AC.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 deseas obtener más información sobre los roles 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.- La marca
Para agregar controles de políticas que permitan que
prod-dns-requester@
use “prod-server-tls-template” plantilla de certificado, 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@'
Aquí:
- La marca
--role
se usa para pasar el nombre de la función que se asignará a un miembro. Si deseas obtener más información sobre los roles 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
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 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 la función que se asigna al usuario. Si deseas obtener más información sobre los roles 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 la función.
Prueba los controles de políticas
Una vez que implementes las políticas de IAM y emisión de certificados, es importante revisar y probar estas políticas para asegurarte de que funcionen como se espera.
Recupera todas las vinculaciones de políticas
Recupera todas las políticas de IAM que se implementaron en tu grupo de AC. Para recuperar todas las políticas de IAM del grupo de AC, 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 AC.
Para obtener más información sobre el comando gcloud privateca pools get-iam-policy
, consulta gcloud privateca pool get-iam-policy.
Genera certificados
En esta sección, se proporciona información sobre cómo generar certificados de uso general y para probar y producir certificados DNS.
Genera certificados DNS de prueba
Para permitir que el usuario test-dns-requester@
solicite certificados DNS de prueba del grupo de 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
Aquí:
- La marca
--issuer-location
se usa para configurar la ubicación del certificado. Para obtener la lista completa de ubicaciones, consulta Ubicaciones. - La marca
--issuer-pool
establece el grupo de AC 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 tu máquina. - 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 con codificación 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 la AC emisora. Para obtener más información sobre las plantillas de certificado, consulta Descripción general de las plantillas de certificados y las políticas de emisión.
Generar certificados de producción
El usuario prod-dns-requester
ahora puede solicitar certificados DNS de producción al grupo de AC. --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-location
se usa para configurar la ubicación del certificado. Para obtener la lista completa de ubicaciones, consulta Ubicaciones. - La marca
--issuer-pool
establece el grupo de AC 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 tu máquina. - 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 con codificación 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 la AC emisora. Para obtener más información sobre las plantillas de certificado, 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 AC 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 el servicio de CA. Para obtener más información sobre cómo solicitar certificados, consulta Cómo solicitar un certificado y ver el certificado emitido.
Limpia
En esta sección, se explica cómo puedes quitar políticas de IAM en un grupo de AC.
Quita una vinculación de IAM específica
Para quitar las vinculaciones condicionales de IAM sobre el grupo de AC del 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 la función que se asigna al usuario. Si deseas obtener más información sobre los roles 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 la función.
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 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 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 \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
Aquí:
- El valor de la marca
--role
determina la función que se asigna al usuario. Si deseas obtener más información sobre los roles 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 la función.