Common Expression Language verwenden
Auf dieser Seite wird beschrieben, wie Sie die Common Expression Language (CEL) mit Richtlinien für die Zertifikatsausstellung, Zertifikatsvorlagen und IAM-Bedingungen (Identity and Access Management) in Ihrem Zertifizierungsstellenpool verwenden können.
Überblick
Common Expression Language (CEL) ist eine Open-Source-Nicht-Turing-Komplettsprache, die eine gemeinsame Semantik für die Auswertung von Ausdrücken implementiert. Certificate Authority Service unterstützt CEL, um verschiedene Richtlinienkontrollen für die Zertifikatsausstellung durchzusetzen.
Es gibt zwei CEL-Dialekte, die mit CA Service verwendet werden können:
- Ein flexibler Dialekt, der in den Zertifikatsausstellungsrichtlinien und Zertifikatsvorlagen eines Zertifizierungsstellenpools verwendet werden kann.
- Ein begrenzter Dialekt, der in IAM-Bedingungen verwendet werden kann.
CEL-Dialekt für Zertifikatsausstellungsrichtlinien und Zertifikatsvorlagen
Beim Erstellen eines Zertifizierungsstellenpools oder einer Zertifikatsvorlage 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 Alternative“ (Betreff) und „Subject Alternative Name“ (SAN) validieren.
Weitere Informationen zu Ausstellungsrichtlinien finden Sie unter Einem CA-Pool eine Zertifikatsausstellungsrichtlinie hinzufügen.
Weitere Informationen zu Zertifikatsvorlagen finden Sie unter Zertifikatvorlagen und Ausstellungsrichtlinien.
Der CEL-Dialekt für die Identitätsbeschränkungen von CA-Pools und Zertifikatsvorlagen stellt die folgenden Variablen für den Zugriff auf und die Validierung der Betreff- und SAN-Felder bereit:
- Betreff:
subject
- SAN:
subject_alt_names
Betreff
Sie können alle Felder im Domainnamen eines Zertifikats, einschließlich des allgemeinen Namens, wie in der Zertifikatsanfrage angegeben, mit einer Variablen vom Typ Subject
und dem Namen subject
validieren.
Subject
ist eine Struktur, die die folgenden Felder enthält:
Typ | Name |
---|---|
String |
common_name |
String |
country_code |
String |
Organisation |
String |
organizational_unit |
String |
Ort |
String |
Provinz |
String |
street_address |
String |
postal_code |
Alternative Antragstellernamen (SANs)
Sie können alle in der Zertifikatsanfrage angegebenen SANs mit der Variablen subject_alt_names
validieren. Die Variable subject_alt_names
enthält eine Liste von SAN-Strukturen, wobei jedes SAN vom Typ SubjectAltName
ist.
SubjectAltName
ist eine Struktur, die die folgenden Felder enthält:
Typ | Name |
---|---|
String |
Wert |
[]Int32 |
Oid |
Enum |
Typ |
Sie können die folgenden Werte für den Typ SubjectAltName
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
Ein spezifischen Klarnamen und eine Gruppe von Ländern sicherstellen
subject.common_name == "google.com" && (subject.country_code == "US" || subject.country_code == "IR")
Dafür sorgen, dass alle DNS-Namen mit einem benutzerdefinierten String enden
subject_alt_names.all(san, san.type == DNS && san.value.endsWith(".test.com"))
Dafür sorgen, dass alle SANs vom Typ DNS oder EMAIL sind
subject_alt_names.all(san, san.type == DNS || san.type == EMAIL )
Nur ein benutzerdefiniertes SAN mit einer bestimmten OID sicherstellen
subject_alt_names.size() == 1 && subject_alt_names[0].oid == [1, 2, 3, 5, 17]
Sicherstellen, dass benutzerdefinierte SANs nur aus einer Reihe von OIDs bestehen
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
Verwenden Sie IAM-Bedingungen, um IAM-Rollenbindungen an einen bedingten Ausdruck zu 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 von Kontextattributen für die Anfrage verweist und einen booleschen Wert ergibt. Nutzer legen Bedingungen für die Rollenbindungen in einer IAM-Richtlinie fest, die von IAM gespeichert und ausgewertet wird, um festzustellen, ob der demnächst auszuführende Vorgang zulässig ist.
Weitere Informationen zu IAM-Bedingungen finden Sie unter Übersicht über IAM-Bedingungen.
Die folgenden Attribute werden während der CEL-Auswertung von IAM-Bedingungen verfügbar gemacht:
privateca.googleapis.com/subject
Auf
privateca.googleapis.com/subject
kann alsapi.getAttribute('privateca.googleapis.com/subject', {})
zugegriffen werden.
Typ | Beschreibung |
---|---|
map{string, string} |
Dieses Feld enthält den Subjekt-Distinguished Name (einschließlich des gemeinsamen Namens), wie in der eingehenden Zertifikatsanfrage angegeben. Beispiel { |
privateca.googleapis.com/subject_alt_names
Auf
privateca.googleapis.com/subject_alt_names
kann alsapi.getAttribute('privateca.googleapis.com/subject_alt_names', [])
zugegriffen werden.
Typ | Beschreibung |
---|---|
list{string} |
Dieses Feld enthält alle angeforderten SANs, wie in der eingehenden Zertifikatsanfrage angegeben. Jedem der angeforderten SANs ist sein Typ vorangestellt. SANs mit unbekannten Typen wird die serialisierte OID des Typs vorangestellt. Beispiel { |
privateca.googleapis.com/template
Auf
privateca.googleapis.com/template
kann alsapi.getAttribute('privateca.googleapis.com/template', '')
zugegriffen werden.
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 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.
Beispielausdrücke
Es wird sichergestellt, dass für alle Fächer die Organisation als 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']
Sicherstellen, dass 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'])
Sicherstellen, 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 Zertifikatsvorlagen und Ausstellungsrichtlinien
- Übersicht über IAM-Bedingungen
- Einem CA-Pool eine Zertifikatsausstellungsrichtlinie hinzufügen