Common Expression Language verwenden
Auf dieser Seite wird beschrieben, wie Sie Common Expression Language (CEL) mit Richtlinien für die Zertifikatsausstellung, Zertifikatsvorlagen und IAM-Bedingungen (Identity and Access Management) in Ihrem Zertifizierungsstellenpool verwenden können.
Übersicht
Common Expression Language (CEL) ist eine Open-Source-Sprache ohne Turing-Vollständigkeit, die gängige Semantik für die Ausdrucksbewertung implementiert. Der Certificate Authority Service unterstützt CEL, um verschiedene Richtliniensteuerungen für die Zertifikatsausstellung durchzusetzen.
Es gibt zwei CEL-Dialekte, die mit dem CA-Dienst verwendet werden können:
- Ein flexibler Dialekt, der in den Zertifikatsausstellungsrichtlinien und Zertifikatsvorlagen eines CA-Pools verwendet werden kann.
- Ein eingeschränkterer Dialekt, der in IAM-Bedingungen verwendet werden kann.
CEL-Dialekt für Richtlinien zur Zertifikatsausstellung und Zertifikatsvorlagen
Wenn Sie einen CA-Pool oder eine Zertifikatvorlage erstellen, können Sie einen CEL-Ausdruck als Teil der Einschränkungen für die Zertifikatsidentität angeben. Mit dem CEL-Ausdruck können Sie die Felder „Subject“ und „Subject Alternative Name“ (SAN) validieren.
Weitere Informationen zu Ausstellungsrichtlinien finden Sie unter CA-Pool eine Zertifikatsausstellungsrichtlinie hinzufügen.
Weitere Informationen zu Zertifikatsvorlagen finden Sie unter Übersicht über Zertifikatsvorlagen und Richtlinien zur Ausstellung.
Der CEL-Dialekt für die Identitätsbeschränkungen von CA-Pools und Zertifikatvorlagen stellt die folgenden Variablen für den Zugriff auf und die Validierung der Felder „Subject“ und „SAN“ bereit:
- Betreff:
subject
- SAN:
subject_alt_names
Betreff
Sie können alle Felder im Domainnamen des Zertifikatsinhabers (einschließlich des allgemeinen Namens) wie im Zertifikatsantrag angegeben mit einer Variablen vom Typ Subject
und dem Namen subject
validieren.
Subject
ist eine Struktur mit den folgenden Feldern:
Typ | Name |
---|---|
String |
common_name |
String |
country_code |
String |
Organisation |
String |
organizational_unit |
String |
Ort |
String |
Provinz |
String |
street_address |
String |
postal_code |
Subject Alternative Names (SANs)
Sie können alle SANs, die in der Zertifikatsanfrage angegeben sind, mit der Variablen subject_alt_names
validieren. Die Variable subject_alt_names
enthält eine Liste von SAN-Structs, wobei jedes SAN vom Typ SubjectAltName
ist.
SubjectAltName
ist ein Typ mit den folgenden Feldern:
Typ | Name |
---|---|
String |
Wert |
[]Int32 |
oid |
Enum |
Typ |
Sie können die folgenden Werte für den SubjectAltName
-Typ verwenden:
DNS
URI
EMAIL
IP_ADDRESS
CUSTOM
Die Variable subject_alt_names
enthält eine Liste mit allen angeforderten SANs.
Sie können die folgenden Makros für SANs verwenden:
subject_alt_names.all(san, predicate)
subject_alt_names.exists(san, predicate)
subject_alt_names.exists_one(san, predicate)
subject_alt_names.filter(san, predicate)
Weitere Informationen zu Makros finden Sie unter Sprachdefinition: Makros.
Beispielausdrücke
Für einen bestimmten gängigen Namen und eine Reihe von Ländern sorgen
subject.common_name == "google.com" && (subject.country_code == "US" || subject.country_code == "IR")
Prüfen, ob alle DNS-Namen mit einem benutzerdefinierten String enden
subject_alt_names.all(san, san.type == DNS && san.value.endsWith(".test.com"))
Prüfen, ob alle SANs vom Typ DNS oder EMAIL sind
subject_alt_names.all(san, san.type == DNS || san.type == EMAIL )
Prüfen, ob nur eine benutzerdefinierte SAN mit einer bestimmten OID vorhanden ist
subject_alt_names.size() == 1 && subject_alt_names[0].oid == [1, 2, 3, 5, 17]
Prüfen, ob benutzerdefinierte SANs nur eine Reihe von OIDs sind
subject_alt_names.all(san, san.oid == [1, 2, 4, 5, 55] || san.oid == [1, 2, 4, 5, 54])
CEL-Dialekt für IAM-Richtlinien
Mit IAM-Bedingungen können Sie IAM-Rollenbindungen einem Bedingungsausdruck unterwerfen. Wenn die Bedingung true
ergibt, ist die IAM-Rollenbindung wirksam. Andernfalls wird sie ignoriert. Mit CA Service können Sie einem CA-Pool bedingte IAM-Bindungen hinzufügen.
Die IAM-Bedingung ist ein CEL-Ausdruck, der auf eine Reihe kontextbezogener Attribute zur Anfrage verweist und als boolescher Wert ausgewertet wird. Nutzer legen Bedingungen für die Rollenbindungen in einer IAM-Richtlinie fest. Diese wird von IAM gespeichert und ausgewertet, um zu prüfen, ob der Vorgang zulässig ist.
Weitere Informationen zu IAM-Bedingungen finden Sie in der Übersicht über IAM-Bedingungen.
Die folgenden Attribute werden bei der CEL-Bewertung von IAM-Bedingungen freigegeben:
privateca.googleapis.com/subject
Der
privateca.googleapis.com/subject
ist unterapi.getAttribute('privateca.googleapis.com/subject', {})
zugänglich.
Typ | Beschreibung |
---|---|
map{string, string} |
Dieses Feld enthält den Distinguished Name des Eigentümers (einschließlich des Common Name), wie er in der eingehenden Zertifikatsanfrage angegeben ist. Beispiel { |
privateca.googleapis.com/subject_alt_names
Der
privateca.googleapis.com/subject_alt_names
ist unterapi.getAttribute('privateca.googleapis.com/subject_alt_names', [])
zugänglich.
Typ | Beschreibung |
---|---|
list{string} |
Dieses Feld enthält alle angeforderten SANs, wie in der eingehenden Zertifikatsanfrage angegeben. Jede der angeforderten SANs hat ein Präfix mit ihrem Typ. SANs mit unbekannten Typen werden mit der serialisierten OID des Typs vorangestellt. Beispiel { |
privateca.googleapis.com/template
Der
privateca.googleapis.com/template
ist unterapi.getAttribute('privateca.googleapis.com/template', '')
zugänglich.
Typ | Beschreibung |
---|---|
String |
Die verwendete Zertifikatsvorlage, falls vorhanden. Das Format ist {project_id}/-/{template_id} .Beispiel: my-project-pki/-/workload_tls |
Der in der IAM-Bedingung angegebene Vorlagenname muss mit dem Vorlagennamen in der Zertifikatsanfrage übereinstimmen. Wenn Sie also im privateca.googleapis.com/template
-Attribut des CEL-Ausdrucks eine Projekt-ID angeben, müssen Sie auch beim Anfordern des Zertifikats eine Projekt-ID angeben. Wenn Sie im CEL-Ausdruck eine Projektnummer angeben, müssen Sie auch in der Zertifikatsanfrage eine Projektnummer angeben.
Beispielausdrücke
Achten Sie darauf, dass für alle Personen die Organisation „Beispiel“ und der Ländercode US
oder UK
festgelegt ist.
api.getAttribute('privateca.googleapis.com/subject', {})['organization'] == 'Example' &&
api.getAttribute('privateca.googleapis.com/subject', {})['country_code'] in ['US', 'UK']
Prüfen, ob die Zertifikatsanfrage nur die angegebenen DNS-SANs enthält
api.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.hasOnly(['dns:sample1.prod.example.com', 'dns:sample2.prod.example.com'])
Dafür sorgen, dass alle Zertifikate eine bestimmte Vorlage verwenden
api.getAttribute('privateca.googleapis.com/template', '') == 'my-project-pki/-/leaf-server-tls'
Nächste Schritte
- Einführung in CEL
- Weitere Informationen zur Sprachdefinition für CEL
- Weitere Informationen zu Zertifikatvorlagen und Ausstellungsrichtlinien
- Lesen Sie die Übersicht über IAM-Bedingungen.
- Weitere Informationen zum Hinzufügen einer Richtlinie zur Zertifikatausstellung zu einem CA-Pool