Anleitung: Richtlinien verwalten
In dieser Anleitung erfahren Sie, wie Sie Richtlinienkontrollen für Certificate Authority Service-Ressourcen implementieren.
Lernziele
Diese Anleitung enthält Informationen zum Konfigurieren eines freigegebenen CA-Pools für die Ausstellung von DNS-Zertifikaten mit den folgenden Richtlinienkontrollen:
- Der Nutzer
prod-dns-requester
kann TLS-Zertifikate des Endentitätsservers für die Domain*.prod.example.com
anfordern. - Der Nutzer
test-dns-requester
kann TLS-Zertifikate des Endentitätsservers für die Domain*.test.example.com
anfordern. - Der Nutzer
blank-check-requester
kann jede Art von Zertifikat aus dem CA-Pool anfordern.
In dieser Anleitung werden die Zertifikatsausstellungsrichtlinie eines Zertifizierungsstellenpools, Zertifikatsvorlagen und bedingte IAM-Bindungen verwendet, um dieses Szenario zu erreichen.
Hinweise
- Informieren Sie sich über die verschiedenen Richtlinienkontrollen, die von CA Service angeboten werden.
- Zertifikatvorlagen erstellen
- Informieren Sie sich über die Zertifikatsprofile, die Sie für verschiedene Szenarien der Zertifikatsausstellung verwenden können.
- Lesen Sie, wie Sie mit der Common Expression Language (CEL) verschiedene Richtlinienkontrollen für die Zertifikatsausstellung erzwingen können.
- Lesen Sie, wie Sie eine Zertifikatsausstellung verwenden können.
- Lesen Sie, wie Sie IAM-Richtlinien konfigurieren, ändern und entfernen, um CA Service-Ressourcen zu erstellen und zu verwalten.
CA-Pool erstellen
Folgen Sie dieser Anleitung, um einen Zertifizierungsstellenpool zu erstellen:
Erstellen Sie mit dem folgenden
gcloud
-Befehl einen Zertifizierungsstellenpool, der die Dateiissuance-policy.yaml
verwendet:gcloud
gcloud privateca pools create POOL_NAME \ --tier=ENTERPRISE
Wobei:
- Das Flag
--tier
wird verwendet, um die Stufe des Zertifizierungsstellenpools anzugeben. Weitere Informationen zu Stufen finden Sie unter Vorgangsstufen auswählen.
- Das Flag
Verwenden Sie den folgenden
gcloud
-Befehl, um eine Zertifizierungsstelle mit von Google verwalteten Ressourcen im neu erstellten Zertifizierungsstellenpool zu erstellen: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
Wobei:
- POOL_NAME ist die eindeutige Kennung des Zertifizierungsstellenpools.
- Das Flag
--subject
wird verwendet, um den Namen des Zertifikatsinhabers zu übergeben. - Das Flag
--validity
bestimmt den Gültigkeitszeitraum der Zertifizierungsstelle. Der standardmäßige Gültigkeitszeitraum beträgt 10 Jahre. - Das Flag
--max-chain-length
bestimmt die maximale Tiefe untergeordneter Zertifizierungsstellen, die für eine Zertifizierungsstelle zulässig sind. - Das Flag
--auto-enable
erstellt die Zertifizierungsstelle im StatusENABLED
und nicht im StatusSTAGED
. Weitere Informationen zu CA-Status finden Sie unter CA-Status.
Richtlinienkontrollen für Testzertifikate konfigurieren
Die Änderungen an der Ausstellungsrichtlinie treten sofort in Kraft. Wir empfehlen Ihnen, Testrichtlinien zu konfigurieren, bevor Sie sie für die Produktion verwenden. In diesem Abschnitt wird beschrieben, wie Sie Testrichtlinien-Steuerelemente konfigurieren können.
Sowohl für die Test- als auch für die Produktions-DNS-Vorlage müssen dieselben vordefinierten Werte für Server-TLS-Zertifikate verwendet werden. Erstellen Sie eine YAML-Datei leaf_server_tls_predefined_values.yaml
und kopieren Sie die folgende TLS-Konfiguration des Endentitätsservers in die Datei.
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
Richtliniensteuerungen für DNS-Testzertifikate konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie Richtlinien festlegen können, um dem Nutzer test-dns-requester
zu erlauben, TLS-Zertifikate des Endentitätsservers für DNS in der Domain *.test.example.com
anzufordern.
DNS-Zertifikatsvorlage für Testzertifikate erstellen
In diesem Abschnitt wird beschrieben, wie Sie eine Zertifikatsvorlage erstellen können, die die TLS-Konfiguration des Endentitätsservers enthält. Diese Zertifikatsvorlage beschränkt Zertifikate auf die Verwendung von DNS-SANs in der Domain *.test.example.com
. Diese Einschränkungen werden mithilfe eines CEL-Ausdrucks (Common Expression Language) implementiert. Außerdem löscht die Zertifikatsvorlage alle in der Zertifikatsanfrage angegebenen Themen.
Verwenden Sie den folgenden
gcloud
-Befehl, um die Zertifikatsvorlage zu erstellen, die die TLS-Erweiterungen des Endentitätsservers enthält, in der Zertifikatsanfrage angegebenesubject
verworfen und zulässige SANs begrenzt.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'))"
Wobei:
- Das Flag
--predefined-values-file
wird verwendet, um eine YAML-Datei zu übergeben, in der alle vordefinierten X.509-Werte beschrieben werden, die von der Zertifikatsvorlage festgelegt wurden. - Mit dem Flag
--no-copy-subject
werden alle vom Aufrufer angegebenen Themen aus der Zertifikatsanfrage gelöscht. - Das Flag
--copy sans
sorgt dafür, dass die SAN-Erweiterung aus der Zertifikatsanfrage in das signierte Zertifikat kopiert wird. - Das Flag
--identity-cel-expression
wird verwendet, um einen CEL-Ausdruck zu übergeben, der anhand der Identität im Zertifikat ausgewertet wird, bevor es ausgestellt wird. Weitere Informationen zur Verwendung von CEL-Ausdrücken für die Implementierung verschiedener Richtlinienkontrollen finden Sie unter CEL verwenden.
Weitere Informationen zum Erstellen von Zertifikatsvorlagen finden Sie unter Zertifikatvorlage erstellen.
- Das Flag
IAM-Bindungen für DNS-Testzertifikate erstellen
Wenn Sie dem Nutzer test-dns-requester@
im DNS-CA-Pool erlauben möchten, TLS-Zertifikate von Testservern anzufordern, erstellen Sie eine bedingte IAM-Bindung für den CA-Pool. Weisen Sie dem Nutzer test-dns-requester@
nur dann die Rolle privateca.certificateRequester
zu, wenn die Zertifikatsanfrage einen Verweis auf die Vorlage test-server-tls-template
enthält. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM.
Erstellen Sie eine YAML-Richtliniendatei
test_dns_condition.yaml
und kopieren Sie die folgende TLS-Konfiguration in die Datei.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"
Der in der IAM-Bedingung angegebene Vorlagenname muss mit dem Vorlagennamen in der Zertifikatsanfrage übereinstimmen. Wenn Sie also im Attribut
privateca.googleapis.com/template
des CEL-Ausdrucks eine Projekt-ID angeben, müssen Sie beim Anfordern des Zertifikats auch eine Projekt-ID angeben. Wenn Sie im CEL-Ausdruck eine Projektnummer angeben, müssen Sie auch in der Zertifikatsanfrage eine Projektnummer angeben.Verwenden Sie den folgenden
gcloud
-Befehl, um Richtliniensteuerungen hinzuzufügen, die estest-dns-requester@
erlauben, TLS-Zertifikate für Produktionstests nur vom CA-Pool anzufordern.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
Wobei:
- Das Flag
--role
wird verwendet, um den Rollennamen zu übergeben, der einem Mitglied zugewiesen werden soll. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Das Flag
--member
wird verwendet, um das Mitglied zu übergeben, für das die Bindung hinzugefügt werden soll. - Das Flag
condition-from-file
wird verwendet, um den Namen der Datei mit der CEL-Bedingung zu übergeben.
- Das Flag
Verwenden Sie die folgende
gcloud
, um Richtliniensteuerelemente hinzuzufügen, die estest-dns-requester@
ermöglichen, die Zertifikatsvorlage „test-server-tls-template“ zu verwenden.gcloud
gcloud privateca templates add-iam-policy-binding test-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:test-dns-requester@'
Wobei:
- Das Flag
--role
wird verwendet, um den Rollennamen zu übergeben, der einem Mitglied zugewiesen werden soll. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Das Flag
--member
wird verwendet, um das Mitglied zu übergeben, für das die Bindung hinzugefügt werden soll.
Weitere Informationen zum Konfigurieren von IAM-Richtlinien finden Sie unter IAM-Richtlinien konfigurieren.
- Das Flag
Richtlinienkontrollen für Produktionszertifikate konfigurieren
Nachdem Sie die Richtlinien getestet haben, können Sie sie in Ihrer Produktionsumgebung verwenden.
Richtliniensteuerungen für DNS-Produktionszertifikate konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie Richtlinieneinstellungen festlegen können, um dem Nutzer prod-dns-requester
zu erlauben, TLS-Zertifikate von Endentitäten für die DNS-Domain .prod.example.com
anzufordern.
Zertifikatsvorlage für DNS-Produktionszertifikate erstellen
Folgen Sie der folgenden Anleitung, um eine Zertifikatsvorlage zu erstellen, die die TLS-Konfiguration des Endentitätsservers enthält. Diese Zertifikatsvorlage beschränkt Zertifikate auf die Verwendung von DNS-SANs in der Domain *.prod.example.com
. Diese Einschränkungen werden mithilfe eines CEL-Ausdrucks (Common Expression Language) implementiert. Außerdem löscht die Zertifikatsvorlage alle in der Zertifikatsanfrage angegebenen Themen.
Erstellen Sie mit dem folgenden gcloud
-Befehl eine Zertifikatsvorlage prod-server-tls-template
.
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'))"
Wobei:
- Das Flag
--predefined-values-file
wird verwendet, um eine YAML-Datei zu übergeben, in der alle vordefinierten X.509-Werte beschrieben werden, die von der Zertifikatsvorlage festgelegt wurden. - Mit dem Flag
--no-copy-subject
werden alle vom Aufrufer angegebenen Themen aus der Zertifikatsanfrage gelöscht. - Das Flag
--copy sans
sorgt dafür, dass die SAN-Erweiterung aus der Zertifikatsanfrage in das signierte Zertifikat kopiert wird. - Das Flag
--identity-cel-expression
wird verwendet, um einen CEL-Ausdruck zu übergeben, der anhand der Identität im Zertifikat ausgewertet wird, bevor es ausgestellt wird. Weitere Informationen zu CEL-Ausdrücken finden Sie unter CEL-Ausdrücke verwenden.
Weitere Informationen zum Erstellen von Zertifikatsvorlagen finden Sie unter Zertifikatvorlage erstellen.
Weitere Informationen zum Befehl gcloud privateca templates create
finden Sie unter gcloud privateca Vorlagen create.
DNS-IAM-Bindung für Produktion erstellen
Wenn Sie dem Nutzer prod-dns-requester@
im DNS-CA-Pool erlauben möchten, TLS-Zertifikate des Produktionsservers anzufordern, erstellen Sie eine bedingte IAM-Bindung für den CA-Pool. Weisen Sie dem Nutzer prod-dns-requester@
nur dann die Rolle privateca.certificateRequester
zu, wenn die Zertifikatsanfrage einen Verweis auf die Vorlage prod-server-tls-template
enthält. Weitere Informationen zu IAM-Rollen und -Berechtigungen finden Sie unter Zugriffssteuerung mit IAM.
Erstellen Sie eine YAML-Richtliniendatei
prod_dns_condition.yaml
und kopieren Sie die folgende TLS-Konfiguration in die Datei.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"
Verwenden Sie den folgenden
gcloud
-Befehl, um Richtliniensteuerungen hinzuzufügen, die esprod-dns-requester@
erlauben, ausschließlich TLS-Zertifikate des Produktionsservers vom CA-Pool anzufordern.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
Wobei:
- Das Flag
--role
wird verwendet, um den Rollennamen zu übergeben, der einem Mitglied zugewiesen werden soll. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Das Flag
--member
wird verwendet, um das Mitglied zu übergeben, für das die Bindung hinzugefügt werden soll. - Das Flag
condition-from-file
wird verwendet, um den Namen der Datei mit der CEL-Bedingung zu übergeben.
Weitere Informationen zum Befehl
gcloud privateca pools add-iam-policy-binding
finden Sie unter gcloud privateca channels add-iam-policy-binding.- Das Flag
Verwenden Sie den folgenden
gcloud
-Befehl, um Richtliniensteuerungen hinzuzufügen, dieprod-dns-requester@
erlauben, die Zertifikatsvorlage „prod-server-tls-template“ zu verwenden:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'
Wobei:
- Das Flag
--role
wird verwendet, um den Rollennamen zu übergeben, der einem Mitglied zugewiesen werden soll. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Das Flag
--member
wird verwendet, um das Mitglied zu übergeben, für das die Bindung hinzugefügt werden soll.
- Das Flag
Uneingeschränkte Nutzerrichtliniensteuerung
Damit der Nutzer blank-check-requester@
jedes Zertifikat ohne Einschränkungen anfordern kann, erstellen Sie eine IAM-Bindung ohne Bedingungen, denen die Rolle privateca.certificateRequester
zugewiesen wird.
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
Wobei:
- Der Wert des Flags
--role
bestimmt die Rolle, die dem Nutzer zugewiesen ist. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Der Wert des Flags
--member
bestimmt den Nutzer, dem die Rolle zugewiesen ist.
Richtlinienkontrollen testen
Nachdem Sie die Richtlinien für die Zertifikatsausstellung und die IAM-Richtlinien implementiert haben, sollten Sie diese Richtlinien unbedingt prüfen und testen, um sicherzustellen, dass sie wie erwartet funktionieren.
Alle Richtlinienbindungen abrufen
Rufen Sie alle IAM-Richtlinien ab, die in Ihrem Zertifizierungsstellenpool implementiert sind. Verwenden Sie den Befehl gcloud privateca pools get-iam-policy
, um alle IAM-Richtlinien für den Zertifizierungsstellenpool abzurufen:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME
Wobei:
- POOL_NAME ist die eindeutige Kennung des Zertifizierungsstellenpools.
Weitere Informationen zum Befehl gcloud privateca pools get-iam-policy
finden Sie unter gcloud privatecapools get-iam-policy.
Zertifikate werden generiert
Dieser Abschnitt enthält Informationen zum Generieren von allgemeinen Zertifikaten sowie Test- und Produktions-DNS-Zertifikaten.
DNS-Testzertifikate generieren
Verwenden Sie den folgenden gcloud
-Befehl, um dem Nutzer test-dns-requester@
zu erlauben, Test-DNS-Zertifikate aus dem CA-Pool anzufordern:
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
Wobei:
- Mit dem Flag
--issuer-location
wird der Speicherort des Zertifikats festgelegt. Eine vollständige Liste der Standorte finden Sie unter Standorte. - Das Flag
--issuer-pool
legt den CA-Pool fest, von dem das Zertifikat angefordert wird. - Das Flag
--dns-san
wird verwendet, um ein oder mehrere durch Kommas getrennte DNS-SANs festzulegen. - Das Flag
--generate-key
löst die Generierung eines neuen privaten RSA-2048-Schlüssels auf Ihrem Computer aus. - Mit dem Flag
--key-output-file
wird der Pfad festgelegt, in den der generierte private Schlüssel im PEM-Format geschrieben wird. - Mit dem Flag
--cert-output-file
wird der Pfad festgelegt, in den die resultierende PEM-codierte Zertifikatskettendatei geschrieben wird (geordnet von der Endentität zum Stamm). - Mit dem Flag
--template
wird der Name der Zertifikatsvorlage festgelegt, die Sie für die Ausstellung dieses Zertifikats verwenden möchten. Die angegebene Vorlage muss sich am selben Speicherort wie der ausstellende CA-Pool befinden. Weitere Informationen zu Zertifikatsvorlagen finden Sie unter Zertifikatvorlagen und Ausstellungsrichtlinien.
Produktionszertifikate generieren
Der Nutzer prod-dns-requester
kann jetzt DNS-Produktionszertifikate vom CA-Pool anfordern. Der --dns-san=foo.bar.prod.example.com
fügt der Zertifikatsanfrage ein SAN vom Typ DNS mit dem angegebenen Wert hinzu.
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
Wobei:
- Mit dem Flag
--issuer-location
wird der Speicherort des Zertifikats festgelegt. Eine vollständige Liste der Standorte finden Sie unter Standorte. - Das Flag
--issuer-pool
legt den CA-Pool fest, von dem das Zertifikat angefordert wird. - Das Flag
--dns-san
wird verwendet, um ein oder mehrere durch Kommas getrennte DNS-SANs festzulegen. - Das Flag
--generate-key
löst die Generierung eines neuen privaten RSA-2048-Schlüssels auf Ihrem Computer aus. - Mit dem Flag
--key-output-file
wird der Pfad festgelegt, in den der generierte private Schlüssel im PEM-Format geschrieben wird. - Mit dem Flag
--cert-output-file
wird der Pfad festgelegt, in den die resultierende PEM-codierte Zertifikatskettendatei geschrieben wird (geordnet von der Endentität zum Stamm). - Mit dem Flag
--template
wird der Name der Zertifikatsvorlage festgelegt, die für die Ausstellung dieses Zertifikats verwendet werden soll. Die angegebene Vorlage muss sich am selben Speicherort wie der ausstellende CA-Pool befinden. Weitere Informationen zu Zertifikatsvorlagen finden Sie unter Zertifikatvorlagen und Ausstellungsrichtlinien.
Allgemeine Zertifikate generieren
Der Nutzer blank-check-requester@
kann mit dem Befehl gcloud privateca certificates create
ein beliebiges Zertifikat aus dem Zertifizierungsstellenpool anfordern.
Um ein Zertifikat von einem CA-Pool anzufordern, können Sie einen öffentlichen/privaten Schlüssel verwenden, der von CA Service erstellt wurde. Weitere Informationen zum Anfordern von Zertifikaten finden Sie unter Ein Zertifikat anfordern und ausgestelltes Zertifikat ansehen.
Bereinigen
In diesem Abschnitt wird erläutert, wie Sie IAM-Richtlinien über einen CA-Pool entfernen.
Bestimmte IAM-Bindung entfernen
Verwenden Sie den folgenden gcloud
-Befehl, um die bedingten IAM-Bindungen über den Zertifizierungsstellenpool für den Nutzer blank-check-requester
zu entfernen:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
Wobei:
- Der Wert des Flags
--role
bestimmt die Rolle, die dem Nutzer zugewiesen ist. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Der Wert des Flags
--member
bestimmt den Nutzer, dem die Rolle zugewiesen ist.
Wenn Sie eine bestimmte IAM-Bindung entfernen, müssen Sie alle Informationen im Zusammenhang mit der IAM-Bindung im Befehl gcloud privateca pools remove-iam-policy-binding
angeben. Eine Rolle und ein Mitglied können mehrere IAM-Bindungen mit unterschiedlichen Bedingungen haben. Es ist wichtig, dass Sie alle Details zur IAM-Bindung angeben, um nicht versehentlich eine andere Bindung zu löschen.
Weitere Informationen zum Befehl gcloud privateca pools remove-iam-policy-binding
finden Sie unter gcloud privatecapools remove-iam-policy-binding.
Alle bedingten IAM-Bindungen entfernen
Mit dem Befehl gcloud privateca pools remove-iam-policy-binding
können Sie eine IAM-Bindung entfernen. Wenn Sie eine bedingte IAM-Bindung entfernen, müssen Sie alle Informationen zur Bindung angeben. Ein Nutzer und eine Rolle können mehrere bedingte Bindungen haben. Verwenden Sie das Flag --all
im Befehl gcloud
, um alle bedingten Bindungen zu entfernen.
Verwenden Sie den folgenden gcloud
-Befehl, um alle Bindungen für den Nutzer prod-code-signing-requester
zu entfernen.
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
Wobei:
- Der Wert des Flags
--role
bestimmt die Rolle, die dem Nutzer zugewiesen ist. Weitere Informationen zu IAM-Rollen und Berechtigungen für CA Service finden Sie unter Zugriffssteuerung mit IAM. - Der Wert des Flags
--member
bestimmt den Nutzer, dem die Rolle zugewiesen ist.