Gebräuchliche Ausdruckssprache verwenden
Auf dieser Seite wird beschrieben, wie Sie die Common Expression Language (CEL) mit Richtlinien für die Zertifikatsausstellung, Zertifikatsvorlagen und Bedingungen für die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) für Ihren CA-Pool verwenden können.
Übersicht
Common Expression Language (CEL) ist eine Open-Source-Sprache, die nicht Turing-vollständig ist und gängige Semantiken für die Ausdrucksbewertung implementiert. Certificate Authority Service unterstützt CEL, um verschiedene Richtlinienkontrollen für die Zertifikatsausstellung zu erzwingen.
Es gibt zwei CEL-Dialekte, die mit dem CA-Dienst verwendet werden können:
- Ein flexibler Dialekt, der in den Richtlinien für die Zertifikatsausstellung und in den Zertifikatsvorlagen eines CA-Pools verwendet werden kann.
- Ein eingeschränkter 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“ (Betreff) 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 Zertifikatvorlagen und Ausstellungsrichtlinien
Der CEL-Dialekt für die Identitätseinschränkungen von CA-Pools und Zertifikatsvorlagen stellt die folgenden Variablen für den Zugriff und die Validierung der Betreff- und SAN-Felder bereit:
- Betreff:
subject
- SAN:
subject_alt_names
Betreff
Sie können, wie in der Zertifikatsanfrage angegeben, alle Felder im Antragsteller-Domainnamen (einschließlich des allgemeinen Namens) eines Zertifikats validieren. Dazu verwenden Sie eine Variable vom Typ Subject
und den Namen subject
.
Subject
ist eine Struktur mit den folgenden Feldern:
Typ | Name |
---|---|
String |
common_name |
String |
country_code |
String |
Organisation |
String |
organizational_unit |
String |
Ort |
String |
Bundesland |
String |
street_address |
String |
postal_code |
Subject Alternative Names (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-Structs, wobei jedes SAN vom Typ SubjectAltName
ist.
SubjectAltName
ist ein Typ, der die folgenden Felder enthält:
Typ | Name |
---|---|
String |
Wert |
[]Int32 |
oid |
Enum |
Typ |
Für den Typ SubjectAltName
können die folgenden Werte verwendet werden:
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")
Sicherstellen, dass 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]
Dafür sorgen, dass benutzerdefinierte SANs nur ein Satz 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
Verwenden Sie IAM-Bedingungen, um IAM-Rollenbindungen einem bedingten Ausdruck zu unterziehen. 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, die von IAM gespeichert und ausgewertet wird, um festzustellen, ob der gerade auszuführende 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 Subjekts (einschließlich des allgemeinen Namens), wie in der eingehenden Zertifikatsanfrage angegeben. Beispiel { |
privateca.googleapis.com/subject_alt_names
privateca.googleapis.com/subject_alt_names
ist alsapi.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. Jedem der angeforderten SANs ist sein Typ vorangestellt. 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 übereinstimmen
in der Zertifikatsanfrage. 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
Sicherstellen, dass alle Subjekte als „Beispiel“ organisiert sind und der Ländercode auf US
oder UK
festgelegt
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'])
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 Zertifikatvorlagen und Ausstellungsrichtlinien
- Lesen Sie die Übersicht über IAM-Bedingungen.
- Weitere Informationen zum Hinzufügen einer Richtlinie zur Zertifikatsausstellung zu einem CA-Pool