Tutoriel: Gérer les contrôles des règles
Ce tutoriel explique comment implémenter des contrôles de stratégie sur des ressources Certificate Authority Service.
Objectifs
Ce tutoriel fournit des informations sur la configuration d'un pool d'autorité de certification partagé pour l'émission de certificats DNS avec les commandes de stratégie suivantes:
- L'utilisateur
prod-dns-requester
peut demander des certificats TLS de serveur d'entité de fin pour le domaine*.prod.example.com
. - L'utilisateur
test-dns-requester
peut demander des certificats TLS du serveur d'entité finale pour le domaine*.test.example.com
. - L'utilisateur
blank-check-requester
peut 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 certificat et des liaisons IAM conditionnelles pour réaliser ce scénario.
Avant de commencer
- Découvrez les différents contrôles de stratégie proposés par le service d'autorité de certification.
- Découvrez comment créer des modèles de certificat.
- Découvrez les profils de certificat que vous pouvez utiliser pour différents scénarios d'émission de certificats.
- Découvrez comment appliquer différents contrôles de stratégie pour l'émission de certificats à l'aide du langage CEL (Common Expression Language).
- 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 du service CA.
Créer un pool d'autorités de certification
Pour créer un pool d'autorités de certification, procédez comme suit:
Pour créer un pool d'autorités de certification qui utilise le fichier
issuance-policy.yaml
, exécutez la commandegcloud
suivante:gcloud
gcloud privateca pools create POOL_NAME \ --tier=ENTERPRISE
Où :
- L'option
--tier
permet 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.
- L'option
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
gcloud
suivante: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
Où :
- POOL_NAME est l'identifiant unique du pool d'autorités de certification.
- L'option
--subject
permet de transmettre le nom de l'objet du certificat. - L'indicateur
--validity
détermine la période de validité de l'autorité de certification. La période de validité par défaut est de 10 ans. - L'indicateur
--max-chain-length
détermine la profondeur maximale des autorités de certification subordonnées autorisées sous une autorité de certification. - L'option
--auto-enable
crée l'autorité de certification dans l'étatENABLED
, plutôt que dans l'étatSTAGED
. Pour en savoir plus sur les états de l'autorité de certification, consultez la section États de l'autorité de certification.
Configurer des règles de contrôle pour les certificats de test
Les modifications apportées aux règles d'émission prennent effet immédiatement. Nous vous recommandons de configurer les contrôles des stratégies de test avant de les utiliser pour la production. Cette section explique comment configurer des 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 du serveur d'entité finale suivante.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Configurer les contrôles des règles pour tester les certificats DNS
Cette section explique comment définir des règles permettant à l'utilisateur test-dns-requester
de demander des certificats TLS du serveur d'entité finale pour les DNS dans le domaine *.test.example.com
.
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 du serveur d'entité finale. Ce modèle de certificat limite l'utilisation des certificats DNS aux réseaux SAN DNS 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 abandonne également tout objet spécifié dans la demande de certificat.
Utilisez la commande
gcloud
suivante pour créer le modèle de certificat contenant les extensions TLS du serveur d'entité finale, supprimer tous lessubject
spécifiés dans la demande de certificat et limiter 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-file
permet de transmettre un fichier YAML décrivant les valeurs X.509 prédéfinies définies par le modèle de certificat. - L'option
--no-copy-subject
supprime tous les sujets spécifiés par l'appelant de la requête de certificat. - L'option
--copy sans
garantit que l'extension SAN de la demande de certificat est copiée dans le certificat signé. - L'option
--identity-cel-expression
permet 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ègle, consultez la page Utiliser CEL.
Pour en savoir plus sur la création de modèles de certificat, consultez Créer un modèle de certificat.
- L'option
Créer des liaisons IAM pour les certificats de test DNS
Pour autoriser l'utilisateur test-dns-requester@
du pool d'autorités de certification DNS à demander des certificats TLS de serveur de test, créez une liaison IAM conditionnelle au niveau du 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 Certificate Authority Service, consultez la page Contrôle des accès avec IAM.
Créez un fichier YAML de stratégie
test_dns_condition.yaml
, puis 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. Ainsi, si vous fournissez un ID de projet dans le fichier l'attribut
privateca.googleapis.com/template
de l'expression CEL, vous devez fournir également un ID de projet lorsque vous demandez le certificat. Si vous fournissez un numéro de projet dans l'expression CEL, vous devez indiquer un numéro de projet dans la demande de certificat.Utilisez la commande
gcloud
suivante pour ajouter des contrôles de règle permettant àtest-dns-requester@
de demander uniquement 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 \ --role='roles/privateca.certificateRequester' \ --member='user:test-dns-requester@' \ --condition-from-file=./test_dns_condition.yaml
Où :
- L'option
--role
permet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour Certificate Authority Service, consultez la page Contrôle des accès avec IAM. - L'option
--member
permet de transmettre le membre pour lequel ajouter la liaison. - L'indicateur
condition-from-file
permet de transmettre le nom du fichier avec la condition CEL.
- L'option
Utilisez l'
gcloud
suivante pour ajouter des contrôles de stratégie permettant à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'indicateur
--role
permet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour le service CA, consultez la page Contrôle des accès avec IAM. - L'option
--member
permet de transmettre le membre pour lequel vous ajoutez la liaison.
Pour en savoir plus sur la configuration des stratégies IAM, consultez Configurer des stratégies IAM.
- L'indicateur
Configurer des contrôles de stratégie pour les certificats de production
Une fois que vous avez testé vos contrôles de stratégie, vous pouvez les utiliser dans votre environnement de production.
Configurer les contrôles des règles pour les certificats DNS de production
Cette section explique comment définir des contrôles de stratégie pour autoriser l'utilisateur prod-dns-requester
à demander des certificats TLS d'entité finale 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 du serveur d'entité de fin. Ce modèle de certificat limite les certificats à n'utiliser que des SAN DNS 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 abandonne é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-file
permet de transmettre un fichier YAML décrivant les valeurs X.509 prédéfinies définies par le modèle de certificat. - L'option
--no-copy-subject
supprime tous les sujets spécifiés par l'appelant de la requête de certificat. - L'option
--copy sans
garantit que l'extension SAN de la demande de certificat est copiée dans le certificat signé. - L'option
--identity-cel-expression
permet 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 page Utiliser des expressions CEL.
Pour en savoir plus sur la création de modèles de certificat, consultez Créer un modèle de certificat.
Pour en savoir plus sur la commande gcloud privateca templates create
, consultez la page sur la commande gcloud privatecatemplates create.
Créer une liaison IAM DNS de production
Pour autoriser l'utilisateur prod-dns-requester@
du pool d'autorités de certification DNS à demander des certificats TLS du serveur de production, créez une liaison IAM conditionnelle sur le pool d'autorités de certification. N'attribuez 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 page Contrôle des accès avec IAM.
Créez un fichier YAML de règle
prod_dns_condition.yaml
et copiez la configuration TLS suivante dans le fichier.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"
Utilisez la commande
gcloud
suivante pour ajouter des contrôles de règle permettant àprod-dns-requester@
de demander uniquement les certificats TLS du serveur de production à partir du pool d'autorités de certification.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
Où :
- L'option
--role
permet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour Certificate Authority Service, consultez la page Contrôle des accès avec IAM. - L'option
--member
permet de transmettre le membre pour lequel vous ajoutez la liaison. - L'option
condition-from-file
permet de transmettre le nom du fichier avec la condition CEL.
Pour en savoir plus sur la commande
gcloud privateca pools add-iam-policy-binding
, consultez la page gcloud privateca pools add-iam-policy-binding.- L'option
Pour ajouter des contrôles de règle permettant à
prod-dns-requester@
d'utiliser "prod-server-tls-template" de certificat, utilisez la commandegcloud
suivante:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'
Où :
- L'option
--role
permet de transmettre le nom du rôle à attribuer à un membre. Pour en savoir plus sur les rôles et les autorisations IAM pour le service CA, consultez la page Contrôle des accès avec IAM. - L'option
--member
permet de transmettre le membre pour lequel ajouter la liaison.
- L'option
Commandes des règles relatives aux utilisateurs non restreints
Pour permettre à l'utilisateur blank-check-requester@
de demander n'importe quel certificat sans aucune restriction, créez une liaison IAM sans condition, accordant le rôle privateca.certificateRequester
à l'utilisateur.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
Où :
- La valeur de l'indicateur
--role
détermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour Certificate Authority Service, consultez la page Contrôle des accès avec IAM. - La valeur de l'indicateur
--member
détermine l'utilisateur auquel le rôle est attribué.
Tester les commandes des règles
Une fois que vous avez implémenté les stratégies IAM et l'émission de certificats, 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 mises en œuvre dans 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
Où :
- POOL_NAME est l'identifiant unique du pool d'autorités de certification.
Pour en savoir plus sur la commande gcloud privateca pools get-iam-policy
, consultez 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, et 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
--issuer-location
permet de définir l'emplacement du certificat. Pour obtenir la liste complète des emplacements, consultez Emplacements. - L'option
--issuer-pool
définit le pool d'autorités de certification à partir duquel le certificat est demandé. - L'option
--dns-san
permet de définir un ou plusieurs réseaux SAN DNS séparés par une virgule. - L'option
--generate-key
déclenche la génération d'une nouvelle clé privée RSA-2048 sur votre ordinateur. - L'option
--key-output-file
permet de définir le chemin d'accès à l'écriture de la clé privée générée (au format PEM). - L'option
--cert-output-file
permet de définir le chemin d'accès où est écrit le fichier de chaîne de certificat encodé au format PEM (classé de l'entité de fin à la racine). - L'option
--template
permet 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 émettrices. Pour en savoir plus sur les modèles de certificat, consultez la page Présentation des modèles de certificats et des règles d'émission.
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. --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-location
permet de définir l'emplacement du certificat. Pour obtenir la liste complète des emplacements, consultez Emplacements. - L'option
--issuer-pool
définit le pool d'autorités de certification à partir duquel le certificat est demandé. - L'option
--dns-san
permet de définir un ou plusieurs réseaux SAN DNS séparés par une virgule. - L'option
--generate-key
déclenche la génération d'une nouvelle clé privée RSA-2048 sur votre ordinateur. - L'option
--key-output-file
permet de définir le chemin d'accès à l'écriture de la clé privée générée (au format PEM). - L'option
--cert-output-file
permet de définir le chemin d'accès où est écrit le fichier de chaîne de certificat encodé au format PEM (classé de l'entité de fin à la racine). - L'option
--template
permet 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 émettrices. Pour en savoir plus sur les modèles de certificat, consultez la page Présentation des modèles de certificats et des règles d'émission.
Générer des certificats à usage général
L'utilisateur blank-check-requester@
peut demander n'importe quel certificat du pool d'autorités de certification à l'aide de la commande gcloud privateca certificates create
.
Pour demander un certificat à partir d'un pool d'autorités de certification, vous pouvez utiliser une clé publique/privée créée par le service CA. Pour en savoir plus sur la demande de certificats, consultez Demander un certificat et afficher le certificat émis.
Effectuer un nettoyage
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
, utilisez la commande gcloud
suivante:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Où :
- La valeur de l'indicateur
--role
détermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour Certificate Authority Service, consultez la page Contrôle des accès avec IAM. - La valeur de l'option
--member
détermine l'utilisateur qui se voit attribuer le rôle.
Lorsque vous supprimez une liaison IAM spécifique, vous devez fournir toutes les informations la concernant dans la commande gcloud privateca pools remove-iam-policy-binding
. Un rôle et un membre peuvent avoir plusieurs liaisons IAM avec des conditions différentes. Il est important que vous fournissiez tous les détails concernant la liaison IAM pour éviter de supprimer accidentellement une autre liaison.
Pour plus d'informations sur la commande gcloud privateca pools remove-iam-policy-binding
, consultez la page 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 la concernant. 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 pour l'utilisateur 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
Où :
- La valeur de l'indicateur
--role
détermine le rôle attribué à l'utilisateur. Pour en savoir plus sur les rôles et les autorisations IAM pour le service CA, consultez la page Contrôle des accès avec IAM. - La valeur de l'option
--member
détermine l'utilisateur qui se voit attribuer le rôle.