Usa un linguaggio comune di espressione
In questa pagina viene descritto come utilizzare il linguaggio CEL (Common Expression Language) con i criteri di emissione dei certificati, i modelli di certificato e le condizioni IAM (Identity and Access Management) nel pool di CA.
Panoramica
Common Expression Language (CEL) è un linguaggio completo open source non di Turing che implementa una semantica comune per la valutazione delle espressioni. Certificate Authority Service supporta CEL per applicare vari controlli dei criteri per l'emissione dei certificati.
Con CA Service è possibile utilizzare due dialetti CEL:
- Un dialetto flessibile che può essere utilizzato nei criteri di emissione dei certificati e nei modelli di certificato di un pool di CA.
- Un dialetto più limitato che può essere utilizzato nelle condizioni IAM.
Dialetto CEL per i criteri di emissione dei certificati e i modelli di certificato
Quando crei un pool di CA o un modello di certificato, puoi specificare un'espressione CEL come parte dei vincoli di identità del certificato. L'espressione CEL consente di convalidare i campi Oggetto e Nome alternativo del soggetto (SAN).
Per ulteriori informazioni sui criteri di emissione, vedi Aggiungere un criterio di emissione dei certificati a un pool di CA.
Per ulteriori informazioni sui modelli di certificato, vedi Panoramica dei modelli di certificato e dei criteri di emissione.
Il dialetto CEL per i vincoli di identità dei pool di CA e dei modelli di certificato espone le seguenti variabili per l'accesso e la convalida dei campi soggetto e SAN:
- Oggetto:
subject
- SAN:
subject_alt_names
Oggetto
Puoi convalidare tutti i campi nel nome di dominio oggetto di un certificato (incluso il nome comune), come specificato nella richiesta di certificato utilizzando una variabile di tipo Subject
e nome subject
.
Subject
è una struttura che contiene i seguenti campi:
Tipo | Nome |
---|---|
String |
common_name |
String |
country_code |
String |
organizzazione |
String |
organizational_unit |
String |
località |
String |
provincia |
String |
street_address |
String |
postal_code |
Nomi alternativi dei soggetti (SAN)
Puoi convalidare tutte le SAN come specificato nella richiesta di certificato utilizzando la variabile subject_alt_names
. La variabile subject_alt_names
contiene un elenco di struct SAN, dove ogni SAN è di tipo SubjectAltName
.
SubjectAltName
è uno struct contenente i seguenti campi:
Tipo | Nome |
---|---|
String |
valore |
[]Int32 |
oid |
Enum |
tipo |
Puoi utilizzare i seguenti valori per il tipo SubjectAltName
:
DNS
URI
EMAIL
IP_ADDRESS
CUSTOM
La variabile subject_alt_names
contiene un elenco con tutte le SAN richieste.
Puoi utilizzare le seguenti macro sulle SAN:
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)
Per ulteriori informazioni sulle macro, consulta Definizione della lingua: macro.
Espressioni di esempio
Assicurarsi un nome comune specifico e una serie di paesi
subject.common_name == "google.com" && (subject.country_code == "US" || subject.country_code == "IR")
Assicurarsi che tutti i nomi DNS terminino con una stringa personalizzata
subject_alt_names.all(san, san.type == DNS && san.value.endsWith(".test.com"))
Assicurarsi che tutte le SAN siano di tipo DNS o EMAIL
subject_alt_names.all(san, san.type == DNS || san.type == EMAIL )
Garanzia di una sola SAN personalizzata con un OID specifico
subject_alt_names.size() == 1 && subject_alt_names[0].oid == [1, 2, 3, 5, 17]
Assicurarsi che le SAN personalizzate siano solo un insieme di OID
subject_alt_names.all(san, san.oid == [1, 2, 4, 5, 55] || san.oid == [1, 2, 4, 5, 54])
Dialetto CEL per i criteri IAM
Utilizza le condizioni IAM per sottoporre le associazioni dei ruoli IAM a un'espressione condizionale. Se la condizione restituisce true
, l'associazione del ruolo IAM è effettiva, altrimenti viene ignorata. CA Service consente di aggiungere associazioni condizionali IAM a un pool di CA.
La condizione IAM è un'espressione CEL che fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano. Gli utenti impostano condizioni per le associazioni di ruoli in un criterio IAM che viene archiviato da IAM e valutato per verificare se l'operazione che sta per essere eseguita è consentita.
Per saperne di più sulle condizioni IAM, consulta Panoramica delle condizioni IAM.
I seguenti attributi vengono esposti durante la valutazione CEL delle condizioni IAM:
privateca.googleapis.com/subject
privateca.googleapis.com/subject
è accessibile comeapi.getAttribute('privateca.googleapis.com/subject', {})
.
Tipo | Descrizione |
---|---|
map{string, string} |
Questo campo contiene il nome distinto del soggetto (incluso il nome comune) come specificato nella richiesta di certificato in arrivo. Esempio { |
privateca.googleapis.com/subject_alt_names
privateca.googleapis.com/subject_alt_names
è accessibile comeapi.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.
Tipo | Descrizione |
---|---|
list{string} |
Questo campo contiene tutte le SAN richieste come specificato nella richiesta di certificato in entrata. A ciascuna delle SAN richieste è associato un prefisso con il proprio tipo. Le SAN di tipo sconosciuto hanno come prefisso l'OID serializzato del tipo. Esempio { |
privateca.googleapis.com/template
privateca.googleapis.com/template
è accessibile comeapi.getAttribute('privateca.googleapis.com/template', '')
.
Tipo | Descrizione |
---|---|
String |
Il modello di certificato utilizzato, se presente. Il formato è {project_id}/-/{template_id} .Esempio: my-project-pki/-/workload_tls |
Il nome del modello fornito nella condizione IAM deve corrispondere al nome del modello
nella richiesta di certificato. Quindi, se fornisci un ID progetto nella
privateca.googleapis.com/template
dell'espressione CEL, devi
e fornire un ID progetto quando richiedi il certificato. Se fornisci un parametro
numero di progetto nell'espressione CEL, devi fornire un numero di progetto in
per la richiesta di certificato.
Espressioni di esempio
Assicurarsi che l'organizzazione sia impostata su "Esempio" per tutti i soggetti e il codice paese impostato su US
o UK
api.getAttribute('privateca.googleapis.com/subject', {})['organization'] == 'Example' &&
api.getAttribute('privateca.googleapis.com/subject', {})['country_code'] in ['US', 'UK']
Assicurarsi che la richiesta di certificato includa solo le SAN DNS specificate
api.getAttribute('privateca.googleapis.com/subject_alt_names', [])
.hasOnly(['dns:sample1.prod.example.com', 'dns:sample2.prod.example.com'])
Assicurarsi che tutti i certificati utilizzino un modello specifico
api.getAttribute('privateca.googleapis.com/template', '') == 'my-project-pki/-/leaf-server-tls'
Passaggi successivi
- Leggi l'introduzione a CEL.
- Scopri di più sulla definizione linguistica per CEL.
- Scopri di più sui modelli di certificato e sui criteri di emissione.
- Leggi la panoramica delle condizioni IAM.
- Scopri come aggiungere un criterio di emissione dei certificati a un pool di CA.