Gérer les contrôles de règles
Ce tutoriel explique comment implémenter des contrôles de règles sur les ressources de Certificate Authority Service.
Objectifs
Ce tutoriel fournit des informations sur la configuration d'un pool d'autorités de certification (CA) partagé pour l'émission de certificats DNS avec les contrôles de règles suivants :
- L'utilisateur
prod-dns-requesterpeut demander des certificats TLS de serveur d'entité de fin pour le domaine*.prod.example.com. - L'utilisateur
test-dns-requesterpeut demander des certificats TLS de serveur d'entité de fin pour le domaine*.test.example.com. - L'utilisateur
blank-check-requesterpeut demander n'importe quel type de certificat au pool d'autorités de certification.
Ce tutoriel utilise la stratégie d'émission de certificats d'un pool d'autorités de certification, des modèles de certificats et des liaisons IAM conditionnelles pour atteindre cet objectif.
Avant de commencer
- Découvrez les différents contrôles de règles proposés par CA Service.
- Découvrez comment créer des modèles de certificats.
- Découvrez les profils de certificats que vous pouvez utiliser pour différents scénarios d’émission de certificats.
- Découvrez comment utiliser le langage CEL (Common Expression Language) pour appliquer différents contrôles de règles pour l'émission de certificats.
- Découvrez comment utiliser une stratégie d'émission de certificats.
- Découvrez comment configurer, modifier et supprimer des stratégies IAM pour créer et gérer des ressources CA Service.
Créer un pool d'autorités de certification
Pour créer un pool d'autorités de certification, suivez les instructions ci-dessous :
Pour créer un pool d'autorités de certification qui utilise le fichier
issuance-policy.yaml, exécutez la commandegcloudsuivante :gcloud
gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISEOù :
- LOCATION correspond à l'emplacement où vous souhaitez créer le pool d'autorités de certification. Pour obtenir la liste complète des emplacements, consultez la page Emplacements.
- L'option
--tierpermet de spécifier le niveau du pool d'autorités de certification. Pour en savoir plus sur les niveaux, consultez la section Sélectionner les niveaux d'opération.
Pour créer une autorité de certification avec des ressources gérées par Google dans le pool d'autorités de certification que vous venez de créer, exécutez la commande
gcloudsuivante :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-enableOù :
- POOL_NAME est l'identifiant unique du pool d'autorités de certification.
- LOCATION correspond à l'emplacement où vous souhaitez créer le pool d'autorités de certification. Pour obtenir la liste complète des emplacements, consultez la page Emplacements.
- L'option
--subjectpermet de transmettre le nom de l'objet du certificat. - L'option
--validitydétermine la période de validité de l'autorité de certification. La période de validité par défaut est de 10 ans. - L'option
--max-chain-lengthdétermine la profondeur maximale des autorités de certification subordonnées autorisées sous une autorité de certification. - L'option
--auto-enablecrée l'autorité de certification à l'étatENABLEDplutôt qu'à l'étatSTAGED. Pour en savoir plus sur les états des autorités de certification, consultez la section États des autorités de certification.
Configurer des contrôles de règles pour les certificats de test
Les modifications apportées à la stratégie d'émission prennent effet immédiatement. Nous vous recommandons de configurer des contrôles de règles de test avant de les utiliser en production. Cette section explique comment configurer des contrôles de règles de test.
Pour les modèles DNS de test et de production, vous devez utiliser les mêmes valeurs prédéfinies pour les certificats TLS de serveur. Créez un fichier YAML leaf_server_tls_predefined_values.yaml et copiez-y la configuration TLS de serveur d'entité de fin suivante.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Configurer des contrôles de règles pour les certificats DNS de test
Cette section explique comment définir des contrôles de règles pour autoriser l'utilisateur
test-dns-requester à demander des certificats TLS de serveur d'entité de fin pour le DNS dans le
*.test.example.com domaine.
Créer un modèle de certificat DNS pour les certificats de test
Cette section explique comment créer un modèle de certificat contenant
la configuration TLS de serveur d'entité de fin
. Ce modèle de certificat limite l'utilisation des certificats aux SAN DNS uniquement sur le domaine *.test.example.com. Ces restrictions sont implémentées à l'aide d'une expression CEL (Common Expression Language). Le modèle de certificat supprime également tout objet spécifié dans la demande de certificat.
Exécutez la commande
gcloudsuivante pour créer le modèle de certificat contenant les extensions TLS de serveur d'entité de fin, supprimez toutsubjectspécifié dans la demande de certificat et limitez les SAN autorisés.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'))"Où :
- L'option
--predefined-values-filepermet de transmettre un fichier YAML qui décrit toutes les valeurs X.509 prédéfinies définies par le modèle de certificat. - L'option
--no-copy-subjectsupprime tous les objets spécifiés par l'appelant de la demande de certificat. - L'option
--copy sansgarantit que l'extension SAN de la demande de certificat est copiée dans le certificat signé. - L'option
--identity-cel-expressionpermet de transmettre une expression CEL qui est évaluée par rapport à l'identité du certificat avant son émission. Pour en savoir plus sur l'utilisation d'expressions CEL pour implémenter différents contrôles de règles, consultez la section Utiliser CEL.
Pour en savoir plus sur la création de modèles de certificats, consultez la section Créer un modèle de certificat.
- L'option
Créer des liaisons IAM pour les certificats DNS de test
Pour autoriser l'utilisateur test-dns-requester@ dans le pool d'autorités de certification DNS à demander des certificats TLS de serveur de test, créez une liaison IAM conditionnelle sur le pool d'autorités de certification. N'accordez le rôle privateca.certificateRequester à l'utilisateur test-dns-requester@ que si la demande de certificat contient une référence au modèle test-server-tls-template. Pour en savoir plus sur les
rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des
accès avec
IAM.
Créez un fichier YAML de stratégie
test_dns_condition.yamlet copiez-y la configuration TLS suivante.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"Le nom du modèle fourni dans la condition IAM doit correspondre au nom du modèle dans la demande de certificat. Par conséquent, si vous fournissez un ID de projet dans l'attribut
privateca.googleapis.com/templatede l'expression CEL, vous devez également fournir un ID de projet lorsque vous demandez le certificat. Si vous fournissez un numéro de projet dans l'expression CEL, vous devez également fournir un numéro de projet dans la demande de certificat.Exécutez la commande
gcloudsuivante pour ajouter des contrôles de règles qui permettent àtest-dns-requester@de ne demander que des certificats TLS de test de production à partir du pool d'autorités de certification.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.yamlOù :
- L'option
--rolepermet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - L'option
--memberpermet de transmettre le membre pour lequel ajouter la liaison. - L'option
condition-from-filepermet de transmettre le nom du fichier contenant la condition CEL.
- L'option
Exécutez la commande
gcloudsuivante pour ajouter des contrôles de règles qui permettent àtest-dns-requester@d'utiliser le modèle de certificat "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@'Où :
- L'option
--rolepermet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - L'option
--memberpermet de transmettre le membre pour lequel ajouter la liaison.
Pour en savoir plus sur la configuration des stratégies IAM, consultez la section Configurer des stratégies IAM.
- L'option
Configurer des contrôles de règles pour les certificats de production
Une fois que vous avez testé vos contrôles de règles, vous pouvez les utiliser dans votre environnement de production.
Configurer des contrôles de règles pour les certificats DNS de production
Cette section explique comment définir des contrôles de règles pour autoriser l'utilisateur prod-dns-requester à demander des certificats TLS d'entité de fin pour le domaine DNS .prod.example.com.
Créer un modèle de certificat pour les certificats DNS de production
Suivez les instructions ci-dessous pour créer un modèle de certificat contenant
la configuration TLS de serveur d'entité de fin.
Ce modèle de certificat limite l'utilisation des certificats aux SAN DNS uniquement sur le domaine *.prod.example.com. Ces restrictions sont implémentées à l'aide d'une expression CEL (Common Expression Language). Le modèle de certificat supprime également tout objet spécifié dans la demande de certificat.
Créez un modèle de certificat prod-server-tls-template à l'aide de la commande gcloud suivante.
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'))"
Où :
- L'option
--predefined-values-filepermet de transmettre un fichier YAML qui décrit toutes les valeurs X.509 prédéfinies définies par le modèle de certificat. - L'option
--no-copy-subjectsupprime tous les objets spécifiés par l'appelant de la demande de certificat. - L'option
--copy sansgarantit que l'extension SAN de la demande de certificat est copiée dans le certificat signé. - L'option
--identity-cel-expressionpermet de transmettre une expression CEL qui est évaluée par rapport à l'identité du certificat avant son émission. Pour en savoir plus sur les expressions CEL, consultez la section Utiliser des expressions CEL.
Pour en savoir plus sur la création de modèles de certificats, consultez la section Créer un modèle de certificat.
Pour en savoir plus sur la commande gcloud privateca templates create, consultez la section
gcloud privateca templates create.
Créer une liaison IAM DNS de production
Pour autoriser l'utilisateur prod-dns-requester@ dans le pool d'autorités de certification DNS à demander des certificats TLS de serveur de production, créez une liaison IAM conditionnelle sur le pool d'autorités de certification. N'accordez le rôle privateca.certificateRequester à l'utilisateur prod-dns-requester@ que si la demande de certificat contient une référence au modèle prod-server-tls-template. Pour en savoir plus sur les rôles et les autorisations IAM, consultez la section Contrôle des accès avec
IAM.
Créez un fichier YAML de stratégie
prod_dns_condition.yamlet copiez-y la configuration TLS suivante.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"Exécutez la commande
gcloudsuivante pour ajouter des contrôles de règles qui permettent àprod-dns-requester@de ne demander que des certificats TLS de serveur de production à partir du pool d'autorités de certification.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.yamlOù :
- L'option
--rolepermet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - L'option
--memberpermet de transmettre le membre pour lequel ajouter la liaison. - L'option
condition-from-filepermet de transmettre le nom du fichier contenant la condition CEL.
Pour en savoir plus sur la commande
gcloud privateca pools add-iam-policy-binding, consultez la section gcloud privateca pools add-iam-policy-binding.- L'option
Pour ajouter des contrôles de règles qui permettent à
prod-dns-requester@d'utiliser le modèle de certificat "prod-server-tls-template", exécutez la commandegcloudsuivante :gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'Où :
- L'option
--rolepermet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - L'option
--memberpermet de transmettre le membre pour lequel ajouter la liaison.
- L'option
Contrôles de règles utilisateur sans restriction
Pour autoriser l'utilisateur blank-check-requester@ à demander n'importe quel certificat sans aucune limitation, créez une liaison IAM sans condition qui lui attribue le rôle 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'
Où :
- La valeur de l'option
--roledétermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - La valeur de l'option
--memberdétermine l'utilisateur auquel le rôle est attribué.
Remplacez les éléments suivants :
- POOL_NAME : identifiant unique du pool d'autorités de certification
- LOCATION: emplacement du pool d'autorités de certification. Pour obtenir la liste complète des emplacements, consultez la page Emplacements.
Tester les contrôles de règles
Une fois que vous avez implémenté vos stratégies d'émission de certificats et IAM, il est important de les examiner et de les tester pour vous assurer qu'elles fonctionnent comme prévu.
Récupérer toutes les liaisons de stratégie
Récupérez toutes les stratégies IAM implémentées sur votre pool d'autorités de certification.
Pour récupérer toutes les stratégies IAM du pool d'autorités de certification, exécutez la commande gcloud
privateca pools get-iam-policy :
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
Remplacez les éléments suivants :
- POOL_NAME : identifiant unique du pool d'autorités de certification
- LOCATION: emplacement du pool d'autorités de certification. Pour obtenir la liste complète des emplacements, consultez la page Emplacements.
Pour en savoir plus sur la commande gcloud privateca pools get-iam-policy,
consultez la section gcloud privateca pools
get-iam-policy.
Générer des certificats
Cette section fournit des informations sur la génération de certificats à usage général, ainsi que de certificats DNS de test et de production.
Générer des certificats DNS de test
Pour autoriser l'utilisateur test-dns-requester@ à demander des certificats DNS de test à partir du pool d'autorités de certification, exécutez la commande gcloud suivante :
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
Où :
- L'option
--dns-sanpermet de définir un ou plusieurs SAN DNS séparés par une virgule. - L'option
--generate-keydéclenche la génération d'une nouvelle clé privée RSA-2048 sur votre machine. - L'option
--key-output-filepermet de définir le chemin d'accès où la clé privée générée est écrite (au format PEM). - L'option
--cert-output-filepermet de définir le chemin d'accès où le fichier de chaîne de certificats encodé au format PEM obtenu est écrit (ordonné de l'entité de fin à la racine). - L'option
--templatepermet de définir le nom du modèle de certificat que vous souhaitez utiliser pour émettre ce certificat. Le modèle spécifié doit se trouver au même emplacement que le pool d'autorités de certification émetteur. Pour en savoir plus sur les modèles de certificats, consultez la section Présentation des modèles de certificats et des stratégies d'émission.
Remplacez les éléments suivants :
- PROJECT_ID : identifiant unique du projet
- LOCATION : emplacement du pool d'autorités de certification à partir duquel le certificat est demandé. Pour obtenir la liste complète des emplacements, consultez la page Emplacements.
- POOL_NAME : identifiant unique du pool d'autorités de certification
Générer des certificats de production
L'utilisateur prod-dns-requester peut désormais demander des certificats DNS de production à partir du pool d'autorités de certification. L'option --dns-san=foo.bar.prod.example.com ajoute un SAN de type DNS avec la valeur spécifiée à la demande de certificat.
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
Où :
- L'option
--issuer-locationpermet de définir l'emplacement du certificat. Pour obtenir la liste complète des emplacements, consultez la page Emplacements. - L'option
--issuer-pooldéfinit le pool d'autorités de certification à partir duquel le certificat est demandé. - L'option
--dns-sanpermet de définir un ou plusieurs SAN DNS séparés par une virgule. - L'option
--generate-keydéclenche la génération d'une nouvelle clé privée RSA-2048 sur votre machine. - L'option
--key-output-filepermet de définir le chemin d'accès où la clé privée générée est écrite (au format PEM). - L'option
--cert-output-filepermet de définir le chemin d'accès où le fichier de chaîne de certificats encodé au format PEM obtenu est écrit (ordonné de l'entité de fin à la racine). - L'option
--templatepermet de définir le nom du modèle de certificat à utiliser pour émettre ce certificat. Le modèle spécifié doit se trouver au même emplacement que le pool d'autorités de certification émetteur. Pour en savoir plus sur les modèles de certificats, consultez la section Présentation des modèles de certificats et des stratégies d'émission.
Générer des certificats à usage général
L'utilisateur blank-check-requester@ peut demander n'importe quel certificat au pool d'autorités de certification à l'aide de la commande gcloud privateca certificates create.
Pour demander un certificat à un pool d'autorités de certification, vous pouvez utiliser une clé publique/privée créée par CA Service. Pour en savoir plus sur les demandes de certificats, consultez la section Demander un certificat et afficher le certificat émis.
Libérer de l'espace
Cette section explique comment supprimer des stratégies IAM sur un pool d'autorités de certification.
Supprimer une liaison IAM spécifique
Pour supprimer les liaisons conditionnelles IAM sur le pool d'autorités de certification pour l'utilisateur blank-check-requester, exécutez la commande gcloud suivante :
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Où :
- La valeur de l'option
--roledétermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - La valeur de l'option
--memberdétermine l'utilisateur auquel le rôle est attribué.
Lorsque vous supprimez une liaison IAM spécifique, vous devez fournir toutes les
informations associées à la liaison IAM dans la gcloud privateca
pools remove-iam-policy-binding commande. Un rôle et un membre peuvent avoir plusieurs liaisons IAM avec des conditions différentes. Il est important de fournir tous les détails associés à la liaison IAM pour éviter de supprimer accidentellement une autre liaison.
Pour en savoir plus sur la commande gcloud privateca pools
remove-iam-policy-binding, consultez la section gcloud privateca pools
remove-iam-policy-binding.
Supprimer toutes les liaisons conditionnelles IAM
Pour supprimer une liaison IAM, vous pouvez utiliser la commande gcloud privateca pools
remove-iam-policy-binding. Lorsque vous supprimez une liaison conditionnelle IAM, vous devez fournir toutes les informations associées à la liaison. Un utilisateur et un rôle peuvent avoir plusieurs liaisons conditionnelles. Pour supprimer toutes les liaisons conditionnelles, utilisez l'option --all dans votre commande gcloud.
Exécutez la commande gcloud suivante pour supprimer toutes les liaisons de l'utilisateur 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
Où :
- La valeur de l'option
--roledétermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour CA Service, consultez la section Contrôle des accès avec IAM. - La valeur de l'option
--memberdétermine l'utilisateur auquel le rôle est attribué.